博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MFC实现不规则形状窗口
阅读量:4123 次
发布时间:2019-05-25

本文共 1405 字,大约阅读时间需要 4 分钟。

转载来自:http://blog.csdn.net/dpsying/article/details/17126761

http://www.jb51.net/article/66694.htm

  1. void CFDlg::SetRegion(CDC* pDC, UINT BackBitmapID, COLORREF TransColor)  
  2. {  
  3.     CDC dcMem;  
  4.     if(!dcMem.CreateCompatibleDC(pDC))  
  5.     {  
  6.         MessageBox(_T("创建兼容DC失败!"));  
  7.     }  
  8.   
  9.     CBitmap bitmap;  
  10.     if(!bitmap.LoadBitmap(BackBitmapID))  
  11.     {  
  12.         MessageBox(_T("加载位图失败!"));  
  13.     }  
  14.   
  15.     if(!dcMem.SelectObject(&bitmap))  
  16.     {  
  17.         MessageBox(_T("选进设备描述表失败!"));  
  18.     }  
  19.   
  20.     BITMAP bitmapinfo;  
  21.     bitmap.GetBitmap(&bitmapinfo);  
  22.     //把窗口设为图片的大小,去掉这个的话,那么程序分割会不正确  
  23.     MoveWindow(0,0,bitmapinfo.bmWidth,bitmapinfo.bmHeight,true);   
  24.     //整体区域  
  25.     CRgn rgn;  
  26.     CRgn tmpRgn;  
  27.     rgn.CreateRectRgn(0,0,bitmapinfo.bmWidth,bitmapinfo.bmHeight);  
  28.     //从整体区域中剔除所有黑色像素区域  
  29.     for(int i=0;i<bitmapinfo.bmWidth;i++)  
  30.     {  
  31.         for(int j=0;j<bitmapinfo.bmHeight;j++)  
  32.         {  
  33.             COLORREF cl=dcMem.GetPixel(i,j);  
  34.             if(cl== TransColor)  
  35.             {  
  36.                 tmpRgn.CreateRectRgn(i,j,i+1,j+1);  
  37.                 rgn.CombineRgn(&rgn,&tmpRgn,RGN_XOR);  
  38.                 tmpRgn.DeleteObject();  
  39.             }  
  40.         }  
  41.     }  
  42.     //设置窗口显示区域  
  43.     SetWindowRgn(rgn,true);  
  44. }  

OnInitDialog():

SetRegion(GetDC(), IDB_MASK2, RGB(0, 0, 0));

CenterWindow();

OnPaint():

  1.  CPaintDC  dc(this);     
  2.         CRect  rect;     
  3.         GetWindowRect(&rect);     
  4.         CDC  dcMem;     
  5.         dcMem.CreateCompatibleDC(&dc);     
  6.         CBitmap  bmpBackground;     
  7.         bmpBackground.LoadBitmap(IDB_BITMAP_CF);  //背景图  
  8.         BITMAP  bitmap;     
  9.         bmpBackground.GetBitmap(&bitmap);     
  10.         CBitmap  *pbmpOld=dcMem.SelectObject(&bmpBackground);   
  11.         dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);  
  12.     }  
对话框的标题栏和边界 不要 不然会影响显示

你可能感兴趣的文章
日志框架学习2
查看>>
SVN-无法查看log,提示Want to go offline,时间显示1970问题,error主要是 url中 有一层的中文进行了2次encode
查看>>
NGINX
查看>>
Qt文件夹选择对话框
查看>>
QT中 QString转wchar_t*的方法
查看>>
微信小程序中关于get,setStorage与get,setStorageSync的一个小坑
查看>>
微信小程序 wx.redirectTo 失效的问题
查看>>
Qt使用正则表达式
查看>>
C++和QT用正则过滤汉字
查看>>
JavaScript Object转字符串
查看>>
JavaScript 日期对象互转String对象,葫芦娃葫芦娃~
查看>>
QT可执行程序的图标
查看>>
QVariant转换与QString互转 葫芦娃 葫芦娃~
查看>>
pandas DataFrame 分组求和
查看>>
Pandas,删除矩阵中带有Nan的数据
查看>>
C++ for循环的几种使用方法
查看>>
C++产随机数
查看>>
kali linux 中文出现乱码问题的解决
查看>>
java中的UUID.randomUUID()函数对应Python中的uuid函数
查看>>
TCP/IP详解(1卷)第一章--协议总层次图
查看>>