![]() |
|
|
![]()
|
|
| deniska |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: 1 Всего: 0 |
Делаю свой Статик. В OnPaint чтоб знать как центровать текст запрашиваю GetStyle(
Так вот под отладчиком заходит во все три условия. Как такое может быть? Где ошибся? |
|||
|
||||
| SenkraD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 3.2.2006 Где: Украина::Киев Репутация: 4 Всего: 23 |
deniska, ну вообще проверка флагов делается так, на сколько я знаю:
Собственно, я всегда так проверял и входило у меня только туда куда нужно было |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 16 Всего: 92 |
именно так, объясняется просто: за каждое отдельное свойство отвечает определенный бит в значении, возвращаемом функцией GetStyle() например стиль SS_RIGHT задефайнен так: #define SS_RIGHT 0x00000002L те говорит о том что за этот стиль отвечает второй бит справа ( так как 2(dec) == 10(bin) ), те если в этом бите нарисована единичка, то стиль присутствует, если нолик - отсутствует. Значит нам надо проверить, установлен этот бит(1) или сброшен (0). операция & позволяет проверить, установлен этот бит или нет, так как "логическое И" при взаимодействии любого значения с нулем дает нуль: 0 & x = 0 (благодаря этому игнорируются значения других битов). Единицу же выдает только если оба операнда - единицы: 1 & 1 = 1, таким образом проверяется установка только требуемого бита. Аналогично производится установка битов операцией | "логическое ИЛИ", пользуемся тем, что 1 | x = 1 и 0 | x = x |
|||
|
||||
| Rapalex |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Итак в winuser.h написано:
иными словами не парься и напиши так:
Должно работать. Это сообщение отредактировал(а) Rapalex - 2.6.2007, 09:58 -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
||||
|
|||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Очевидно, что это условие всегда будет TRUE. Поэтому случай с LEFT нужно оставлять напоследок и заходить туда через else. -------------------- ... |
|||
|
||||
| deniska |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: 1 Всего: 0 |
Спасибо всем кто откликнулся, только все предложенное не помогло. Можно еще добавить что проверка на SS_GRAYRECT проходит нормально (это я проверяю чтоб знать какой статик рисовать: обычный или GroupBox). В общем вопрос остается открытым
|
|||
|
||||
| Greeen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 710 Регистрация: 13.8.2006 Где: Петербург Репутация: 10 Всего: 18 |
-------------------- Подпись больше не нужна |
|||
|
||||
| deniska |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: 1 Всего: 0 |
Greeen не понял чем отличается твой код приведенного мной выше, но на всякий случай попробовал и его, но рез тот же заходит в первое же условие. Может я чего-то не понимаю млин, но на сколько я понял если я в design time у Group Boxa меняю св-во Horizontal Alignment то оно должно возвращаться по GetStyle(). Он все время возвращает число 1342194439. может это как-то поможет... уж прям не знаю
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Проверь стили Спаем, если сомневаешься. По крайней мере черную кошку в темной комнате ловить не будешь.
И вообще, разговор был о статиках, причем здесь груп-боксы? Это совершенно другой контрол, и стили у него другие... Возможно, ты удивишься, но это кнопка... -------------------- ... |
|||
|
||||
| deniska |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: 1 Всего: 0 |
так, в общем я в ауте. пошел читать книжки. Earnest как всегда ткнула рожей куда надо
Ну не могу я понять чисто логически как может GroupBox от кнопки получаться.... Это сообщение отредактировал(а) deniska - 4.6.2007, 13:53 |
|||
|
||||
| SeregaLBN |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 3.10.2003 Где: Киев Репутация: нет Всего: нет |
Все эти интересуемы стили занимают первые два бита...
Поэтому и делается след проверка:
GroupBox - это статик. И стили у него - SS_... Кнопки - это кнопки и радиобуттоны, checkbutton'ы. Ну и стили у них свои - BS_...
|
||||||
|
|||||||
| deniska |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 398 Регистрация: 1.7.2005 Где: Троицк Репутация: 1 Всего: 0 |
SeregaLBN, теперь, начитаный MSDNом, смею поспорить по поводу
GroupBox - это кнопка со стилем BS_GROUPBOX. Ну а по теме: хоть и был изначально вопрос про CStatic а закончилось все кнопками, скажу все таки все о чем накипело. Оказывается: 1. кнопке со стилем BS_GROUPBOX и BS_OWNERDRAW никогда не придет WM_DRAWITEM, хотя мы вроде CButton. Чтобы рисовать контрол по-своему нужно ловить WM_PAINT, ну и в обработчике пара BeginPaint-EndPaint тоже обязательна. 2. ну и собственно по стилям оказывается вот как дело обстоит:
Вот собственно и все. Если есть какие-то замечания - велкам! |
||||
|
|||||
| Bukmop |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 1.6.2006 Где: Москва Репутация: 2 Всего: 3 |
||||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Тут есть тонкость (описанная в MSDN мееелкими буквами, сама не так давно напоролась). Оказывается, стиль BS_OWNERDRAW является эксклюзивным, и ни с каким другим не совмещается. Т.е., или BS_OWNERDRAW, или все остальное. Столкнулась с этим в тот момент когда потребовались чек-боксы, выглядящие как кнопки. Как только пытаешься сделать их OwnerDraw - вся чек-боксовость куда-то исчезает... Вот такие дела. -------------------- ... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |