2012-12-29 23 views
0

我希望把一些編輯字段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. 
    } 
+1

這是設計。窗口對用戶眼睛來說透明的任何部分對於鼠標點擊都是透明的。他們被送到下面的窗戶。你不能改變這一點。 –

回答

0

進入如果您使用的1而不是0的透明度爲透明地區,它們仍然是透明的,但會響應鼠標點擊。

+0

你的意思是SetLayeredWindowAttributes(g_HWNControlsParent,RGB(0,0,0),1,LWA_COLORKEY); ?這也不起作用 – Steve

+0

當你使用'LWA_COLORKEY'時你不能指定alpha,你需要通過'UpdateLayeredWindow'使用每像素的alpha。 –

+0

我嘗試使用UpdateLayeredWindow - 在這種情況下,一切都是透明的 - 即使是在編輯框中的文本 - 但是觀察到正確的鼠標行爲 - 你有一個例子,這可以正常工作嗎? – Steve