0

別のトップ レベル ウィンドウ (このhttp://code.logos.com/blog/2008/09/displaying_a_splash_screen_with_c_part_ii.htmlに似た透明な PNG) でレンダリングされるスプラッシュ スクリーンの上にいくつかの編集フィールドを配置したいと考えています。

常にスプラッシュ スクリーンの上に表示されるセカンダリ ウィンドウを作成し、WS_EX_LAYERED で透明にしました。

ここで、WM_CTLCOLOREDIT をキャッチして、wndproc の編集フィールドの背景色を設定します。

これは正常に動作し、入力コントロールは透過的 (非表示など) で、入力されたテキストのみがスプラッシュ スクリーンに表示されます。

ここで、テキスト ボックスであることを示すマウス カーソルが機能せず、そのボックスをクリックしてフォーカスを合わせることができないという問題が発生します。編集コントロールの背景を透明にしないと、問題はすべて消えます。透明な場合、WM_NCHITTEST もありません。マウスカーソルを取得する唯一の時間は、ボックスに既に入力されている(表示されている)テキストがある場合です

g_HWNControlsParent = CreateWindowEx( WS_EX_LAYERED,.....);
hwLoginField = CreateWindowEx(NULL,"EDIT", "-User-",    WS_CHILD|WS_VISIBLE|WS_TABSTOP, ....g_HWNControlsParent);
SetLayeredWindowAttributes(g_HWNControlsParent,RGB(0, 0, 0), 0, LWA_COLORKEY) ;

HWNControlsParent の wndproc

case WM_CTLCOLOREDIT: { // BG Color of Input Fields
        HDC hdc = (HDC)wParam;
        SetTextColor(hdc, RGB(230,230,230));
        SetBkColor(hdc, RGB(0,0,0)); // Color of Background where Text is entered
         SetDCBrushColor(hdc, RGB(0,0,0)); // Color of Background where no Text is
        return (LRESULT) GetStockObject(DC_BRUSH); // return a DC brush.
    }
4

1 に答える 1

0

透明領域に 0 の代わりに 1 のアルファを使用すると、それらは透明のままですが、マウス クリックに応答します。

于 2012-12-29T22:21:21.793 に答える