Я переместил дочернее окно в верхнюю часть Z-порядка, вызвав SetWindowPos(m_hwnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW)
. Затем окно закрашивается окнами, которые должны быть ниже. Только если я сделаю недействительным окно для отправки другого WM_PAINT
сообщения (например, в ответ на щелчок мыши), оно будет выглядеть так, как должно.
Я уже выяснил, что это является причиной после отправки сообщения рисованияв окно, которое должно быть впереди и находится сверху Z-порядка, другие сообщения WM_ERASEBKGN
и WM_PAINT
отправляются в окна ниже.
Нужно ли скрывать другие окна илиможно просто перекрасить их (это только меню выбора, которое закрывается после выбора).
Это код меню
LRESULT AddChartsMenu::HandleMessage(UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
{
RECT MainWindowRc;
GetClientRect(GetParent(m_hwnd), &MainWindowRc);
SetWindowPos(m_hwnd, HWND_TOP, 0, 0, MainWindowRc.right, MainWindowRc.bottom, SWP_SHOWWINDOW);
CreateCurrentMenu();
ShowWindow(m_hwnd, SW_SHOW);
}break;
case WM_DESTROY:
{
SetWindowLongPtr(m_hwnd, GWLP_USERDATA, (LONG_PTR)NULL);
delete measurable;
delete this;
}break;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(m_hwnd, &ps);
HBRUSH br = CreateSolidBrush(RGB(0, 127, 0));
FillRect(hdc, &ps.rcPaint, br);
EndPaint(m_hwnd, &ps);
}break;
default:
return DefWindowProc(m_hwnd, message, wParam, lParam);
}
return 0;
}