Собственно вопрос - в каком оконном сообщение содержится цвет окна и альфаблендинг?Получает ли такое сообщение только главное окно,или его тоже получают контроллы потомки главного окна?
Как вариант, узнать цвет окна ) Код (Text): Function GetWindowColor(hWindow : HWND):DWORD; var dc : HDC; begin dc := GetDC(hWindow); result := GetPixel(dc, 0, 0); ReleaseDC(hWindow, dc); end; Инфа о прозрачности... Код (Text): BOOL GetLayeredWindowAttributes( HWND hwnd, COLORREF *pcrKey, BYTE *pbAlpha, DWORD *pdwFlags );
Проблема в том что мне надо неузнавать,а перехватить и подменить эту инфу,и причем не для главного окна а для его потомка.Да проблема даже не этом.А втом что мне непонятен механизм наследования всей этой чепухи потомками И соотвественно я незнаю возможно ли вообще такое
Задача проста.Не дать контролу унаследовать от родительского окна альфабленд(прозрачность).Мне в голову больше ничего не приходит как подменять для него альфу с допустим 125 на 255.А как такое реализовать(если это возможно) я хз.
совсем не вариант. достаточно нарисовать что-то в 0, 0 и функция "никогда" не узнает настоящего цвета фона. проще GetBkColor (если WM_ERASEBKGND не перехвачен, а если перехвачен, то чего узнавать-то) _nic а перехватить его оконную функцию и подменить цвет фона (GetWindowLong, GWL_WNDPROC)
Непонимаю что сделать? Переназначить ф-цию обрабатывающую оконные сообщения?Тогда что в ней менять?Мне неизвестен механизм передачи параметров цвета и альфы в дочерний контрол(окно)
_nic Это называется subclassing (не знаю как по-русски). Принцип прост и кстати очень напоминает ООП. Для любого HWND (не важно: родитель или дочернее окно) можно заменить оконную процедуру. При этом "старая" или оригинальная процедура возвращается как результат функции SetWindowLong. В этом ключ - эту процедуру необходимо вызывать в новой процедуре: Код (Text): WNDPROC pfnOldWndProc; LRESULT CALLBACK YourNewProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { if (msg == WM_ERASEBKGND) { // erase background as you want return TRUE; } return CallWndProc (pfnOldWndProc, hWnd, msg, wp, lp); } void CreatingHWND () { HWND hWnd = ... Create, Get or whatever... pfnOldWndProc = (WNDPROC) SetWindowLong (hWnd, GWL_WNDPROC, (LONG) YourNewProc); }
Я это все знаю!Но остается самый 1й и главный мой вопрос! Какое сообщение надо обрабатывать что бы отловить передаваемую альфу и rgb цвет(для контролла), и как потом их подменить на нужные мне.