| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Системное программирование и WinAPI > Не работает SetClassLong() |
| Автор: S.A.G. 22.7.2009, 17:42 | ||
Вот этот вызов
в обработчике WM_INITDIALOG, не меняет цвет фона клиентской области. Почему? Функция возвращает 0 и, судя по всему, это не ошибка, а предыдущее значение (GetLastError() и до, и после вызова SetClassLong(), возвращает одну и ту же ошибку, следовательно, функция отрабатывает, но эффекта нет). |
| Автор: GremlinProg 22.7.2009, 18:03 | ||||
| SetClassLong модифицирует информацию класса, а не окна поэтому окно надо дополнительно уведомить об этих изменениях:
|
| Автор: S.A.G. 22.7.2009, 18:27 |
| GremlinProg, я тоже пристально читал этот текст из MSDN, на что могу ответить. 1. Почему тогда модификация с целью отображения иконки в сис. меню "прокатывает"? 2. Если я затаскиваю окно за границы экрана, сворачиваю, etc., и потом все возвращаю, то почему окно не перерисовывается с использованием новой кисти? Хотел тебе еще +1 сделать, но какой-то прАтивный скрипт не разрешил. ... InvalidateRect() НЕ помог. Опасения были. |
| Автор: S.A.G. 22.7.2009, 19:09 | ||||
Так кода-то нет почти: )
Последняя функция из MSDN.
|
| Автор: GremlinProg 22.7.2009, 19:23 |
| ага, вот оно что, ) ты пытаешься сменить кисть у диалога так ведь это глобальный класс, он эту кисть вообще не использует, GetClassInfo для него вернется с нулевой кистью изначально вообще, большинство стандартных классов не используют кисть класса они используют прямые системные цвета и кисти из GetSysColor, GetSysColorBrush с параметрами COLOR_WINDOW, COLOR_BTNFACE и т.п. в диалоге менять фон можно либо вручную, при прорисовке, либо используя любые разновидности уведомлений WM_CTLCOLORxxx и их синонимы |
| Автор: S.A.G. 22.7.2009, 19:43 |
Так ты ж раньше знал, что дело было с диалогом. Невнимательный, оказывается, не только я. Ога М-да, интересно, через сколько дней я бы нашел у себя такую очевидную ошибку..? А что же такое "глобальный класс"? Плиз, ссылку на MSDN с классификацией классов. Нафег она тогда там? Вернула бы SetClassLong() ошибку, и да расшифровал бы я ее с помощью GetLastError(), и поведала бы она мне, что я пихаю свой бруш не туда, так нет - в Windows программисту "не мешают", как и в C++.. Купить гуашь, кисточку и красить по экрану? Какой месэдж обрабатывать? |
| Автор: GremlinProg 22.7.2009, 20:02 | ||||||
не кипятись, я же не телепат, чтобы связать шрифт и кисть в одну логическую цепочку
http://msdn.microsoft.com/en-us/library/ms633574(VS.85).aspx#system
она там для заказных, пользовательских классов а ошибку при всем желании вернуть нельзя, т.к. эта установки кисти не фильтруется ни какими обработчиками кисть в классе окна - это просто место, в которое можно посмотреть, а можно и не смотреть, жесткой привязки ее назначения нет, ты можешь эту кисть использовать не для всего окна, а к примеру только для вывода текста, или какой-то небольшой области окна, все решает тот, кто программирует процедуру окна, а в данном случае - это не ты, хотя свой вклад можешь вносить по-прежнему, через диалоговую процедуру, но это уже вторичный вклад
обычно WM_PAINT |
| Автор: S.A.G. 22.7.2009, 20:12 |
Что вызвать в обработчике? |
| Автор: GremlinProg 22.7.2009, 20:32 | ||
все это, и много чего еще, можно найти в примерах, особенно, если искать: http://forum.vingrad.ru/act-Search/CODE/show/searchid-a8595198fc8dd2ad8d95fcb7f7d788cd/search_in-posts/result_type/topics/flag/search/highlite/wm_paint+wm_erasebkgnd/index.html 9 страниц - не 100, запрос можно уточнять дополняй запрос ключевыми словами, будет еще меньше |