Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование в диалоговом окне вне метода OnPaint, Не отображает результат 
V
    Опции темы
Kirow
Дата 1.11.2011, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну думаю проблема не сложная, просто я не шарю...

в общем есть пустое обычно диалоговое окно, на котором хотелось бы отрисовывать что либо...ну например текст.
Код

CString s = "Швабра";
    CClientDC dc(this);
    dc.TextOut(20,20,s,strlen(s));

если пишу этот кусок в обработчике OnPaint - работает, если к примеру в обработчике нажатия кнопки - нет. Подскажите как сделать чтобы нормально рисовало вне метода OnPaint.

Когда-то делал что-то похожее, но не в диалоговом окне, а в классе наследуемом от CFrameWnd - там работало...

Это сообщение отредактировал(а) Kirow - 1.11.2011, 11:53
PM MAIL   Вверх
Earnest
Дата 1.11.2011, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Правильно делать рисование именно в методе OnPaint, а не где-либо еще.
Ибо иначе нарисованное долго не проживет (до первого Invalidate), что видимо у тебя и происходит.
Только использовать нужно не CClientDC, а CPaintDC.
Еще вариант, если не хочешь хранить, чтО нужно рисовать: завести битмэп и контекст в памяти, рисовать ну нем (вот тут хоть в обработчике кнопки, хоть когда хочешь), а в OnPaint просто копировать этот битмэп на экран.


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


Новичок



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

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



та что-то у меня и через виртуальное не получается...
глобально.
Код

    CDC memDC;
    CBitmap bmp;

внутри функции
Код

CPaintDC dc(this);
    int x = GetSystemMetrics(SM_CXSCREEN);
    int y = GetSystemMetrics(SM_CYSCREEN);
    BITMAP bm;
    bmp.GetBitmap(&bm);
    memDC.CreateCompatibleDC(&dc);
    bmp.CreateCompatibleBitmap(&dc,x,y);
    memDC.SelectObject(&bmp);
    memDC.Ellipse(20,20,30,30);


проблема тут со строкой bmp.GetBitmap(&bm); копипаста с книги, а не работает.
PM MAIL   Вверх
Kirow
Дата 1.11.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



стыд и позор мне...как обычно искал проблему не там где она была...не рисовало у меня потому что метод вызывал внутри InitDialog, судя по всему после него сразу инвалидейт шел...
PM MAIL   Вверх
Dem_max
Дата 2.11.2011, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



создай в диалоги child control класс "STATIC" со стилем  SS_OWNERDRAW, тогда при инициализации этого контрола тебе прилетит сообщение WM_OWNERDRAW с указателем на HDC этого контрола, вот на нем и нарисуешь.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Andrey44
Дата 2.11.2011, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

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



Код

void Dlg::OnPaint()
{
CPaintDC dc(this);
    CRect rc;
    GetClientRect(&rc);
    CBitmap bm, *oldBitmap;
    CDC memDC;
    
    memDC.CreateCompatibleDC(&dc);
    bm.CreateCompatibleBitmap(&dc,rc.Width(),rc.Height());
    oldBitmap = (CBitmap*)memDC.SelectObject(&bm);
    memDC.Ellipse(20,20,30,30);

    dc.BitBlt(0, 0, rc.Width(), rc.Height(), 0, 0, SRCCOPY);

    if(oldBitmap)
      memDC.SelectObject(oldBitmap);
    memDC.DeleteDC();
}



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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