C++ 如果在创建主窗口后使用CreateEx(…),则无法查找DWINDOW(…)

C++ 如果在创建主窗口后使用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

我有以下代码来创建一个“仅消息”窗口,该窗口总是创建得很好,创建时会出现问题

过程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");
现在我遇到的问题是,如果
进程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
也找不到该窗口,如果在创建主对话框之前创建窗口,而不是在创建主对话框之后创建窗口,则会“找到”。