我希望把一些編輯字段ontop的這是在另一個頂層窗口中呈現一個閃屏的(透明的PNG與此類似http://code.logos.com/blog/2008/09/displaying_a_splash_screen_with_c_part_ii.html)。WS_EX_LAYERED父的Win32的編輯控件不接收鼠標/單擊事件時,他們的背景是透明的
我做了一個輔助窗口,它總是在我的啓動畫面的頂部,並與WS_EX_LAYERED使得它也是透明的。
現在,我通過捕捉WM_CTLCOLOREDIT設置在WndProc中編輯框的背景顏色。
這工作得很好,我的輸入控制是透明的(例如無形的),只有輸入的文本是在啓動屏幕上是可見的。
現在問題來了鼠標光標這表明這裏是一個文本框中不能正常工作,無論是我可以在該框中單擊以具有焦點。如果我不讓編輯控件的背景透明,問題都會消失。當它透明時,也沒有WM_NCHITTEST。唯一一次即時得到一個mousecursor是,如果有(可見)的文本已經在框中
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.
}
這是設計。窗口對用戶眼睛來說透明的任何部分對於鼠標點擊都是透明的。他們被送到下面的窗戶。你不能改變這一點。 –