Подскажите нужное оконное сообщение

Тема в разделе "WASM.BEGINNERS", создана пользователем _nic, 31 янв 2010.

  1. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Собственно вопрос - в каком оконном сообщение содержится цвет окна и альфаблендинг?Получает ли такое сообщение только главное окно,или его тоже получают контроллы потомки главного окна?
     
  2. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    WM_BKGNCOLOR типа того

    только главное окно

    альфаблендинг - хз
     
  3. Blackbeam

    Blackbeam New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    960
    что это я ... сори

    WM_ERASEBKGND
     
  4. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    А как контролы наследуют тогда(точнее в чем) графические свойства своего родителя?
     
  5. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    Как вариант, узнать цвет окна :))
    Код (Text):
    1. Function GetWindowColor(hWindow : HWND):DWORD;
    2. var
    3.   dc : HDC;
    4. begin
    5.   dc     := GetDC(hWindow);
    6.   result := GetPixel(dc, 0, 0);
    7.   ReleaseDC(hWindow, dc);
    8. end;
    Инфа о прозрачности...
    Код (Text):
    1. BOOL GetLayeredWindowAttributes(      
    2.     HWND hwnd,
    3.     COLORREF *pcrKey,
    4.     BYTE *pbAlpha,
    5.     DWORD *pdwFlags
    6. );
     
  6. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Проблема в том что мне надо неузнавать,а перехватить и подменить эту инфу,и причем не для главного окна а для его потомка.Да проблема даже не этом.А втом что мне непонятен механизм наследования всей этой чепухи потомками :dntknw: И соотвественно я незнаю возможно ли вообще такое :dntknw:
     
  7. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    кароче, задача не ясна. rtfm.
     
  8. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Задача проста.Не дать контролу унаследовать от родительского окна альфабленд(прозрачность).Мне в голову больше ничего не приходит как подменять для него альфу с допустим 125 на 255.А как такое реализовать(если это возможно) я хз.
     
  9. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    http://msdn.microsoft.com/en-us/library/ms997507.aspx
     
  10. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    совсем не вариант. достаточно нарисовать что-то в 0, 0 и функция "никогда" не узнает настоящего цвета фона. проще GetBkColor (если WM_ERASEBKGND не перехвачен, а если перехвачен, то чего узнавать-то)
    _nic
    а перехватить его оконную функцию и подменить цвет фона
    (GetWindowLong, GWL_WNDPROC)
     
  11. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Непонимаю что сделать? Переназначить ф-цию обрабатывающую оконные сообщения?Тогда что в ней менять?Мне неизвестен механизм передачи параметров цвета и альфы в дочерний контрол(окно) :dntknw:
     
  12. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    Сам то пробовал так делать?
     
  13. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    _nic
    Это называется subclassing (не знаю как по-русски). Принцип прост и кстати очень напоминает ООП. Для любого HWND (не важно: родитель или дочернее окно) можно заменить оконную процедуру. При этом "старая" или оригинальная процедура возвращается как результат функции SetWindowLong. В этом ключ - эту процедуру необходимо вызывать в новой процедуре:
    Код (Text):
    1. WNDPROC pfnOldWndProc;
    2.  
    3. LRESULT CALLBACK YourNewProc (HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
    4. {
    5.     if (msg == WM_ERASEBKGND)
    6.     {
    7.         // erase background as you want
    8.         return TRUE;
    9.     }
    10.     return CallWndProc (pfnOldWndProc, hWnd, msg, wp, lp);
    11. }
    12.  
    13. void CreatingHWND ()
    14. {
    15.     HWND hWnd = ... Create, Get or whatever...
    16.  
    17.     pfnOldWndProc = (WNDPROC) SetWindowLong (hWnd, GWL_WNDPROC, (LONG) YourNewProc);
    18. }
     
  14. _nic

    _nic New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2007
    Сообщения:
    372
    Я это все знаю!Но остается самый 1й и главный мой вопрос! Какое сообщение надо обрабатывать что бы отловить передаваемую альфу и rgb цвет(для контролла), и как потом их подменить на нужные мне.