флажок владельца - PullRequest
       22

флажок владельца

3 голосов
/ 30 октября 2011

У меня есть родное приложение win32 c ++, в котором есть флажок.Я хочу заменить флажок и создать кнопку включения / выключения с 2 состояниями (так же, как флажок).Я добавил стиль BS_OWNERDRAW к флажку и нарисовал его в окне в WM_DRAWITEM.Проблема в том, что когда я нажимаю на флажок, я получаю сообщение WM_COMMAND (как и без BS_OWNERDRAW), но состояние CHECKED не изменяется автоматически.Должен ли я реализовать эту функцию или мне чего-то не хватает?

Код, который обрабатывает нажатие на флажок:

 case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);

    switch (wmId)
    {
        case IDC_CHECKBOX:
            if(wmEvent == BN_CLICKED)
            {
                dwPos = SendMessage(checkBox, BM_GETCHECK, 0, 0);
                if(dwPos == BST_CHECKED ) 
                {
                   // do some stuff

                } else if(dwPos == BST_UNCHECKED) {
                    // do some stuff
                }
           }

Проблема в том, что каждый раз, когда я нажимаю на флажок, BM_GETCHECK возвращаетBST_UNCHECKED.Если я удаляю BS_OWNERDRAW, он работает нормально.

Код, который создает кнопку / флажок:

   checkBox = CreateWindowEx(
        0,
        WC_BUTTON,
        szBuffer,
        WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_OWNERDRAW,
        BUTTON_ON_OFF_X, BUTTON_ON_OFF_Y,
        BUTTON_ON_OFF_WIDTH, BUTTON_ON_OFF_HEIGHT,
        hWnd, 
        (HMENU)IDC_CHECKBOX,
        hInst,
        NULL
   );

Ответы [ 2 ]

6 голосов
/ 30 октября 2011

Обычно вы устанавливаете BS_AUTOCHECKBOX, чтобы флажок автоматически устанавливался / снимался в ответ на ввод пользователя.Однако, согласно документам, вы не можете комбинировать другие стили (например, BS_AUTOCHECKBOX) при использовании BS_OWNERDRAW.

http://msdn.microsoft.com/en-us/library/windows/desktop/bb775951%28v=vs.85%29.aspx

1 голос
/ 30 октября 2011

Да.Вам нужно будет перевести с вашего WM_COMMAND и переключить состояние внутренней проверки с помощью чего-то вроде CheckDlgButton .

...