| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > CDialog |
| Автор: BBC 17.3.2005, 08:24 |
| Подскажите, если не лень! В CView перерисовка окна после, например, минимизации осуществляется в OnDraw() а в CDialog где??? |
| Автор: Nastya 18.3.2005, 09:22 |
| OnPaint - перерисовка любого окна. Прост В MFC когда приходить собщение WM_PAINT делается кое-что и вызывается OnDraw. Если нужно обработать изменение размеров окна обрабатывай сообщение WM_SIZE. Я правильно поняла вопрос ??? |
| Автор: Guest 18.3.2005, 17:19 |
| Спасибо за подсказку, проблема вот вчем: устанавливаю иконку на контрол HICON HicRing=AfxGetApp()->LoadIcon("Ring"); CWnd*Wnd=AfxGetMainWnd()->GetDlgItem(IDC_ANIMATE); CDC *pDC=Wnd->GetDC(); pDC->DrawIcon(0, 0,HicRing ); Wnd->ReleaseDC(pDC); pDC->DeleteDC(); окно свернул, иконка исчезла Устанавливать ее в OnPaint() ? И почему не работает SetIcon(HicRing, TRUE); ? |
| Автор: Nastya 18.3.2005, 18:59 |
| А я не вижу сдесь SetIcon? |
| Автор: Coocky 18.3.2005, 21:04 | ||||||
В первый раз слышу Вообще ты все делаешь через CDC.А с диалогом это только OnPaint прокатывает.Так как сказала Настя,
Даже если ты его свернешь,закроешь другим -всегда будет перерисовка. Ты или рисуй все в OnPaint(),или пользуйся методами класса,которые присоединяют иконку или изображение |
| Автор: Guest 18.3.2005, 22:18 |
| Я имел в виду вместо /*CDC *pDC=Wnd->GetDC(); pDC->DrawIcon(0, 0,HicRing ); Wnd->ReleaseDC(pDC); pDC->DeleteDC();*/ HICON HicRing=AfxGetApp()->LoadIcon("Ring"); CWnd*Wnd=AfxGetMainWnd()->GetDlgItem(IDC_ANIMATE); Wnd->SetIcon(HicRing, TRUE); - не работает!!! Я переодически меняю иконки в IDC_ANIMATE. При сворачивании окна они исчезают. В OnPaint() их установку дублировать? Я пробывал - работает, но по моему с точки зрения MFC это не совсем правильно. Как это предлагает делать МелкоСофт? |
| Автор: Coocky 18.3.2005, 22:28 | ||
Насколько я понимаю это ID элемента,относящегося к классу СStatic? А ну ка попробуй сделать это с кнопочкой CButton*Wnd=(CButton*)GetDlgItem(MY_BUTTON); Wnd->SetIcon(AfxGetApp()->LoadIcon("Ring"), TRUE); - Только кнопку не забудь создать |
| Автор: Guest 19.3.2005, 15:08 |
| Вообще то у меня IDC_ANIMATE - не StaticText а Picture, хотя со StaticText не работает тоже. С кнопочкой проблем ни когда не было, только ей стиль Icon нельзя забывать ставить CButton*Wnd=(CButton*)GetDlgItem(MY_BUTTON); Wnd->SetIcon(AfxGetApp()->LoadIcon("Ring"), TRUE);--работает, а CWnd*Wnd=(CWnd*)GetDlgItem(IDC_ANIMATE); Wnd->SetIcon(AfxGetApp()->LoadIcon("Ring"), TRUE);-- не работает!!! |
| Автор: Coocky 20.3.2005, 22:39 |
| Дай мне время,ОК?Дам готовое... |
| Автор: Guest 29.3.2005, 16:41 |
| Ну так почему же не работает CWnd*Wnd=(CWnd*)GetDlgItem(IDC_ANIMATE); Wnd->SetIcon(AfxGetApp()->LoadIcon("Ring"), TRUE);???? |
| Автор: knave 29.3.2005, 17:16 |
| Вью перерисовывать лучше всего в WM_ERASEBKGND - или чтото в этом духе. Тогда нет никаких посторонних эффектов. |
| Автор: Lion 12.4.2005, 09:20 | ||
А так:
У меня иконки при минимизации не исчезают. |
| Автор: Step 13.4.2005, 12:55 | ||
главное правильно задать вопрос.... а впоросов два 1. работает или нет? 2. елси работает то почему не вижу... чето на философию потянуло... короче, СWND устанавливает иконку и отображает ее на титле в левом углу если подходит формат т.е. нужно поставить false Wnd->SetIcon(AfxGetApp()->LoadIcon("Ring"), false); и если у этого окна есть титл то иконка измениться..... сетикон работает всегда для всех производных от внд, вопрос в тому куда производный внд ее выводит.... |
| Автор: BBC 17.4.2005, 19:50 |
| Сформулирую вопрос убого. Как поставить иконку в необходимом мне месте диалогового окна. Только при ответах читайте, что я уже делал выше, что бы не повторяться. Step : Wnd->SetIcon(AfxGetApp()->LoadIcon("Ring"), false); //естественно пробовал, иконка не отображается Lion : HICON hIcon=::AfxGetApp()->LoadIcon(IDI_ICON2); CStatic *pStat=(CStatic *)GetDlgItem(ID_MY_ICON); pStat->SetIcon(hIcon); // Это я тоже пробовал еще до вопроса в форуме. А у вас работает? А вот код: /*HICON HicRing=AfxGetApp()->LoadIcon("Ring"); CWnd*Wnd=AfxGetMainWnd()->GetDlgItem(IDC_ANIMATE); CDC *pDC=Wnd->GetDC(); pDC->DrawIcon(0, 0,HicRing ); Wnd->ReleaseDC(pDC); pDC->DeleteDC();*/ иконку отображает, но при сворачивании окна она исчезает. Как правильно ее установить с точки зрения MFC ? DrawIcon() в OnDraw() ? Кстати, SetIcon() возвращает не 0, а иконки не видно. |
| Автор: Coocky 17.4.2005, 21:30 | ||
При любой перерисовке окна вызывается OnPaint,в WM_PAINT.Так что там рисуй |
| Автор: Lion 18.4.2005, 06:16 | ||
Да у меня работает и иконка не исчезает, при минимизации или перекрытия окна другим. Ставить можно в ЛЮБОМ месте (и с точки зрения MFC это правильно). Могу выслать работающий пример. Я честно говоря вообще не понимаю, почему если у вас есть элемент CStatic в котором вы хотите менять иконки вам настойчиво советую приводить к указателю на CWnd? В общем это конечно не так важно, но для вашей задачи CStatic удобнее. |
| Автор: BBC 20.4.2005, 22:12 |
| Уважаемые господа - программисты! Я уже устал писать один и тот же код- ни: HICON hIcon=::AfxGetApp()->LoadIcon("Ring"); CStatic *pStat=(CStatic *)GetDlgItem(IDC_ANIMATE); pStat->SetIcon(hIcon); ни: CWnd*Wnd=(CWnd*)GetDlgItem(IDC_ANIMATE); Wnd->SetIcon(AfxGetApp()->LoadIcon("Ring"), TRUE); ни: CWnd*Wnd=(CWnd*)GetDlgItem(IDC_ANIMATE); Wnd->SetIcon(AfxGetApp()->LoadIcon("Ring"), FALSE); иконку на IDC_ANIMATE не У С Т А Н А В Л И В А Ю Т! А : CWnd*Wnd=(CWnd*)GetDlgItem(IDC_ANIMATE); HICON hIcon=::AfxGetApp()->LoadIcon("Ring"); CDC *pDC=Wnd->GetDC(); pDC->DrawIcon(0, 0,hIcon); Wnd->ReleaseDC(pDC); pDC->DeleteDC(); УСТАНАВЛИВАЕТ! Почему? |
| Автор: Lion 21.4.2005, 07:18 | ||||
Уважаемый BBC так вам выслать код или нет?
А "устанавливает" потому, что вы просто единократно получив контекст окна отрисовываете в нем иконку. И вполне логично, что при повторном перерисовывании окна (случай свертывания или частичного перекрытия окна) стандартная функция отрисовки рисует только то, что она знает о контролах на диалоге. На месте нарисованной вами иконки рисует бэкграунд диалога, т.к. CStatic в вашем случае пустой. |
| Автор: BBC 22.4.2005, 19:09 |
| Если можно:[email protected] DrawIcon() понятно. А SetIcon() почему не ставит? |
| Автор: Lion 25.4.2005, 09:48 | ||
Ну это мне объяснить сложно т.к. у меня ставит. Код после обеда вышлю. |
| Автор: BBC 27.4.2005, 23:05 |
| Уважаемый Lion ! Действительно с CStatic работает! И даже код которыя я пробовал и писал выше: HICON hIcon=::AfxGetApp()->LoadIcon("Ring"); CStatic *pStat=(CStatic *)GetDlgItem(IDC_ANIMATE); pStat->SetIcon(hIcon); - сейчас прекрасно справляется с этой чертовой иконкой. Глюки какие то........... Косят, сволочи, ряды наши. Спасибо за помощь! |
| Автор: Lion 28.4.2005, 05:16 | ||
Незагде. |