如果我在创建主窗口后使用CreateEx(...)我不能FindWindow(...)

时间:2016-06-29 04:05:52

标签: 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.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

为什么会这样,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

改为使用FindWindowEx

  

要查找仅限消息的窗口,请在hwndParent中指定HWND_MESSAGE   FindWindowEx函数的参数。另外,FindWindowEx   搜索仅限消息的窗口以及顶层窗口(如果两者都是)   hwndParent和hwndChildAfter参数为NULL。