Проблемы с обновлением перетаскиваемого окна MFC - PullRequest
2 голосов
/ 20 декабря 2010

Привет.

Мне нужно сделать перетаскиваемое диалоговое окно MFC, которое имеет фон - используется это: http://www.codeproject.com/KB/graphics/picturewindow.aspx - и имеет несколько элементов управления Picturebox. Я испробовал два подхода, и хотя они работают, у них есть некоторые проблемы.

Первый подход - «Ручной» - в сообщении LBUTTONDOWN я проверяю, находится ли он в чистой области моего окна, и устанавливаю переменную flag. В MOUSEMOVE флаг проверяется, и если он установлен, вызывается функция MoveWindow, а затем Invalidate (1). На LBUTTONUP флаг не установлен. Этот подход работает правильно и перерисовывается по мере необходимости, но как-то очень медленно - если я перемещаю курсор слишком быстро, окно перестает работать и не перетаскивается, так как курсор больше не находится над окном.

Второй подход - «Автоматический» - я просто звоню

DefWindowProc (WM_SYSCOMMAND, SC_MOVE + 2, MAKELPARAM (point.x, point.y));

в LBUTTONDOWN, и он обрабатывает все остальное, он быстрый и никогда не отстает, но когда я перетаскиваю его по краю экрана (чтобы некоторая часть окна стала невидимой), когда я перетаскиваю его назад, все элементы управления становятся невидимыми и не обновляются, фон в порядке. Я предполагаю, что это потому, что Invalidate () не вызывается во время движения таким образом, как я на самом деле вызываю его после вызова DefWindowProc (), и поэтому все правильно обновляется, когда я нажимаю кнопку.

Что я должен сделать, чтобы улучшить одно из этих решений? Мне нужно и быстро, и правильно. Возможно, я не предоставил некоторую необходимую информацию, я добавлю ее, если возникнет необходимость.

Заранее спасибо.

1 Ответ

0 голосов
/ 21 декабря 2010

Решил проблему, изменив второй способ. Я добавил полную перерисовку в OnPaint (), и чтобы избавиться от мерцания, я только перерисовывал во время перетаскивания, используя переменную flag.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...