1

WTL では、CBitmapButton は PNG のような透明なレイヤーを持つ画像をサポートしていません。そのため、GDI+ を使用して PNG を描画するようにコードをカスタマイズし、CPNGButton という名前を付けます。しかし、win XP では状況が奇妙です。ボタンが他のウィンドウと重なっている場合、ボタンは最初に WM_PAINT を受け取り、次に親を受け取り、誤った結果を引き起こします。

ここに画像の説明を入力--->ここに画像の説明を入力

リソースを確認し、ボタンのテンプレートから WS_TABSTOP 属性を削除すると、問題なく動作し、親ウィンドウが最初に WM_PAINT を受け取り、次にボタンを受け取ります。WS_TABSTOP がウィンドウの描画順序に影響を与える原因は何ですか?

4

1 に答える 1

2

背景を描かないとこうなります。これにより、ウィンドウに「穴」が残ります。自分の背後にあるウィンドウのピクセルが表示されます。または、そのようなウィンドウがない場合はデスクトップ。それ以外の場合、これが WS_TABSTOP と何の関係があるかはわかりません。

WS_EX_TRANSPARENT スタイル フラグを使用します。これにより、ボタンの親がクライアント ウィンドウに自分自身を描画して背景ピクセルを提供する必要があることが Windows に通知されます。

于 2012-02-27T13:21:34.523 に答える