3

Visual Studio 2005 のダイアログ エディタを使用して、静的テキスト コントロールを含むダイアログ ボックスを作成しています。静的テキスト コントロールの背景を透明にしたいのですが、その下に静的イメージ コントロールを使用していて、灰色のテキスト背景が見苦しいからです。エディターで、「透明」属性を True に設定すると、背景が希望どおりに透明になります。しかし、アプリを実行して SendMessage(hText, WM_SETTEXT, 0L, "newtext") を使用してテキストを変更するとすぐに、背景の透明度が失われ、再び灰色になります。何か案は?ところで、私はこれを C++ で行っています。

よろしくお願いします。

4

3 に答える 3

2

Anthony Johnsonが言ったWM_CTLCOLORSTATICように、ダイアログボックスでメッセージを処理します(処理する必要はありませんWM_NOTIFY-とにかく、静的コントロールがそのメッセージを使用するとは思わない)。しかし、背景モードを透明に設定するだけでは十分ではないようです。また、背景ブラシをヌルブラシに設定する必要があります。このようなものが(DialogProcで)機能するはずです:

case WM_CTLCOLORSTATIC:
    SetBkMode((HDC)wParam, TRANSPARENT);
    return (INT_PTR)(HBRUSH)GetStockObject(NULL_BRUSH);

静的コントロールのテキストを変更した場合、これを行うときに正しく描画するには、その下にあるものを無効にする必要がある場合があります。

于 2009-01-16T00:22:14.033 に答える
1

コントロールを非表示にしてから、テキストを設定してから表示してみてください。

于 2009-01-15T19:22:15.917 に答える
0

ダイアログ エディターでそれを行う方法はわかりませんが、スタティックの親ウィンドウで WM_NOTIFY メッセージを処理すると、スタティックはスタティックを描画する前に WM_CTLCOLORSTATIC メッセージを送信します。そこで SetBkMode((HDC)wParam, TRANSPARENT); を呼び出すと、静的な背景が透明になります。

于 2009-01-15T19:57:56.907 に答える