私はトグルボタンを作成するために非常に長い間(数日も)試みてきました。上または下の状態を持つボタン。
所有者が描いたトグルボタン、チェックボックス、プッシュライクが機能しないことを理解するのに1日かかりました。所有者描画を使用する場合、チェックボックスと通常のボタンの間に違いはありません (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 は、IDC_BTN_TOGGLE を描画していて、一番上の bool も true の場合にのみ true です。
通常のボタンは通常どおり機能します。クリックすると、すぐにダウン状態が表示され、リリースされて通常に戻ります。トグル ボタンはほとんど反応しません。