Пользовательская не клиентская область, изменение размера кажется медленным и странным

Я пытаюсь нарисовать свою собственную не клиентскую область в окне, обрабатывая 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 вызов, окна начнут вести себя нормально во время изменения размера. Очевидно, этот метод делает что-то, чтобы постоянно обновлять клиентскую область окна, пока изменяется размер. У меня нет доступа к исходному коду этого метода, поэтому я не знаю, как он работает.

0 ответов

Другие вопросы по тегам