我有以下代码仅用于创建'消息'窗口,窗口始终创建正常,在创建时出现问题。
处理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.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");
现在我遇到的问题是如果在调用process A
之前OnInitDialog
创建了窗口,那么process B
就可以找到该窗口。
但如果process A
在之后的任何时间创建了主窗口,那么process B
将无法再找到该窗口。
在这两种情况下,消息泵都被称为正常,窗口是按预期创建的,我在主应用程序启动后创建时无法FindWindow
。
为什么会这样,我该如何解决这个问题?
答案 0 :(得分:0)
改为使用FindWindowEx
:
要查找仅限消息的窗口,请在hwndParent中指定HWND_MESSAGE FindWindowEx函数的参数。另外,FindWindowEx 搜索仅限消息的窗口以及顶层窗口(如果两者都是) hwndParent和hwndChildAfter参数为NULL。