mardi 28 juin 2016

If I use CreateEx( ... ) after the main window was created I cannot FindWindow( ... )

I have the following code to create a 'message only' window, the window is always created fine, the problem happens when it is created.

Process 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.";
}

Process B

 auto myWnd = FindWindow( L"MyDummyClass");

Now the problem I have is if process A create the window before OnInitDialog is called then process B can find the window.

But if process A creates the window at any other time after the main window was created then process B cannot find the window any longer.

In both cases the message pump is called fine, the window is created as expected, I just cannot FindWindow when I create it after the main application is started.

Why would that be, and how can I work around that?

Aucun commentaire:

Enregistrer un commentaire