MFC: Фон Check баттона, который Push Like...

Тема в разделе "WASM.WIN32", создана пользователем sasha_s, 14 ноя 2008.

  1. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    ДАНО: Check баттон, который Push Like (по сути это кнопка с двумя состояниями: "ВЖАТО", "ОТЖАТО").
    НЕОБХОДИМО: Чтобы при состоянии "ВЖАТО" фон менялся скажем на зеленый.

    ЧТО ПРОБОВАЛ:
    - обработка WM_CTLCOLOR (не помогает, меняется фон у всех контролов, кроме баттонов, потому как для баттонов необходимо ставить стиль BS_OWNERDRAW, а именно этот стиль нельзя комбинировать с другими и соотв. кнопка становится не "Push Like")
    - обработка DrawItem (таже песня с BS_OWNERDRAW, а как самому рисовать кнопку аля "Push Like" я не нашел, в частности вот эта DrawFrameControl ф-ция отвечает за прорисовку баттона. И как ей рисовать "Push Like" check батон не знаю.)

    вот пару линков, которыми я пользовался:
    http://www.firststeps.ru/mfc/steps/help/r.php?487
    http://www.firststeps.ru/mfc/steps/r.php?196
    http://www.firststeps.ru/mfc/steps/help/r.php?312

    Кто знает решение?

    PS: в прикрепленном файле проект в 6-й студии где реализовано все что я пытался сделать...
     
  2. low_coder

    low_coder New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    5
    Код (Text):
    1.     .386
    2.     .model flat,stdcall
    3.     option casemap:none
    4.    
    5.     include \masm32\include\windows.inc
    6.     include \masm32\include\user32.inc
    7.     include \masm32\include\kernel32.inc
    8.     include \masm32\include\gdi32.inc
    9.     include \masm32\include\comdlg32.inc
    10.     include \masm32\include\shell32.inc
    11.     include \masm32\include\comctl32.inc
    12.     include \masm32\include\masm32.inc
    13.  
    14.     includelib \masm32\lib\user32.lib
    15.     includelib \masm32\lib\kernel32.lib
    16.     includelib \masm32\lib\gdi32.lib
    17.     includelib \masm32\lib\comdlg32.lib
    18.     includelib \masm32\lib\shell32.lib
    19.     includelib \masm32\lib\comctl32.lib
    20.     includelib \masm32\lib\masm32.lib
    21.    
    22.     DlgProc proto hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
    23.    
    24.     IDD_DLG1        equ 1000
    25.     IDC_BTN1        equ 1001
    26.  
    27. .data?
    28.     hInstance           dd  ?
    29.     btnDown             dd  ?
    30.     hBtn                dd  ?
    31.     hBmp1               dd  ?
    32.     hBmp2               dd  ?
    33. .data
    34.  
    35. .code
    36. start:
    37.     invoke GetModuleHandle, NULL
    38.     mov hInstance, eax
    39.     invoke DialogBoxParam, hInstance, IDD_DLG1, 0, ADDR DlgProc, 0
    40.    
    41.     DlgProc proc hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD
    42.         .if uMsg == WM_INITDIALOG
    43.             mov btnDown, 0
    44.             invoke GetDlgItem, hDlg, IDC_BTN1
    45.             mov hBtn, eax
    46.             invoke LoadBitmap, hInstance, 2
    47.             mov hBmp2, eax
    48.             invoke LoadBitmap, hInstance, 1
    49.             mov hBmp1, eax
    50.             invoke SendMessage, hBtn, BM_SETIMAGE, IMAGE_BITMAP, hBmp2
    51.         .elseif uMsg == WM_CLOSE
    52.             invoke ExitProcess, NULL
    53.         .elseif uMsg == WM_COMMAND
    54.                 mov eax, wParam
    55.                 shr eax,16
    56.                 .if ax==BN_CLICKED
    57.                     mov eax,wParam
    58.                     .if ax == IDC_BTN1
    59.                         .if btnDown == 1
    60.                             invoke SendMessage, hBtn, BM_SETIMAGE, IMAGE_BITMAP, hBmp2
    61.                             mov btnDown, 0
    62.                         .else
    63.                             invoke SendMessage, hBtn, BM_SETIMAGE, IMAGE_BITMAP, hBmp1
    64.                             mov btnDown, 1
    65.                         .endif
    66.                     .endif
    67.                 .endif
    68.         .else
    69.             mov eax, FALSE
    70.             ret
    71.         .endif
    72.         mov eax, TRUE
    73.         ret
    74.     DlgProc endp
    75. end start
     
  3. sasha_s

    sasha_s New Member

    Публикаций:
    0
    Регистрация:
    21 дек 2005
    Сообщения:
    165
    Адрес:
    Belarus
    Спасибо. Я уже решил проблему.