Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для Adler
80 / 85 / 19
Регистрация: 07.05.2009
Сообщений: 336

BackBuffer

04.09.2009, 01:52. Показов 1609. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
линию не видно... найдите ошибку кому не сложно.
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
case WM_PAINT:
  {
    BeginPaint(hWnd,&ps);
    HDC dc=ps.hdc;
    HDC cDC=CreateCompatibleDC(dc);
    HBITMAP hBitmap = CreateCompatibleBitmap (cDC, crect.right-crect.left, crect.bottom-crect.top);
    SelectObject (cDC, hBitmap);
    static HPEN cp=CreatePen(PS_SOLID,1,0x00FF00);
    static HBRUSH cb=CreateSolidBrush(0x000000);
    FillRect(cDC,&crect,cb);
    SelectObject(cDC,cp);
    MoveToEx(cDC,10,10,0);
    LineTo(cDC,P.x,P.y);
    BitBlt (dc, 0, 0, crect.right, crect.bottom, cDC, 0, 0, SRCCOPY);
    ReleaseDC(hWnd,dc);
    DeleteDC(cDC);
    EndPaint(hWnd,&ps);
    break;
  }
case WM_MOUSEMOVE:
  {
    GetCursorPos(&P);
    ScreenToClient(hWnd,&P);
    InvalidateRect(hWnd, NULL, TRUE);
    UpdateWindow(hWnd);
    break;
  }
>первый день на чистом GDI.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2009, 01:52
Ответы с готовыми решениями:

Использование backbuffer
Есть QTableWidget, на нем - layout - на котором рисуются красные отрезки , которые накладываются на таблицу. Если рисовать прямо на layout...

Где объекты Screen и BackBuffer в Delphi 7
Объекты Screen и BackBuffer нужно добавлять на форму или они уже есть на форме? Спасибо.


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

Или воспользуйтесь поиском по форуму:
8
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
04.09.2009, 12:29
ошибки не заметил.
проверь размеры, возможно, линии единичной ширины просто не видно.
1
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
04.09.2009, 13:07
А InvalidateRect(hWnd, NULL, TRUE); случайно не ставит нулевую область обновления экрана.....

Добавлено через 51 секунду
Обычно пишут либо Invalidate, либо InvalidateRect(hWnd, Rect, TRUE)
1
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
04.09.2009, 13:13
Цитата Сообщение от vitaly1981 Посмотреть сообщение
А InvalidateRect(hWnd, NULL, TRUE); случайно не ставит нулевую область обновления экрана.....

Добавлено через 51 секунду
Обычно пишут либо Invalidate, либо InvalidateRect(hWnd, Rect, TRUE)
случайно не ставит.Наоборот ставит всю при передаче NULL в качестве параметра

Цитата Сообщение от MSDN
Points to a RECT structure that contains the client coordinates of the rectangle to be added to the update region. If this parameter is NULL, the entire client area is added to the update region.
1
paladin
 Аватар для Yurii_74
286 / 187 / 7
Регистрация: 25.02.2009
Сообщений: 589
04.09.2009, 14:12
Давно дело было, но
C++
1
    ReleaseDC(hWnd,dc);
оно вообще надо?

MSDN советует так:

C++
1
2
3
4
HDC hdc;
hdc = BeginPaint(hWnd, &ps);
...
EndPaint(hWnd, &ps);
1
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
04.09.2009, 14:14
Цитата Сообщение от Yurii_74 Посмотреть сообщение
Давно дело было, но
C++
1
    ReleaseDC(hWnd,dc);
оно вообще надо?
Нет,это сделает EndPaint
1
paladin
 Аватар для Yurii_74
286 / 187 / 7
Регистрация: 25.02.2009
Сообщений: 589
04.09.2009, 14:50
Также мы ничего не знаем о crect. Только предположения. Насколько мне вспомнилось, в своей проге я при запуске один раз создал этот Компатибл ДиСи и при завершении делитил его. Работало несколько быстрее. Также в CreateCompatibleBitmap подставлялись длина и ширина исходного dc (с помощью 2 функций для HDC, точных имен не помню).
1
 Аватар для Adler
80 / 85 / 19
Регистрация: 07.05.2009
Сообщений: 336
04.09.2009, 15:07  [ТС]
Patch, vitaly1981, XuTPbIu_MuHTAu, Yurii_74,
Спасибо.

Ошибка была в CreateCompatibleBitmap. Там надо было не cDC, а dc передавать. Сейчас немного поправил, рисуется нормально.
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
PAINTSTRUCT ps;
static POINT p={0,0};
static RECT crect; 
static HBITMAP hb=0; 
static bool her=0;
static HDC cdc=0;
switch (message)
{
case WM_SIZE:
  {
    if (her){DeleteObject(hb);ReleaseDC(hWnd,cdc);DeleteDC(cdc);}else{her=TRUE;};
    GetClientRect(hWnd,&crect);
    hb = CreateCompatibleBitmap (GetDC(hWnd), crect.right-crect.left, crect.bottom-crect.top);
    cdc=CreateCompatibleDC(GetDC(hWnd));
    break;
  }
case WM_PAINT:
  {
    //var
    vec2d a={10,10};
    vec2d b={p.x,p.y};
    //
    BeginPaint(hWnd,&ps);
    static HPEN cp=CreatePen(PS_SOLID,1,0x00FF00);
    static HBRUSH cb=CreateSolidBrush(0x000000);
    static HPEN yp=CreatePen(PS_SOLID,1,0x00FFFF);
    static HBRUSH yb=CreateSolidBrush(0x0088FF);      
    SelectObject (cdc, hb); FillRect(cdc,&crect,cb);
    SelectObject (cdc, yp); SelectObject (cdc, yb);
    Circle(cdc,a,4); Circle(cdc,b,4);
    SelectObject(cdc,cp); Line(cdc,a,b); 
    for(int i=0;i<100;i++){MoveToEx(cdc,i*10+p.x,20,0); LineTo(cdc,i*10+p.x,crect.bottom-20);}
    BitBlt (ps.hdc, 0, 0, crect.right, crect.bottom, cdc, 0, 0, SRCCOPY);
    EndPaint(hWnd,&ps);
    break;
  } 
case WM_MOUSEMOVE:
  {
    GetCursorPos(&p);
    ScreenToClient(hWnd,&p);
    InvalidateRect(hWnd, NULL, FALSE);
    UpdateWindow(hWnd);
    break;
  }
case WM_DESTROY:
  PostQuitMessage(0);
  break;
default:
  return DefWindowProc(hWnd, message, wParam, lParam);
}
Но кажется, что я всё таки не правильно освобождаю(cdс и hb) при изменении размера окна. И ещё я сделал
hbrBackground=NULL;
0
 Аватар для Adler
80 / 85 / 19
Регистрация: 07.05.2009
Сообщений: 336
18.09.2009, 17:34  [ТС]
>отпишусь на всякий случай.
Цитата Сообщение от Adler Посмотреть сообщение
GetDC(hWnd)
вот где ошибка закралась. после вызова GetDC надо это самое DC релизнуть...

PS: Всем спасибо! Теперь тему можно считать закрытой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru