Проблемы с бэкграундом дочерних окон

Тема в разделе "WASM.WIN32", создана пользователем cc, 20 авг 2008.

  1. cc

    cc New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2006
    Сообщения:
    34
    Создается окно через CreateWindowEx. Аналогично на нем создаются дочерние окна (контролы). Проблема в том что у главного окна и контролов (static'а например) различается цвет бэкграунда. Если использовать манифест - все нормально. Интересно узнать решение этой проблемы без использования манифеста. Можно ли обойтись без сабклассинга дочерних окон или установки стиля owner draw у контролов? Думаю должен быть выход проще...
     
  2. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    WM_CTLCOLOR<name_of_control>
    name_of_control - STATIC, EDIT, etc

    wParam - handle to the device context for the control
    lParam - handle to the control

    If an application processes this message, the return value is a handle to a brush that the system uses to paint the background of the control.
     
  3. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Доброго времени суток!
    Я тут тоже занялся бэкграундом контролов.
    Проверил методику предложеную zhindos работает, но с какими-то глюками.
    Код (Text):
    1.     .elseif eax==WM_CTLCOLORLISTBOX
    2.         invoke  SetBkMode,[wParam],TRANSPARENT
    3.         mov eax,    [hBrushList]
    4.         ret
    Бовавляю бэкграунд к ListBox. Пока он пустой, то бэкграунд правильный, но если в него добавить пару строк, то на добавленных строка проступает бэкграунд родительского окна.
    Это так должно быть?
    У меня Win2kSP4.

    И еще один вопросик.
    Как можно определить позицию контрола (любого) относительно клиентской области. Т.е. учесть ширину бордюра и меню? В какую API стучать?
     
  4. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    S_Alex
    но если в него добавить пару строк, то на добавленных строка проступает бэкграунд родительского окна

    Все вопросы к написателем кода WinProc listbox-а :)

    Как можно определить позицию контрола (любого) относительно клиентской области

    GetWindowInfo
     
  5. cc

    cc New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2006
    Сообщения:
    34
    Делаю так для static'а:
    Код (Text):
    1. case WM_CTLCOLORSTATIC:
    2.     SetBkMode((HDC) wParam, TRANSPARENT);
    3.     return GetSysColorBrush(COLOR_WINDOW);
    4.     break;
    Цвет бэкграунда статика теперь другой, но все равно не такой же, как у основного окна :dntknw:
     
  6. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    В MASM32 небыло структуры WINDOWINFO, да и в Win32.hlp у меня тоже нет описания.
    Потому и не нашел, пришлось лезть в MSDN. Там есть :)
    zhindos Спасибо, как раз то, что доктор прописал.
     
  7. zhindos

    zhindos New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    142
    cc

    Какого цвета у тебя родительское окно, другими словами: ты уверен, что это именно COLOR_WINDOW?
     
  8. cc

    cc New Member

    Публикаций:
    0
    Регистрация:
    15 окт 2006
    Сообщения:
    34
    Да, действительно, мой косяк, забыл сделать +1 к COLOR_WINDOW в WNDCLASSEX.hbrBackground. Теперь все норм, спасибо за помощь.