Я очень долго (ну, несколько дней) пытался создать кнопку переключения. Кнопка с состоянием вверх или вниз.
Потребовался день, чтобы понять, что невозможно создать нарисованную владельцем кнопку переключения, флажок и pushlike не работает. При использовании нарисованного владельца нет никакой разницы между флажком или обычной кнопкой (MSDN также отмечает, что нельзя использовать владельца, нарисованного с любым из этих стилей).
Из прочитанного я узнал, что вы должны сделать это сами, обычно это совсем не проблема, но я не могу получить настоящую «отзывчивость». То есть, если я нажимаю быстро, ничего не происходит, иногда я нажимаю, и это меняет состояние, а иногда нет и обновляется только при нажатии другой кнопки.
Я создал глобальную переменную, если кнопка должна отображаться в состоянии вверх или вниз. В командах, которые я установил, когда кнопка IDC_BTN_TOGGLE, она установит противоположное значение в bool.
Затем часть рисованного элемента:
// button down
if ((pDIS->itemState & ODS_SELECTED) || showButtonDown) {
oldBrush = (HBRUSH)SelectObject(pDIS->hDC, theme.hBrush[BRUSH_BUTTON2]);
}
// button up
else {
oldBrush = (HBRUSH)SelectObject(pDIS->hDC, theme.hBrush[BRUSH_BUTTON]);
}
Все мои кнопки нарисованы владельцем и проходят через это. showButtonDown имеет значение true, только когда он рисует IDC_BTN_TOGGLE, а верхнее значение bool также имеет значение true.
Обычные кнопки работают нормально, когда я нажимаю на них, они мгновенно показывают состояние выключения, отпускают, возвращают в нормальное состояние, кнопка переключения едва реагирует.
Задача ещё не решена.
Других решений пока нет …