Форум программистов, компьютерный форум CyberForum.ru

Как перерисовать всю клиентскую область? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
jonson
 Аватар для jonson
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
12.07.2010, 00:27     Как перерисовать всю клиентскую область? #1
Всем доброго времени суток. Подскажите пожалуйста, как заставить свое окно перерисовываться полностью в момент его неактивности?
Например, когда его частично закрыть другим окном, после чего открыть - перерисовывается та закрытая часть но не вся клиентская область. Как перерисовать всю клиентскую область?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.07.2010, 00:27     Как перерисовать всю клиентскую область?
Посмотрите здесь:

Как записать всю последовательность в файл? C++
C++ Как включить рабочую область в VS 2010
Как скрестить службу и клиентскую часть для вин2к/винХР C++
Как можно перерисовать елементы класса CToolBar? C++
Как очистить всю строку? C++
C++ Как окрасить в цвет фигуру, траекторию, область
C++ Как попасть в область на координате (х,у) ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
12.07.2010, 00:35     Как перерисовать всю клиентскую область? #2
можно воспользоваться RedrawWindow

C++
1
2
3
4
5
6
7
8
BOOL WINAPI RedrawWindow(
  HWND hwnd,
  CONST RECT* lprcUpdate,
  HRGN hrgnUpdate,
  UINT flags
);
 
RedrawWindow(hwnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
jonson
 Аватар для jonson
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
12.07.2010, 01:02  [ТС]     Как перерисовать всю клиентскую область? #3
Так тоже не перерисовует, возможно что я не так что-то делаю.
Параметр 2 (CONST RECT* lprcUpdate) это область прорисовки? ( например через GetClientRect(hWnd, &rect) )
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
12.07.2010, 01:13     Как перерисовать всю клиентскую область? #4
да, но мсдн грит, что можно оставить NULL для перерисовки всего
проверить не могу - не под виндой
[Freeman]
34 / 34 / 6
Регистрация: 07.06.2010
Сообщений: 118
12.07.2010, 12:55     Как перерисовать всю клиентскую область? #5
C
1
2
3
BOOL UpdateWindow(
    HWND hWnd   // дескриптор окна
);
не то?
jonson
 Аватар для jonson
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
12.07.2010, 22:41  [ТС]     Как перерисовать всю клиентскую область? #6
Это тоже не то.
Не пойму почему при перемещении или изменении размеров окна WM_PAINT обновляет всю клиентскую область, а если его частично закрыть другим окном, после чего открыть - перерисовывается только та закрытая часть но не вся клиентская область?!

Дело в том что при изменении размеров или перемещении по экрану моего окна, оно плавно меняет свой фон, но в момент его частичного перекрытия другим окном фон меняется только в той перекрытой области а не во всём окне.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
12.07.2010, 22:47     Как перерисовать всю клиентскую область? #7
Цитата Сообщение от jonson Посмотреть сообщение
после чего открыть - перерисовывается только та закрытая часть но не вся клиентская область?!
потому что требуется перерисовать только часть окна, а программисту уже решать, сколько перерисовывать, вызывая InvalidateRect
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2010, 22:59     Как перерисовать всю клиентскую область?
Еще ссылки по теме:

Как вывести на дисплей всю очередь? C++
Указатель на строку: как выводить не всю строку целиком, а конкретную букву C++
Как прочитать всю строку? C++
Как очистить и вывести всю очередь? C++
C++ Область видимости, как ее понимать

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
jonson
 Аватар для jonson
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
12.07.2010, 22:59  [ТС]     Как перерисовать всю клиентскую область? #8
Спасибо alex_x_x, вот так все работает.

C++
1
2
3
4
5
6
case WM_SYNCPAINT:
    {
            GetClientRect(hWnd, &rect);
            InvalidateRect(hWnd, &rect, true);
            break;
    }
Yandex
Объявления
12.07.2010, 22:59     Как перерисовать всю клиентскую область?
Ответ Создать тему
Опции темы

Текущее время: 10:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru