Как получить цвет и шрифт левого окна используя АПИ?

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

Как получить цвет и шрифт левого окна используя АПИ?

Сообщение xenomorph » 08.05.2004 (Сб) 23:18

Привет Всем!

Вопрос №1:

Как получить правильно по АПИ цвет бэкграунда окна по его хэндлу контексту?
Стандартное АПИ GetBKColor выдаёт странное значение (большое) в случае если это окно системное ShellTrayWind например. (окно - левое!, x-colour не предлагать :)

Вопрос №2:
Как получить и установить (через АПИ!) шрифт в определённом окне?

Заранее спасибо!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

Re: Как получить цвет и шрифт левого окна используя АПИ?

Сообщение TEH3OP » 09.05.2004 (Вс) 3:19

xenomorph писал(а):Привет Всем!

Вопрос №1:

Как получить правильно по АПИ цвет бэкграунда окна по его хэндлу контексту?
Стандартное АПИ GetBKColor выдаёт странное значение (большое) в случае если это окно системное ShellTrayWind например. (окно - левое!, x-colour не предлагать :)

Эээ... нууу... чё то не ясно чё есь, че не предлагать, чё куда... %-\

xenomorph писал(а):Вопрос №2:
Как получить и установить (через АПИ!) шрифт в определённом окне?

Ну... эт просто:
Надо послать сообщение WM_SETFONT окну, у которого надо шрифт установить.
wParam -- дескриптор шрифта, который ты хочешь чтоб у окна был.
lParam -- ежели не ноль, то окно сразу же перерисоваться должно (с новым шрифтом.), эт может быть нужно если окно видимое.

Терь чё для этого надо:
-- чтобы сообщение послать надо: API Функцию SendMessage, причём с такой декларацией:
Код: Выделить всё
Public Declare Function SendMessageByNum Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

;
hWnd окна, которому сообщение слать (шрифт поменять) желаешь;
значение константы WM_SETFONT (оно есть &H30).

-- чтобы дескриптор шрифта сделать, надо: API функцию CreateFont или CreateFontIndirect (я, лично вторую уважаю больше).

-- для CreateFontIndirect нуна бут структура LOGFONT и её нуна буит заполнить.

Как LOGFONT заполнить или чё нада для CreateFont?
-- это всё нада дооолго рассказывать... ты уж прости, я не смогу -- времени нет. ;-)
RTFMSDN...

xenomorph писал(а):Заранее спасибо!

Незачто... чем мог, помог. ;-)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.05.2004 (Вс) 6:18

Попробуй getclasslong(windowfromdc(hdc),gcl_hbrbackground)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Сообщение xenomorph » 09.05.2004 (Вс) 9:15

Надо получить через
GetBKColour
Узнать как юзать в паре с SetBKColour
+ Работать с шрифтом?
2GZerg: 10X!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 09.05.2004 (Вс) 20:03

GetBKColor( и SetBKColor) работает не с hWnd, а с hDC. Перейти от одного к другому можно, используя hDC=GetDC(hWnd).

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Сообщение xenomorph » 09.05.2004 (Вс) 20:31

Это я знаю, как получить цвет системного окна? Вот в чём трабл!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.05.2004 (Вт) 10:29

Не понял, тебе нужен цвет конкретного окна? Или системный цвет, которым раскрашиваются окна?
Если первое, то практически только GetBkColor, только применять его надо к hDC, а не к hWnd (впрочем, об этом уже говорилось).
Если второе, то есть GetSysColor. Можно использовать сразу OleTranslateColor, он может принимать COLOR_REF.
Lasciate ogni speranza, voi ch'entrate.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList