gpt4 book ai didi

c++ - 如何注册 Windows 类并使用已注册的类查找窗口

转载 作者:行者123 更新时间:2023-11-28 01:09:25 25 4
gpt4 key购买 nike

我正在创建一个 MFC 应用程序,它将在单击资源管理器上下文(右键单击)菜单时启动。

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

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

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

但我无法将 CWnd 获取到窗口。想不通。如果我遗漏了什么或做错了什么,请告诉我。

最佳答案

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

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

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

关于c++ - 如何注册 Windows 类并使用已注册的类查找窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4194179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com