MFC创建椭圆形半透明对话框

来源:互联网 发布:贪心算法加油站问题 编辑:程序博客网 时间:2024/06/10 13:33
椭圆形半透明对话框:vs20101.创建一个基于对话框的应用程序,工程名为:OperateDlg。2.在工作区中选择Class view标签,展开OperateDlg classes|COperateDlgDlg,双击OnInitDialog()函数,在客户区中添加如下代码:


BOOL COperateDlgDlg::OnInitDialog()
{
...
 // TODO: 在此添加额外的初始化代码
 //设置窗口透明度
 SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE)^0x80000);
 HINSTANCE hInst = LoadLibrary("User32.DLL");  // 加载库文件
 if(hInst)
 {
  typedef BOOL (WINAPI* MYFUNC)(HWND, COLORREF, BYTE, DWORD);
  MYFUNC func = NULL;   // 函数指针
  // 取得SetLayeredWindowAttributes()函数指针
  func = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
  // 使用SetLayeredWindowAttributes函数设定透明度
  if(func)
   func(this->GetSafeHwnd(), RGB(0,0,0), 200, 0x2);
  FreeLibrary(hInst);
 }
 // 设置窗口形状
 CRect Rect;
 CRgn newRgn;
 // 获得当前窗体区域
 GetClientRect(&Rect);
 // 设置椭圆形区域
 newRgn.CreateEllipticRgn(0,0,Rect.Width(), Rect.Height());
 ::SetWindowRgn(this->m_hWnd, (HRGN)newRgn, TRUE);

 return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}