У меня есть родное приложение 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
);