Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/43: Рейтинг темы: голосов - 43, средняя оценка - 4.65
5 / 5 / 0
Регистрация: 16.07.2009
Сообщений: 87

Перерисовать окно, где указывать InvalidateRect?

24.03.2010, 22:57. Показов 7932. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, не могу понять где нужно указать InvalidateRect(wnd,0,NULL); чтобы перерисовать окно?
Дело в том, что нарисовав элемент - если окно отодвинуть за границу экрана а потом обратно - то то что было нарисовано - стирается. Поэтому нужно окно перерисовывать. Но вот что-то не получается.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <windows.h>
 
char className[] = "WindowClass1";
MSG msg;
HWND hbutton;
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND wnd, UINT msg, WPARAM wParam, LPARAM lParam){
    switch(msg){
 
    case WM_CREATE: {
 
        return 0;
    }
 
    case WM_MOUSEMOVE:
        {
 
            return 0;
        }
 
    case WM_RBUTTONDOWN:
        {
            return 0;
        }
 
    case WM_LBUTTONDOWN:
        {
        
            HDC dc;
            dc = GetDC(wnd);
 
            Rectangle(dc, 100,100,200,300);
            
            return 0;
        }
 
        case WM_PAINT:
        {
            
            PAINTSTRUCT ps;
            HDC dc = BeginPaint(wnd,&ps);
            return 0;
        }
 
    case WM_COMMAND:{
        
        return 0;
    }
 
    case WM_DESTROY: {PostQuitMessage(0); return 0;}
    }
    return DefWindowProc(wnd,msg,wParam,lParam);
}
 
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    // TODO: Place code here.
    WNDCLASS wc;
    HWND hwnd;
 
    hInst = hInstance;
 
    wc.hInstance = hInstance;
    wc.hIcon=LoadIcon(NULL,IDI_QUESTION);
    wc.hCursor=LoadCursor(NULL,IDC_ARROW);
    wc.lpfnWndProc = WndProc;
    wc.lpszMenuName=NULL;
    wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
    wc.lpszClassName = className;
    wc.cbClsExtra=wc.cbWndExtra=wc.style=0;
 
    int k = RegisterClass(&wc);
 
    hwnd = CreateWindow(className, "Hellooooo!", WS_VISIBLE|WS_OVERLAPPEDWINDOW/*|WS_CAPTION|WS_SYSMENU|WS_MAXIMIZEBOX|WS_THICKFRAME*/,
        300, 300, 600, 400, NULL, NULL, hInstance, 0);
 
    if(!hwnd) return false;
    
    while(GetMessage(&msg,0,0,0)){
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    
    return 1;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.03.2010, 22:57
Ответы с готовыми решениями:

Перерисовать окно
Я нарисовал с помощью WinApi график функции мне надо чтобы при изменении размеров окна график оставался на том же месте по отношению к...

перерисовать окно
В общем у меня есть вм_паинт case WM_PAINT: ///////////// PAINTSTRUCT ps; HDC hdc, hCompDC; BITMAP bitmap; HANDLE...

Перерисовать окно по истечении таймера
Подскажите пожалуйста. Пишу игру на подобие Тамогочи. После выбора зверя, окно перерисовывается и появляются три шкалы состояния этого...

1
 Аватар для Rajd
44 / 22 / 2
Регистрация: 20.11.2008
Сообщений: 178
25.03.2010, 08:34
Всё правильно он у тебя показывает.
При перемещении стандартная функция сама вызывает перерисовку окна, а конкретнее WM_PAINT.
А у тебя прямоугольник рисуется только при щелчке мышью поставь следующий код и будет тебе щастье.
C++
1
2
3
4
5
6
        case WM_PAINT:
                        PAINTSTRUCT ps;
                        HDC dc = BeginPaint(wnd,&ps);
                        Rectangle(dc, 100,100,200,300);
                        EndPaint(wnd,&ps);
                        return 0;
Добавлено через 3 минуты
Еще на будущее, не обязательно каждый case ,брать в фигурные скобки.
и вместо return 0; в switch() можно воспользоваться break; для перывания текущего выбора.

Добавлено через 4 минуты
ещё, обязательно указывай что завершаешь пользоваться дескриптором.
для BeginPaint это EndPaint?
а для GetDC это ReleaseDC.
В противном случае проблем точно не оберешься.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.03.2010, 08:34
Помогаю со студенческими работами здесь

Где указывать сервер в Lineage 2?
народ гдє указивать сервер в лінейдж 2)і подскажитє хорошой сервер))

Где указывать регион яндекс хмл
&lt;yandexsearch version=&quot;1.0&quot;&gt; &lt;request&gt; &lt;query/&gt; &lt;page&gt;0&lt;/page&gt; &lt;sortby order=&quot;descending&quot; priority=&quot;no&quot;&gt;rlv&lt;/sortby&gt; ...

Есть ли разница где указывать namespace?
Здравствуйте. Начинию изучать С++ (С до этого изучал). Какая разница между using namespace std; int main () { return 0; ...

Где и как указывать пути к dll?
Есть программа, когда запускаешь через exe руками - все норм, когда мой exe запускает какой-то задачник программа не видит dll и все...

Где указывать имя файла xml?
Есть готовая программа тестирования и файл xml, который программа должна считывать и открывать в виндовс формс. Не могу понять, где мне...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru