Аватар для Adler
80 / 85 / 19
Регистрация: 07.05.2009
Сообщений: 336

BackBuffer

04.09.2009, 01:52. Показов 1616. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Опции темы

Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru