Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нету цвета, при использовании вир.окна нет цвета 
V
    Опции темы
pee100n
Дата 2.4.2007, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



заранее прошу прощения за глупый вопрос...
создаю виртуальное окно в InitInstance:
Код

...
 // создаем совместимый контекст для окна
   mem_DC = CreateCompatibleDC(GetDC(hWnd));
   // создаем "хранитель" изображения окна
   int maxX = GetSystemMetrics(SM_CXSCREEN),
       maxY = GetSystemMetrics(SM_CYSCREEN);
   mem_BMP = CreateCompatibleBitmap(mem_DC,maxX,maxY);   
   SelectObject(mem_DC,mem_BMP);
   // создаем кисть
   m_brush = CreatePatternBrush(mem_BMP);
   SelectObject(mem_DC,mem_BMP);
   PatBlt(mem_DC,0,0,maxX,maxY,PATCOPY);
   // создаем перо
   m_pen = CreatePen(0,0,RGB(255,0,0));
   SelectObject(mem_DC,m_pen);
...

где mem_DC,mem_BMP,m_brush и m_pen - глобальные
в обработчике WM_PAINT соотвественно:
Код

...
case WM_PAINT:{            
    hdc = BeginPaint(hWnd,&ps);
    GetClientRect(hWnd,&Rect);
    BitBlt(hdc,0,0,Rect.right,Rect.bottom,mem_DC,0,0,SRCCOPY);
    EndPaint(hWnd,&ps);
                  }
..

внимение вопрос!:
почему когда ставлю пиксел на mem_DC: SetPixelV(mem_DC,100,100,255); он не красный как ожидается, а черный?
з.ы.: пиксел ставлю по нажатию кнопки на диалоге
PM MAIL   Вверх
Earnest
Дата 3.4.2007, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(pee100n @  2.4.2007,  22:11 Найти цитируемый пост)

m_brush = CreatePatternBrush(mem_BMP);
SelectObject(mem_DC,mem_BMP);
PatBlt(mem_DC,0,0,maxX,maxY,PATCOPY);

Что за странный код? 
Создаем пустой битмап (кстати, никто не гарантировал, что тебе его всегда чистить будут).
Делаем из него кисть. Ею же красим бимап, из которого только что сделали кисть...
В чем смысл?
Ты хочешь черным залить контекст? 
И зачем выбирать перо, если ты SetPixel используешь?

А насчет вопроса - после изменения подложки Invalidate вызываешь? 



--------------------
...
PM   Вверх
pee100n
Дата 3.4.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



черным контекст я не хочу заливать потому и делаю вышеописсаные действия:
Код

m_brush = CreatePatternBrush(mem_BMP);
SelectObject(mem_DC,mem_BMP);
PatBlt(mem_DC,0,0,maxX,maxY,PATCOPY);

а перо я брал чтобы проверить еще и LineTo с цветом, но его так и нету.
Цитата

А насчет вопроса - после изменения подложки Invalidate вызываешь? 

да, вызываю (
PM MAIL   Вверх
Earnest
Дата 3.4.2007, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(pee100n @  3.4.2007,  18:57 Найти цитируемый пост)
черным контекст я не хочу заливать 

А что хочешь? Говорю же, бессмысленный код: ты закрашиваешь подложку ею же самой...

Только что заметила: ты создаешь CompatibleBitmap по мемори-контексту, а у него в этот момент выбран монохромный битмап. Так что, скорее всего, получаешь тоже монохромный. Передавай в CreateCompatibleBitmap контекст окна. Кроме того, то, что получаешь GetDC, нужно запомнить - потом полагается сделать ReleaseDC. 


--------------------
...
PM   Вверх
pee100n
Дата 3.4.2007, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



да не, все верно. это я все делаю, чтобы сохранять изображение на окне, то есть когда его закроют другим окном, а потом снова откроют  - я восстанавливаю изображение нарисованое на окне.
а насчет монохромного битмапа - спасибо!
передал туда ДЦ окна и все зарабоатло )

PM MAIL   Вверх
Earnest
Дата 3.4.2007, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



pee100n, рада, что получилось.

Опять посмотрела внимательнее:
1) ты битмап в контекст дважды выбираешь... (а мне казалось, что ты выбираешь кисть, ну да ладно)
2) по сути ты заполняешь подложку кистью, установленной по умолчанию (видимо, WHITE_BRUSH). Лучше все-таки явно ее выбрать, чтобы намерения декларировать. Или просто вместо PaTCOPY писать WHITENESS.
3) все равно не понимаю, какое отношение твой код насчет CreatePatternBrush имеет к указанной задаче.
ты создаешь кисть по пустому битмапу (черт его знает, что там внутри). С изменением битмапа кисть вовсе не изменяется...


--------------------
...
PM   Вверх
pee100n
Дата 3.4.2007, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 28.3.2007

Репутация: нет
Всего: нет



 smile  =) а ведь и вправду. кисть там вообще не нужна, достаточно только вот этого:
Код

   // создаем совместимый контекст для окна
   mem_DC = CreateCompatibleDC(GetDC(hWnd));
   // создаем "хранитель" изображения окна
   int maxX = GetSystemMetrics(SM_CXSCREEN),
       maxY = GetSystemMetrics(SM_CYSCREEN);
   mem_BMP = CreateCompatibleBitmap(GetDC(hWnd),maxX,maxY);   
   SelectObject(mem_DC,mem_BMP);
   PatBlt(mem_DC,0,0,maxX,maxY,PATCOPY);

Цитата

Или просто вместо PaTCOPY писать WHITENESS

Цитата

 все равно не понимаю, какое отношение твой код насчет CreatePatternBrush имеет к указанной задаче.
ты создаешь кисть по пустому битмапу (черт его знает, что там внутри). С изменением битмапа кисть вовсе не изменяется...
 - да это я просто весь код , относящийся к делу выложил, а оказалось, что в коде много лишнего smile 
короче говоря, проблема заключалась в CreateCompatibleBitmap в который передавался совместимый хдц, а не оконный,и эта ф-ция и создавала монохромный битмап, а не цветной.

Это сообщение отредактировал(а) pee100n - 3.4.2007, 22:41
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.