我想在一个启动画面的顶部放置一些编辑字段,这些字段在另一个顶级窗口中呈现(透明的PNG类似于此http://code.logos.com/blog/2008/09/displaying_a_splash_screen_with_c_part_ii.html)。
我创建了一个辅助窗口,它始终位于我的启动画面之上,并且使用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.
}
答案 0 :(得分:0)
如果对透明区域使用1而不是0的alpha,它们仍然是透明的,但会响应鼠标点击。