Графический стиль кнопок, чекбоксов и пр. - что это?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Графический стиль кнопок, чекбоксов и пр. - что это?

Сообщение lister » 31.08.2006 (Чт) 16:18

Понятно, что комбинация контант стиля... Но каких?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 31.08.2006 (Чт) 16:28

spyxx подсказывает, что BS_OWNERDRAW
Изображение

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 31.08.2006 (Чт) 16:45

Хммм... Но вот что интересно
GetWindowLong(Option1.hWnd, GWL_STYLE) возвращает для стандартного стиля радиокнопки 1409359876 и 1409351691 для графического. Разница 8185.

Провожу эксперимент над р/кн в стандартном стиле:

Код: Выделить всё
   lngStyle = GetWindowLong(Option1.hWnd, GWL_STYLE)

   lngStyle = lngStyle Or 8185&

   SetWindowLong Option1.hWnd, GWL_STYLE, lngStyle


Получается ерунда :)

А вот это:

Код: Выделить всё
   lngStyle = GetWindowLong(Option1.hWnd, GWL_STYLE)

   lngStyle = lngStyle Or 8181&

   SetWindowLong Option1.hWnd, GWL_STYLE, lngStyle


дает радиокнопку в графическом стиле.

А добавление BS_OWNERDRAW к радиокнопке в стандартном стиле:

Код: Выделить всё
   lngStyle = GetWindowLong(Option1.hWnd, GWL_STYLE)

   lngStyle = lngStyle Or BS_OWNERDRAW 

   SetWindowLong Option1.hWnd, GWL_STYLE, lngStyle


опять к ерунде приводит.

Выходит, там не только BS_OWNERDRAW используется...

Для чего мне все это нужно: в рантайме изменять стиль кнопок...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 31.08.2006 (Чт) 18:22

Неужели непонятно, что мало просто добавить BS_OWNERDRAW? нужно ещё и отрисовывать кнопку в WM_DRAWITEM.



lister писал(а):Хммм... Но вот что интересно
GetWindowLong(Option1.hWnd, GWL_STYLE) возвращает для стандартного стиля радиокнопки 1409359876 и 1409351691 для графического. Разница 8185.

Провожу эксперимент над р/кн в стандартном стиле:

Код: Выделить всё
   lngStyle = GetWindowLong(Option1.hWnd, GWL_STYLE)

   lngStyle = lngStyle Or 8185&

   SetWindowLong Option1.hWnd, GWL_STYLE, lngStyle


Это, наверное, в цитаты надо... Неужели непонятно, что "разность" -- это не набор битов, которые нужно установить? Записывать стили окна в десятичном виде ты тоже, наверное, первый в мире догадался.
Изображение

lister
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 389
Зарегистрирован: 15.01.2005 (Сб) 7:34
Откуда: Страна оления

Сообщение lister » 31.08.2006 (Чт) 19:02

Неужели непонятно, что мало просто добавить BS_OWNERDRAW? нужно ещё и отрисовывать кнопку в WM_DRAWITEM.


Естественно понятно, что здесь ручная перерисовка. Как раз она мне и нужна.

Черт, неделю бьюсь уже... Всего лишь навсего нужно добавить фокусную рамку на чекбокс и радиокнопки...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 31.08.2006 (Чт) 19:08

Поскольку в ответе tyomitch'а не прозвучало: надо не вычитать, а делать XOR.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Mail.ru [бот] и гости: 142

    TopList