別のトップ レベル ウィンドウ (この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.
}