创建不规则窗体 看了几个贴子,都不是说的太清楚,这里再问一次 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把所有RECT操作都替换成RGN操作,可以理解成RGN是由一系列不同的RECT组合而成,这就是不规则窗体 去codeproject,记得上面有讲的,也有例子。 http://www.vckbase.com/document/viewdoc/?id=1345 发个例子给我看看吧[email protected],谢谢 其实很简单的,基本思路就是把图片中的指定颜色,比如这里的蓝色,遇到蓝色,创建一个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(); }} 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> 在匹配目标类型的范围内没有具有该名称的函数 如何在单文档内直接显示一个扇形 新人报道 关于STL Map搜索速度问题 2个对话框,如何取得其中任何一个对话框中控件的指针 关于dialog里的一个问题~!帮我啊 如何在树的节点中添加自定义的数据? 我们来讨论一下CSDN论坛改版后出现的问题及解决方案好吗?? 大虾们,来讨论一下课本上的数据结构与算法,都是干什么用的?比如huffman----- 请问:OnTimer怎样使用?怎样放置定时器? 一个比较我认为比较难的问题 请教一个很弱智的问题,游戏中自画的按钮是怎样响应相应的鼠标点击事件的了? 如何增加预览功能??
{
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();
}}
1> 在匹配目标类型的范围内没有具有该名称的函数