中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > Visual C++ > 综合文章
1、建立图形形状的窗口
作者:未知 时间:2005-07-27 21:54 出处:CSDN 责编:chinaitpower
              摘要: 1、建立图形形状的窗口

1、建立图形形状的窗口
    1、首先要申请画板变量CDC memDC 用于绘制导入图形;
    2、申请CBitmap变量 m_bmpDraw 用于导入图形 pOldMemBmp 用于保存原画板状态; 
    3、申请COLORREF变量 col,colMask;分别用于保存当前点颜色和比较颜色,以便以后设置为透明作准备。
    4、申请CRect 变量cRect;用于保存窗口矩形。
    5、申请CRgn变量wndRgn,rgnTemp;用于保存窗口区域,和临时窗口区域。
    6、申请BITMAP变量用于保存图形的结构。
    过程:
         1、首先要保预先准备好的图形导入m_bmpDraw 并把图形结构倒入BITMAP变量;
         2、把窗口矩形存入cRect;
         3、新建矩形使其适合图形大小
         4、建立和形参画板一致的画板 并用用图形变量初始化memDC;
         5、提取画板需要做透明处理的颜色存入colMask;
         6、建立和图形大小相一致的区域
         7、对每一点与需要处理的点相比较,根据比较判断来生成该点所对应的区域,把该区域与已有区域异或。
            并在最后删除临时点
         8、恢复画板初始值。
         9、重新设置区域。
         10、通过响应WM_ERASEBKGND消息把原位图拷贝到指定的矩形中。
            
      void Cl15031Dlg::setwin(CDC * cdc)
{
 CDC memdc;
 
 CBitmap *m_oldebitmap;
 BITMAP bm;
 
 memdc.CreateCompatibleDC(cdc);
 m_bitmap.GetObject(sizeof(bm),&bm);
 CRect m_rect;
 GetWindowRect(&m_rect);
 CRect rect=CRect(m_rect.TopLeft(),CSize(bm.bmWidth,bm.bmHeight));
 CRgn m_rgn,m_temprgn;
 m_rgn.CreateRectRgn(0,0,rect.Width(),rect.Height());
 m_oldebitmap=memdc.SelectObject(&m_bitmap);
 COLORREF c1,c2;
 c1=memdc.GetPixel(0,0);
 for(int x=0;x<rect.Width();x++)
  for(int y=0;y<rect.Height();y++)
  {
   c2=memdc.GetPixel(x,y);
   if(c1==c2)
   {
    m_temprgn.CreateRectRgn(x,y,x+1,y+1);
    m_rgn.CombineRgn(&m_rgn,&m_temprgn,RGN_XOR);
    m_temprgn.DeleteObject();
   }
  }
  memdc.SelectObject(&m_oldebitmap);
  SetWindowRgn((HRGN)m_rgn,true);

}

void Cl15031Dlg::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值
 OnOK();

 CDialog::OnNcLButtonDblClk(nHitTest, point);
}

BOOL Cl15031Dlg::OnEraseBkgnd(CDC* pDC)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值
 CDC memdc;
 CRect rect;
 GetWindowRect(&rect);
 CBitmap *bitmap=NULL;
 CBitmap &mbitmap=m_bitmap;
 memdc.CreateCompatibleDC(pDC);
 bitmap=memdc.SelectObject(&mbitmap);

 pDC->BitBlt(0,-20,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
 memdc.SelectObject(bitmap);
 return true;// CDialog::OnEraseBkgnd(pDC);
}


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有