2

C# では、ウィンドウ ( IntPtr ) へのハンドルがあり、そのウィンドウの背景色を変更したいと考えています。これどうやってするの?

次のように、そのハンドルの GDI グラフィックス オブジェクトを取得できます。

Graphics graphics = Graphics.FromHwnd(theHandle);

だから私はどういうわけかこれから背景色を変えることができるはずですか?

また、ウィンドウの移動、サイズ変更、再描画などを行った後でも背景色が維持されるようにしたいと考えています。

4

2 に答える 2

2

これをネイティブ (C/C++) ウィンドウで直接行う方法はないと思います (つまり、Control.BackColor に類似するネイティブ GDI はありません)。

Reflector を見ると、Control は BackColor プロパティを使用して、さまざまなWM_CTLCOLOR * メッセージ (WM_CTLCOLOREDIT など) に応答しているように見えます。そのため、ネイティブ コントロールの背景色を変更する場合は、そのウィンドウをサブクラス化し、同じメッセージに応答する必要があります。ネイティブ ウィンドウがコントロールでない場合でも、ウィンドウをサブクラス化する必要がありますが、代わりにWM_PAINTまたはWM_ERASEBKGNDを処理する必要があります。

C# からネイティブ ウィンドウをサブクラス化する方法については、programmersheaven.com のこのスレッドを試してください。

于 2008-10-13T16:23:51.367 に答える
0

Control.FromHandleメソッドを使用してコントロールクラスを作成し、プロパティを設定します。

何かのようなもの...

    コントロールsomeControl=Control.FromHandle(myHandle);
    someControl.BackColor = SystemColors.Black;
于 2008-10-13T02:33:33.367 に答える