看了几个贴子,都不是说的太清楚,这里再问一次

解决方案 »

  1.   

    把所有RECT操作都替换成RGN操作,可以理解成RGN是由一系列不同的RECT组合而成,这就是不规则窗体
      

  2.   

    去codeproject,记得上面有讲的,也有例子。
      

  3.   

    http://www.vckbase.com/document/viewdoc/?id=1345
      

  4.   

    发个例子给我看看吧[email protected],谢谢
      

  5.   

    其实很简单的,基本思路就是把图片中的指定颜色,比如这里的蓝色,遇到蓝色,创建一个1X1的小方块区域,然后和原来图片去用CombineRgn创建CRgn 的对象,用RGN_XOR,然后用SetWindowRgn就可以了OnInitDialog....
    {
    CRgn m_rgnTemp;
    m_rgnTemp.DeleteObject();
    m_MonkeyRgn.DeleteObject();
    CBitmap bmp,*oldbmp;
    CRect bmpRect;

    BITMAP bmpInfo;
    bmp.LoadBitmap(IDB_BITMAP1);
    bmp.GetBitmap(&bmpInfo);
    CDC memory,*pDC;
    pDC=GetDC();
    memory.CreateCompatibleDC(pDC);
    oldbmp=memory.SelectObject(&bmp);
    COLORREF colorRemove=RGB(0,0,255);
    m_MonkeyRgn.CreateRectRgn(0,0,bmpInfo.bmWidth,bmpInfo.bmHeight);
    for(int x=0;x<bmpInfo.bmWidth;x++)
    for(int y=0;y<bmpInfo.bmHeight;y++)
    {
    if(memory.GetPixel(x,y)==colorRemove)
    {
    m_rgnTemp.CreateRectRgn(x,y,x+1,y+1);
    m_MonkeyRgn.CombineRgn(&m_rgnTemp,&m_MonkeyRgn,RGN_XOR);
    m_rgnTemp.DeleteObject();
    }
    }
    SetWindowRgn(m_MonkeyRgn,TRUE);
    memory.SelectObject(oldbmp);
    m_MonkeyRgn.DeleteObject();...
    }OnPaint...
    {
      if()
      {
      ...
      }
      else
      {
    CBitmap bmp,*oldbmp;
    CRect bmpRect;
    BITMAP bmpInfo;
    bmp.LoadBitmap(IDB_BITMAP1);
    bmp.GetBitmap(&bmpInfo);
    CDC memory,*pDC;
    pDC=GetDC();
    memory.CreateCompatibleDC(pDC);
    oldbmp=memory.SelectObject(&bmp);
    pDC->BitBlt(0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,&memory,
    0,0,SRCCOPY);
    memory.SelectObject(oldbmp);
    CDialog::OnPaint();
      }}
      

  6.   

    1>c:\documents and settings\administrator\桌面\unshape\unshapedlg.cpp(91) : error C2440: “static_cast”: 无法从“void (__thiscall CUnShapeDlg::* )(WPARAM,LPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
    1>        在匹配目标类型的范围内没有具有该名称的函数