Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: GetWindowDC и FromHandle  (Прочитано 13285 раз)
0 Пользователей и 1 Гость смотрят эту тему.
bunker
Гость
« : 04-02-2006 14:35 » 

Пытаюсь  на кнопочках BS_OWNERDRAW рисовать. Чтоб не создавать коллюзий myCButtont::DrawItem(LPDRAWITEMSTRUCT) начинает рисование не с  CWnd::GetWindowDC( ); а с CDC:: FromHandle(lpDrawItemStruct ->hDC) статик, есть еще FromHandlePermanent() многих типов, но CDC только FromHandle.   Прочитал ниже и примерчики красивые. Ходил вниз по MFC от FromHandle до 10-го уровня Не понял много чего создается поднимался вроде ничего не уничтожается. GetWindowDC тоже рисует но в примерах FromHandle. Есть еще мутная функция CDC:: DeleteTempMap( ). Мне кажется GetWindowDC логичней, но 2  примерчика с FromHandle Здесь была моя ладья....

http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=cpp;action=display;num=1047648450
http://forum.rsdn.ru/Forum/Message.aspx?mid=1061747 - 1061747
http://www.realcoding.net/article/view/1959
http://www.firststeps.ru/mfc/steps/help/r.php?90
https://forum.shelek.ru/index.php?topic=7477.0
https://forum.shelek.ru/index.php/topic,8081.0.html

Исходники
http://www.ladia.ru/cpp/tool/zfrt30.php
http://doc.mpv.ru/steps/mfc/sample/5.html
Записан
bunker
Гость
« Ответ #1 : 04-02-2006 14:44 » 

Вопрос собствнно двойной - с чего начинать и чем закнчивать
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 04-02-2006 17:05 » 

bunker, а ты попроще вопрос сформулировать не можешь? чесслово нету времени ходить по всем линкам, чтобы понять что у тебя не работает.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
bunker
Гость
« Ответ #3 : 04-02-2006 17:42 » 

Да вроде все работает.  Я на CDC* pDC=GetWindowDC( ); .... pDC->DeleteDC(); остановился.
Непонятно почему люди FromHandle используют.
Записан
acc15
Гость
« Ответ #4 : 04-02-2006 23:31 » 

СDC класс, который по деструктору отпускает Device Context...

т.е. если использовать так
CDC *pDC = GetDC(0); // или любое другое

то отвественность за то что DC будет освобожден после использования возлагается на тебя

а если так
CDC dc;
dc.FromHandle(GetDC(0));

всё освободится само по деструктору...
Записан
bunker
Гость
« Ответ #5 : 05-02-2006 18:13 » 

acc15, static CDC* PASCAL FromHandle( HDC hDC ); статический метод dc.FromHandle(...); или dc1.FromHandle(...); с самими dc и dc1 ничего не делают, они вообще по барабану. Грамотней писать CDC::FromHandle.

Этот CDC создан непонятно где внутри МФС и предоставлен на непонятных для меня условиях, и если я позову delete то рискую оказатся не прав если МФС его будет освобождать второй раз.

http://www.ladia.ru/cpp/tool/zfrt30.php и http://doc.mpv.ru/steps/mfc/sample/5.html их не освобождают, но в этом случае возможно  может быть возможна утечка памяти
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines