VC6制作半透明窗口技术记录

主要是记录下SetLayeredWindowAttributes函数和SetWindowLong函数在VC6当中的使用,以便今后查询!

1、首先在OnInitDialog函数中加载位图和修改窗体样式,代码如下

 m_hBitmap = (HBITMAP)LoadImage(NULL, "1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);  //载入位图
 m_hBrush=CreatePatternBrush(m_hBitmap);//创建画刷
 SetWindowLong(m_hWnd, 
              GWL_EXSTYLE, 
              GetWindowLong(m_hWnd, GWL_EXSTYLE)| WS_EX_LAYERED);//主要是增加WS_EX_LAYERED属性

2、在结束使用位图时,应该释放位图占用的内存

DeleteObject(m_hBitmap);

3、相应OnCtlColor函数,为窗口画上自定义的位图背景,添加代码:

	if(pWnd==this)  return m_hBrush;

4、响应函数修改异性窗体和或者设置窗体透明度

if(!::SetLayeredWindowAttributes(this->m_hWnd,RGB(0,0,0),0,LWA_COLORKEY)) //异型窗体,将黑色像素全部去除
	   MessageBox("error");
if(!::SetLayeredWindowAttributes(hDlg, 0, 200, LWA_ALPHA)) MessageBox("error!");//设置窗口透明度 200

5、为了能拖动窗体,这里响应鼠标左键按下的消息函数

	PostMessage(WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0); 

6、如果读者是VC6,会发现编译不通过,原因是因为VC6不支持函数SetLayeredWindowAttributes,所以需要手动加载函数库,可以在头文件中增加代码

#define WS_EX_LAYERED 0x00080000
#define LWA_COLORKEY 0x00000001
#define LWA_ALPHA 0x00000002
typedef BOOL (FAR WINAPI *LAYERFUNC)(HWND,COLORREF,BYTE,DWORD);
BOOL SetLayeredWindowAttributes(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags)
{
LAYERFUNC SetLayer;
HMODULE hmod = LoadLibrary("user32.dll");
SetLayer=(LAYERFUNC)GetProcAddress(hmod,"SetLayeredWindowAttributes");
BOOL bReturn = SetLayer(hwnd,crKey,bAlpha,dwFlags);
FreeLibrary(hmod);
return bReturn;
}

好了。开始咱们的编程之旅吧!


 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值