我知道有函数:
SetLayeredWindowAttributes(hwnd,crKey,bAlpha,dwFlags)hwnd是透明窗体的句柄,
crKey为颜色值,
bAlpha是透明度,取值范围是[0,255],
dwFlags是透明方式,可以取两个值: 当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效; 当取值为LWA_COLORKEY时,bAlpha参数有效而窗体中的所有颜色为crKey的地方将变为透明。 LWA_ALPHA = 0x2 LWA_COLORKEY=0x1 要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性 (旧的sdk没有定义这个属性,所以可以直接指定为0x80000). WS_EX_LAYERED = 0x80000
SetLayeredWindowAttributes(hwnd,crKey,bAlpha,dwFlags)hwnd是透明窗体的句柄,
crKey为颜色值,
bAlpha是透明度,取值范围是[0,255],
dwFlags是透明方式,可以取两个值: 当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效; 当取值为LWA_COLORKEY时,bAlpha参数有效而窗体中的所有颜色为crKey的地方将变为透明。 LWA_ALPHA = 0x2 LWA_COLORKEY=0x1 要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性 (旧的sdk没有定义这个属性,所以可以直接指定为0x80000). WS_EX_LAYERED = 0x80000
http://topic.csdn.net/t/20040128/21/2684509.html
1。启动窗体后,抓当前窗体图,保存为bmp
2。添加IMessageFilter,尝试拦截所有可能重绘的消息:WM_PAINT,WM_EARSEBKGROUND这两个消息自己绘制为之前的图,然后处理WM_LBUTTONDOWN....WM_MOUSEDOWN这些输入输出消息。
3。如果输入输出消息,就不拦截,但要重新处理抓图。对特殊块,设置alpha为50%。自己没做过。估计不行。再想想。
MFC中可以将一个窗体分割成多个子窗体,不知道C#中可不可以,这样的话,你就可以单独操作每一个自窗体!you can try!