MFC屏幕标记之透明窗体(一)
来源:互联网 发布:网络机顶盒怎么看中央5 编辑:程序博客网 时间:2024/05/01 21:38
经过查阅资料,要实现屏幕标记,了解到两种办法:一种是通过对当前屏幕进行截图,然后对截图进行相关的标记来实现对当前屏幕的标记;而另外一种则是通过建立一个透明的窗体,将窗体进行置顶,然后对这个透明的窗体进行标记操作,从而实现对当前屏幕的标记。下面要讲的就是第二种方法的实现:
首先是建立一个MFC对话框程序,然后要将这个窗口透明,实现方法如下:
//点击按钮实现窗口透明函数void CScreenMarkerDlg::OnButtonTransparent() {HINSTANCE hInst = GetModuleHandle("User32.dll");if (hInst){//获取模块里的函数BOOL (WINAPI *SetLayeredWindowAttributes)(HWND,COLORREF,BYTE,DWORD)=(BOOL (WINAPI*) (HWND,COLORREF,BYTE,DWORD))GetProcAddress(hInst,"SetLayeredWindowAttributes");//函数指针正确获取if(SetLayeredWindowAttributes){//让窗口具透明的特性::SetWindowLong(m_hWnd,GWL_EXSTYLE, GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);//设置窗口透明。第4参数为1时,第二个参数是被透明的颜色SetLayeredWindowAttributes(m_hWnd,GetSysColor(COLOR_3DFACE),0,0x1); }FreeLibrary(hInst); //释放调模块句柄}}
1.获得SetLayeredWindowAttributes()函数
该函数是Windows 2000新增的一个API函数,它所在的模块为USER32.DLL。在用GetModuleHandle()装载USER32.DLL模块并调用GetProcAddress()得到函数 SetLayeredWindowAttributes()在User32.dll中的指针后就可以通过SetLayeredWindowAttributes()函数将窗体设置为透明了。
2.赋予窗口透明特性
要使使窗体拥有透明效果,首先要有WS_EX_LAYERED(旧的sdk没有定义WS_EX_LAYERED,开头加#define WS_EX_LAYERED 0x00080000即可)扩展属性,方法是先声明GetWindowLong和SetWindowLong
3.透明窗口函数使用
SetLayeredWindowAttributes(HWND hwnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags)
hwnd:透明窗口的句柄
crKey:颜色值,可用RGB来表示
bAlpha:透明度,取值为0到255
dwFlags:透明方式,取值又三种情况(LWA_ALPHA = 0x2,LWA_COLORKEY=0x1):
当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;
当取值为LWA_COLORKEY时,窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。当取两个值的组合:LWA_ALPHA | LWA_COLORKEY,颜色值为crKey的地方将变为全透明,而其它地方根据bAlpha参数的数值确定透明度。
4.使用举例:
SetLayeredWindowAttributes(m_hWnd, 0, 200, 0x2)即创建的窗体透明度为200;
SetLayeredWindowAttributes(m_hWnd, GetSysColor(COLOR_3DFACE), 0, 0x1)即建立窗口上为系统颜色的地方为全透明;
SetLayeredWindowAttributes(m_hWnd, RGB(255,0,0), 80, 0x1 | 0x2)即颜色为RGB(255,0,0)的地方全透明,其他地方的透明度为80。
- MFC屏幕标记之透明窗体(一)
- C++之MFC设置透明窗体
- MFC窗体透明
- mfc窗体透明方法
- mfc窗体透明2
- MFC实现窗体透明
- MFC实现窗体透明
- MFC设置窗体透明
- 用MFC实现窗体透明
- 用MFC实现窗体透明
- Qt之窗体透明
- Qt之窗体透明
- Qt之窗体透明
- Qt之窗体透明
- VC6【MFC】代码累积(二)窗体透明
- QT之桌面精灵实现(一) --- 透明窗体和图片绘制
- Qt 去掉窗体标题栏、窗体透明、窗体圆角(一)
- 透明窗体实现 - C++ & MFC & API
- 移植ucgui到linux上成功
- linux0.11 运行环境搭建以及调式--bochs (上)
- 我回来了
- 最后一次入侵
- [游戏技术]VPK地图解压封装修改
- MFC屏幕标记之透明窗体(一)
- Linux--位置参数,参数移位,随机数,数組,函数,函数递归
- 取得andorid手机SD卡路径 2.1和2.2区别
- 转:Java Annotation入门(一)(中英文结合)
- php将session信息写入数据库
- 转:Java Annotation入门(二)(中英文结合)
- Qt vs MFC (Qt和MFC的战争)
- 关于struct SVM的介绍
- javaZone制作的java视频