![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Вот этот вызов
в обработчике WM_INITDIALOG, не меняет цвет фона клиентской области. Почему? Функция возвращает 0 и, судя по всему, это не ошибка, а предыдущее значение (GetLastError() и до, и после вызова SetClassLong(), возвращает одну и ту же ошибку, следовательно, функция отрабатывает, но эффекта нет). Это сообщение отредактировал(а) S.A.G. - 22.7.2009, 17:46 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
SetClassLong модифицирует информацию класса, а не окна
поэтому окно надо дополнительно уведомить об этих изменениях:
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
GremlinProg, я тоже пристально читал этот текст из MSDN, на что могу ответить.
1. Почему тогда модификация с целью отображения иконки в сис. меню "прокатывает"? 2. Если я затаскиваю окно за границы экрана, сворачиваю, etc., и потом все возвращаю, то почему окно не перерисовывается с использованием новой кисти? Хотел тебе еще +1 сделать, но какой-то прАтивный скрипт не разрешил. ... InvalidateRect() НЕ помог. Опасения были. Это сообщение отредактировал(а) S.A.G. - 22.7.2009, 18:46 -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| GremlinProg |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
думаю, в целях оптимизации: чтобы заменить кисть нужно перекрасить автоматом целое окно, которое может даже не использовать эту кисть, а вот заменить иконку - перекрасить очень маленький участок неклиентской области окна хотя, мое мнение на эту автоматическую перекраску отрицательное: даже иконку можно не использовать, просто перехватить NC_PAINT и "не использовать" ) мне бы было не очень комфортно в такой ситуации, если бы кто-то пытался подумать за меня там, где я уже все продумал
может потому что не стоят стили класса: CS_HREDRAW | CS_VREDRAW или наоборот - стоит стиль CS_SAVEBITS или у тебя эта кисть просто не используется причин может быть много, чтобы найти решающую, надо "смотреть в код"
модификация репутации любого участника разрешена только 1 раз в сутки, т.е. раз в 24 часа с момента последней модификации не переживай, у меня хватает "колышков" ) Добавлено через 5 минут и 58 секунд самый простой вариан проверить: после смены кисти созать еще один экземпляр этого класса если ситуация не изменилась, значит одно из двух: либо кисть действительно не используется, либо кисть не была установлена (неверный дескриптор, к примеру) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||||
|
|||||||
| S.A.G. |
|
||||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Так кода-то нет почти: )
Последняя функция из MSDN.
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ага, вот оно что, )
ты пытаешься сменить кисть у диалога так ведь это глобальный класс, он эту кисть вообще не использует, GetClassInfo для него вернется с нулевой кистью изначально вообще, большинство стандартных классов не используют кисть класса они используют прямые системные цвета и кисти из GetSysColor, GetSysColorBrush с параметрами COLOR_WINDOW, COLOR_BTNFACE и т.п. в диалоге менять фон можно либо вручную, при прорисовке, либо используя любые разновидности уведомлений WM_CTLCOLORxxx и их синонимы -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
Так ты ж раньше знал, что дело было с диалогом. Невнимательный, оказывается, не только я. Ога М-да, интересно, через сколько дней я бы нашел у себя такую очевидную ошибку..? А что же такое "глобальный класс"? Плиз, ссылку на MSDN с классификацией классов. Нафег она тогда там? Вернула бы SetClassLong() ошибку, и да расшифровал бы я ее с помощью GetLastError(), и поведала бы она мне, что я пихаю свой бруш не туда, так нет - в Windows программисту "не мешают", как и в C++.. Купить гуашь, кисточку и красить по экрану? Какой месэдж обрабатывать? -------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| GremlinProg |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
не кипятись, я же не телепат, чтобы связать шрифт и кисть в одну логическую цепочку
http://msdn.microsoft.com/en-us/library/ms...85).aspx#system она там для заказных, пользовательских классов а ошибку при всем желании вернуть нельзя, т.к. эта установки кисти не фильтруется ни какими обработчиками кисть в классе окна - это просто место, в которое можно посмотреть, а можно и не смотреть, жесткой привязки ее назначения нет, ты можешь эту кисть использовать не для всего окна, а к примеру только для вывода текста, или какой-то небольшой области окна, все решает тот, кто программирует процедуру окна, а в данном случае - это не ты, хотя свой вклад можешь вносить по-прежнему, через диалоговую процедуру, но это уже вторичный вклад
обычно WM_PAINT -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
||||
|
|||||
| S.A.G. |
|
|||
![]() не эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1339 Регистрация: 20.7.2006 Где: in ad equate Репутация: нет Всего: 19 |
-------------------- Вот она задачка: спасти себя от себя самого © Cube Sometimes good people do evil things © A Simple Plan |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
все это, и много чего еще, можно найти в примерах, особенно, если искать: http://forum.vingrad.ru/act-Search/CODE/sh...kgnd/index.html 9 страниц - не 100, запрос можно уточнять дополняй запрос ключевыми словами, будет еще меньше -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |