2010-11-16 69 views
0

我正在創建一個MFC應用程序,該應用程序將在單擊資源管理器上下文(右鍵單擊)菜單上啓動。如何註冊Windows類並使用註冊類查找窗口

但我只需要啓動應用程序的單個實例。爲此,我不得不使用FindWindowAfxRegisterClass

我試着在下面我的MFC應用程序註冊類:

BOOL CNDSClientDlg::InitInstance() 
{ 
    //Register Window Updated on 16th Nov 2010, @Subhen 
    // Register our unique class name that we wish to use 
    WNDCLASS wndcls; 
    memset(&wndcls, 0, sizeof(WNDCLASS)); 
    //Class name for using FindWindow later 
    wndcls.lpszClassName = _T("NDSApp"); 
    // Register new class and exit if it fails 

    if(!AfxRegisterClass(&wndcls)) // [C] 

    { 
     return FALSE; 
    } 
} 

,並呼籲在MFC類的構造方法。我在啓動應用程序時驗證了該課程正在註冊。

現在在我的外殼擴展,我試圖找到我的MFC註冊的類別如下:

CWnd *pWndPrev = NULL; 
pWndPrev = CWnd::FindWindow(_T("NDSApp"),NULL); 
     if(pWndPrev != NULL) 
      pWndPrev->BringWindowToTop(); 

但我不能夠得到的CWnd到窗口。無法弄清楚。請讓我知道,如果我錯過了什麼或做錯了什麼。

回答

3

FindWindow找到窗口實例不是窗口。在您的應用程序中註冊了您需要實際創建窗口的類,以便擴展程序可以找到該窗口。

(查找按類名稱的窗口是好的。問題是你還沒有真正建立任何東西找到)

而且,我懷疑,如果你嘗試根據窗口類,您可以創建一個窗口已註冊它將失敗,因爲您已將WNDCLASS結構的大部分留空。查看您鏈接到的示例以獲取更好的默認值。 (例如,您必須提供wndproc和hinstance。)