Пользовательская не клиентская область, изменение размера кажется медленным и странным
Я пытаюсь нарисовать свою собственную не клиентскую область в окне, обрабатывая WM_NCPAINT
а также WM_NCACTIVATE
, Проблема в том, что когда я изменяю размер окна, нижний и правый края занимают слишком много времени, чтобы "наверстать упущенное" и адаптироваться к новому размеру окна. Это не результат медленного или неэффективного рендеринга кода, потому что это происходит даже с полностью пустым WM_NCPAINT
обработчик.
Если я позвоню DefWindowProc
в моем обработчике, или вообще не обрабатывать NCPAINT, это странное поведение перестает происходить, и, хотя я изменяю размер окна, нижний правый угол вообще не двигается.
Я попытался принудительно обновить окно в обработчике NCPAINT, но проблема не исчезла.
Здесь вы можете увидеть, о чем я говорю. Просто игнорируйте уродливый вид окна из-за отсутствия оконной рамы. На демонстрации нет кода для рисования в WM_NCPAINT
обработчик, он просто возвращает 0 в обратный вызов WndProc.
Мой вопрос заключается в том, что я должен делать после рисования собственной оконной рамы, чтобы нижний и правый края были зафиксированы при изменении размера, как в любом обычном окне?
РЕДАКТИРОВАТЬ
Это код, который обрабатывает сообщения Windows. Пока нет кода рендеринга, потому что сначала я хочу избавиться от странного поведения при изменении размера.
LRESULT CALLBACK wndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_NCACTIVATE:
case WM_NCPAINT:
{
// DefWindowProc(hWnd, uMsg, wParam, lParam);
// Custom frame rendering will be done here
return 0;
}
}
return CallWindowProc(prevWmdProc, hWnd, uMsg, wParam, lParam);;
}
Обратите внимание, что если я откомментирую DefWindowProc
вызов, окна начнут вести себя нормально во время изменения размера. Очевидно, этот метод делает что-то, чтобы постоянно обновлять клиентскую область окна, пока изменяется размер. У меня нет доступа к исходному коду этого метода, поэтому я не знаю, как он работает.