MFC实现不规则形状窗口

51 篇文章 0 订阅

转载来自: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.     }  
对话框的标题栏和边界 不要 不然会影响显示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值