在上一篇博客中,我已经完成了一个对某个颜色值透明的win32窗口,存在一个很大的缺陷:透明部分是无法响应鼠标消息的,这就导致窗口无法拖动。在查阅了大量资料也没有发现详细的解决方法后,决定记载一下我的解决方法。
首先确定了一下方案为建立一个接近透明的窗口填充这个对某个颜色值透明的窗口,当鼠标点击到接近透明的子窗口时,将消息转发给父窗口,父窗口再处理拖动消息并移动子窗口。
创建两个窗口的代码如下:
//对黑色透明的父窗口
HWND hWnd = CreateWindowEx(WS_EX_LAYERED, NULL, NULL, WS_POPUP | WS_VISIBLE, 0, 0, 200, 200, NULL, NULL, hInst, 0);
SetLayeredWindowAttributes(hWnd, 0, 255, LWA_COLORKEY);
//透明度为1的底层子窗口
HWND hWndBottom &