C++ 如果在创建主窗口后使用CreateEx(…),则无法查找DWINDOW(…)
我有以下代码来创建一个“仅消息”窗口,该窗口总是创建得很好,创建时会出现问题 过程AC++ 如果在创建主窗口后使用CreateEx(…),则无法查找DWINDOW(…),c++,c++11,findwindow,C++,C++11,Findwindow,我有以下代码来创建一个“仅消息”窗口,该窗口总是创建得很好,创建时会出现问题 过程A ... auto hInstance = ::GetModuleHandle( nullptr ); WNDCLASSEX wcx; wcx.cbSize = sizeof(wcx); wcx.style = 0; wcx.lpfnWndProc = MyWinProc; wcx.cbClsExtra = 0; wcx.cbWndExtra = 0; wcx.hInstance = hInstance; wcx
...
auto hInstance = ::GetModuleHandle( nullptr );
WNDCLASSEX wcx;
wcx.cbSize = sizeof(wcx);
wcx.style = 0;
wcx.lpfnWndProc = MyWinProc;
wcx.cbClsExtra = 0;
wcx.cbWndExtra = 0;
wcx.hInstance = hInstance;
wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
wcx.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH);
wcx.lpszMenuName = L"MainMenu";
wcx.lpszClassName = L"MyDummyClass";
wcx.hIconSm = (HICON)LoadImage(hInstance,
MAKEINTRESOURCE(5),
IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
LR_DEFAULTCOLOR);
if (!RegisterClassEx(&wcx))
{
throw "Bad 1.";
}
if (!this->CWnd::CreateEx(0, L"MyDummyClass", L"MyDummyWindow", 0, 0, 0, 0, 0, HWND_MESSAGE, nullptr))
{
throw "Bad 2.";
}
过程B
auto myWnd = FindWindow( L"MyDummyClass");
现在我遇到的问题是,如果进程A
在调用OnInitDialog
之前创建窗口,那么进程B
可以找到窗口
但是如果进程A
在主窗口创建后的任何其他时间创建该窗口,则进程B
无法再找到该窗口
在这两种情况下,消息泵都被称为fine,窗口是按预期创建的,我只是无法在主应用程序启动后创建它
为什么会这样?我如何解决这个问题?使用
FindWindowEx
:
要查找仅限消息的窗口,请在hwndParent中指定HWNDU消息
FindWindowEx函数的参数。此外,FindWindowEx
搜索仅邮件窗口以及顶级窗口(如果
hwndParent和hwndChildAfter参数为空
改用
FindWindowEx
:
要查找仅限消息的窗口,请在hwndParent中指定HWNDU消息
FindWindowEx函数的参数。此外,FindWindowEx
搜索仅邮件窗口以及顶级窗口(如果
hwndParent和hwndChildAfter参数为空
为什么不将HWND或Class对象传递给进程B?@JonnyHenly,我的意思是,在这两种情况下,创建的窗口都没有错误,但是,如果在创建主窗口之前创建,则可以“找到”,但如果在创建主对话框之后创建,则无法再找到。@Joel这两个进程是独立的exe。能否使用spyxx.exe查看窗口是否按预期创建?这两种情况有什么不同?在这两种情况下它的父对象是否相同?为什么不将HWND或Class对象传递给进程B?@JonnyHenly,我的意思是,在这两种情况下,创建的窗口都没有错误,但是,如果在创建主窗口之前创建,则可以“找到”,但如果在创建主对话框之后创建,则无法再找到。@Joel这两个进程是独立的exe。能否使用spyxx.exe查看窗口是否按预期创建?这两种情况有什么不同?在这两个实例中它的父级是否相同?我刚刚尝试过,但使用
FindWindowEx
也找不到该窗口,如果我在创建主对话框之前创建窗口,而不是之后创建窗口,则会“找到”该窗口。我刚刚尝试过,但使用FindWindowEx
也找不到该窗口,如果在创建主对话框之前创建窗口,而不是在创建主对话框之后创建窗口,则会“找到”。