まず、ここで傲慢/失礼に聞こえたら申し訳ありません。
よし、これで誰もがこの問題に遭遇したことになるだろう (私は願っている); どこにも適切な答えが見つかりませんでした。Common Controls 6 マニフェストから始めて、
case WM_CTLCOLORSTATIC:
if (/* window has WS_EX_TRANSPARENT */) {
SetBkMode((HDC) wParam, TRANSPARENT);
return (LRESULT) GetStockObject(HOLLOW_BRUSH);
}
そして私たちのラベルを付けてくださいWS_EX_TRANSPARENT
。それらは透明になります。ここまでは順調ですね。次に、そのスタイルをチェックボックスに追加する必要があります (チェックボックスはそれに応答しWM_CTLCOLORBTN
、何らかの理由で応答しないため)。そして...チェックボックスが黒くなります!
所有者の描画に頼らずに完全に透明にする方法はありますか? チェックボックスを自分で描画したくありません。テーマAPIが失敗した場合に、それが正しいかどうか、またはサイズが何であるかを推測する必要はありません(そして、将来、リストビューにカスタムチェックボックスを追加するときに、チェックボックスを自分で描画する必要があります私はすでに推測の量に満足していません)。
これらのチェックボックスは、テーマ タブ コントロール上に描画されています。これまでのところ、テーマ別のタブに透明なチェックボックスがある Windows XP の 5 つのダイアログを見つけました。ショートカット プロパティの [全般] タブ、タスクバーと [スタート] メニューのプロパティの [タスクバー] タブ、システム プロパティの [システムの復元] タブ、フォルダ オプション (ラジオ ボタン) の [全般] タブ。 、およびアクセシビリティ オプションの [キーボード] タブ。だから、これは確かに可能でなければなりません!Windows UI の作成者は、OS 全体でカスタム ドローを使用する必要はなかったと確信しています...何が欠けているのでしょうか?
サブクラス化する必要がある場合は問題ありませんが (イベント処理の目的で既にサブクラスを持っています)、それでも自分で描画する必要はありません。
おまけとして、押しボタンはどうですか?オーバーライドWM_CTLCOLORBTN
するとボタンに黒い境界線が表示されますが、上記の標準ダイアログのいずれもボタンの角を透明にすることを気にしていないことに気付きました。
ありがとう!