| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Как сменить кисть диалогового окна? |
| Автор: Тутанхамец 15.1.2006, 17:07 | ||
| Проблема в следующем. Есть диалог, созданный функцией DialogBox. Хочу, чтобы он рисовался растровой кистью (то есть, которая получается из CreatePatternBrush). Пытаюсь это сделать так:
В этом меня беспокоит: 1) Всё это не работает! 2) Если я изменю класс, как это отразится на диалоговых окнах других программ? Они тоже будут крашены под хохлому? 3) Нужно, чтоб изменение класса сразу же сказывалось на окне. Экспериментировал с обычным окном - изменения проявляются только после того, как сверну и разверну окно. Даже с UpdateWindow(). Хотя если изменение происходит обработчике WM_INITDIALOG, то возможно оно будет видно сразу при появлении... Народ, у кого какие мысли?) |
| Автор: Fixin 15.1.2006, 17:18 |
| 1) Старый браш нужно самому бать: GetClasslong(hwnd, GCW_HBRBACKGROUND); 2) Потом InvalidateRect(hwnd, NULL, TRUE); |
| Автор: Тутанхамец 15.1.2006, 17:41 | ||
| До вообще-то старая кисть не очень-то и нужна... Важнее засандалить в класс окна новую. Попробовал с InvalidateRect. Да, если окно обычное (не диалоговое), то всё рулит. Изменения возникают сразу же. Спасибо. Однако, диалоговое как было, так и осталось. Вот кусок процедуры диалогового окна:
Наличие или отсутствие UpdateWindow влияния не оказывает. Такое чувство, что в этом виде изменение кисти вообще не предсмотрено. Это, кажется, можно обойти, если создавать диалог через DLGTEMPLATEEX. Там задается класс окна. Но больно много возни потом с созданием кнопок и прочего... Похоже, придется окну быть некрашеным. Или можно элемент управления Picture на весь диалог... |
| Автор: Тутанхамец 16.1.2006, 08:58 | ||||||
| Yeeeaaah!! Спасибо, друг! Закраска диалога через WM_CTLCOLORDLG работает в таком вот виде:
А по поводу возвращения браша - я с API работаю пару недель всего. Палюсь, вероятно, на туфте. Вот не знаю, например, почему браши и битмапы надо возвращать на их место, а не уничтожать по отдельности. Умные люди зачем-то возвращают:
Но почему нельзя сделать вот так:
Ну, или не с битмапом, а с брашью сделать так же. Что тогда? В памяти что-то останется? На глаз, вроде, работают оба варианта... |
| Автор: SergeCpp 16.1.2006, 09:17 | ||
Вот так я делал, когда нужно было изменить в классе что-нибудь.
|
| Автор: Тутанхамец 16.1.2006, 10:24 |
| Спасибо, учту. |
| Автор: SergeCpp 16.1.2006, 12:50 |
| Да, прога для MFC. Если нужно, могу выслать всю — пиши ПМ или на почту. |
| Автор: Тутанхамец 16.1.2006, 18:25 |
| Да нет, спасибо. Суть я понял, но пока с азами классов и MFC не разберусь, мне с нее пользы не много будет. |
| Автор: SergeCpp 17.1.2006, 08:13 |
| А ты её в отладчике погоняешь, и понимание быстрее придёт... Удачи! |