如何使用注册类注册Windows类和查找窗口

时间:2010-11-16 12:37:58

标签: c++ windows mfc findwindow

我正在创建一个MFC应用程序,它将在点击Explorer Context(Rightclick)菜单时启动。

但我只需启动应用程序的单个实例。为此,我必须使用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类的构造函数中调用该方法。我在启动应用程序时验证了该类正在注册。

现在在我的shell扩展中,我试图找到在我的MFC中注册的类,如下所示:

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

但是我无法将CWnd变为Window。无法搞清楚。如果我遗漏了某些东西或做错了什么,请告诉我。

1 个答案:

答案 0 :(得分:3)

FindWindow找到窗口实例而不是窗口。在您的应用程序中,您需要实际创建一个窗口,以便扩展程序可以找到该窗口。

(按类名查找窗口很好;问题是您实际上没有创建任何要查找的内容。)

另外,我怀疑如果你尝试根据你注册的窗口类创建一个窗口,它会失败,因为你已经将大多数WNDCLASS结构留空了。请参阅您链接到的示例以获得更好的默认值。 (例如,您必须提供wndproc和hinstance。)