Пользовательская не клиентская область, изменение размера кажется медленным и странным - PullRequest
0 голосов
/ 21 октября 2018

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

...