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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
jonson
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
#1

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

12.07.2010, 00:27. Просмотров 1391. Ответов 7
Метки нет (Все метки)

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

Как скрестить службу и клиентскую часть для вин2к/винХР - C++
Проблема насущная, может кто сталкивался с чем-то подобным.... Мне надо написать службу, которая бы могла вмешиваться в работу...

Как можно перерисовать елементы класса CToolBar? - C++
Как можно перерисовать елементы класса CToolBar?

Как очистить всю строку? - C++
У меня есть строка, в этой строке я храню информацию, потом ее вывожу на экран. Как сделать так, чтобы эта строка стала пустой и можно было...

Как прочитать всю строку? - C++
TArray <std::wstring> Result; std::string Buffer; std::ifstream File; std::wcout<<"Opening the project...

Как записать всю последовательность в файл? - C++
Собственно как это сделать??? Простым не грамозским способом ,а грамозским я знаю как :D #include <conio.h> #include <stdio.h> ...

Как очистить и вывести всю очередь? - C++
Привет)Помоги написать 2 функции. Мои наработки воть: #include <iostream> using namespace std; struct Node { int data; Node...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
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
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
12.07.2010, 01:02  [ТС]     Как перерисовать всю клиентскую область? #3
Так тоже не перерисовует, возможно что я не так что-то делаю.
Параметр 2 (CONST RECT* lprcUpdate) это область прорисовки? ( например через GetClientRect(hWnd, &rect) )
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
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
231 / 204 / 61
Регистрация: 18.03.2010
Сообщений: 749
12.07.2010, 22:41  [ТС]     Как перерисовать всю клиентскую область? #6
Это тоже не то.
Не пойму почему при перемещении или изменении размеров окна WM_PAINT обновляет всю клиентскую область, а если его частично закрыть другим окном, после чего открыть - перерисовывается только та закрытая часть но не вся клиентская область?!

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

Как вывести на дисплей всю очередь? - C++
Здравствуйте, у меня есть вопрос, как вывести на дисплей всю очередь, а то у мене сейчас выводит только первую и последнюю записи ...

Как попасть в область на координате (х,у) ? - C++
Построить программу, которая вводит координаты точки (x, y) и определяет, попадает ли точка в заштрихованную область на рисунке. Попадание...

Область видимости, как ее понимать - C++
Здравствуйте. Поясните, пожалуйста, что значит тип size_type после области видимости, к чему он относится? vector<int>::size_type...

Как включить рабочую область в VS 2010 - C++
У меня пропала рабочая область то есть, та где показывает: Заголовочные файлы: Исходный код: Вот я создал пустой проект а ее...


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

Или воспользуйтесь поиском по форуму:
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     Как перерисовать всю клиентскую область?
Ответ Создать тему
Опции темы

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