可以缩放的异形窗口 一个矩形裁剪区(rgn),4个角裁剪区(rgnlt,rgnrt,rgnrb,rgnlb).
矩形裁剪区大小可以变化,4个角裁剪区大小不变,假定都是10*10,位置对应于矩形裁剪区(rgn)的4个角. 1. 生成rgnlt,rgnrt,rgnrb,rgnlb 2.在onsize中
CRgn rgn;
rgn.CreateRectRgn (0, 0, rcClient.Width0, rcClient.Height0);
//不知道怎么弄了
rgn.CombineRgn(&rgn, rgnlt, RGN_AND);//?
矩形裁剪区大小可以变化,4个角裁剪区大小不变,假定都是10*10,位置对应于矩形裁剪区(rgn)的4个角. 1. 生成rgnlt,rgnrt,rgnrb,rgnlb 2.在onsize中
CRgn rgn;
rgn.CreateRectRgn (0, 0, rcClient.Width0, rcClient.Height0);
//不知道怎么弄了
rgn.CombineRgn(&rgn, rgnlt, RGN_AND);//?
解决方案 »
- XP系统设计的软件在Win7系统显示问题
- 调用已经在运行程序内的函数!!!不运行新的程序!!
- sqlserver中的datetime类型对应VC中是什么类型?如何将CString类型转换成这个类型.
- 我写了个数据库小程序,出了点错
- 对于一个用vc++写的一个activex控件,怎么在网页中得到运用呢?
- 求助高手!!在windows下读取bios文件的内容用C语言描述
- 急求bmp转jpeg程序的源代码或者可以下载的往址
- 如何让CSTATIC 的文字变为URL ?
- 请问各位:哪儿有<<COM本质论>>下载?
- 如何打印一个Dialog的内容?
- vc里面哪个list比较好 判断是否重复?
- 我listctrl背景帖了一个jpg图片,然后在listctrl中添加了一些图标,比如:
在onsize中 CRect rect, rect2;
CRgn rgn[4];
CRgn rgnWnd; GetClientRect(rect);
GetWindowRect(rect2);
rect.right = rect.left + rect2.Width();
rect.bottom = rect.top + rect2.Height();
rgn[0].CreateRectRgn(rect.left, rect.top, rect.left + 10, rect.top + 10);
rgn[1].CreateRectRgn(rect.right - 10, rect.top, rect.right, rect.top + 10);
rgn[2].CreateRectRgn(rect.left, rect.bottom - 10, rect.left + 10, rect.bottom);
rgn[3].CreateRectRgn(rect.right - 10, rect.bottom - 10, rect.right, rect.bottom); rgnWnd.CreateRectRgn(rect.left, rect.top, rect.right, rect.bottom);
rgnWnd.CombineRgn(&rgnWnd, &rgn[0], RGN_XOR);
rgnWnd.CombineRgn(&rgnWnd, &rgn[1], RGN_XOR);
rgnWnd.CombineRgn(&rgnWnd, &rgn[2], RGN_XOR);
rgnWnd.CombineRgn(&rgnWnd, &rgn[3], RGN_XOR); SetWindowRgn((HRGN)rgnWnd.Detach(), TRUE);
貌似另外一个版也发了同样的问题?!
这4个区域怎么和rgn[4]产生反应?
不多次生成
Onsize中,以右上角为例:RECT rect;
CRgn rgnRT;
CRgn rgnWnd;
GetClientRect(rect);
int a1=rect.right - m_szRT.cx,a2=rect.top,a3=rect.right,a4=rect.top+m_szRT.cy;
rgnRT.CreateRectRgn(a1,a2 , a3, a4 );//创建右上角区域
int nOffsetx=rect.right - m_szRT.cx;
m_cRgnRT.OffsetRgn(nOffsetx,0);//将右上角图片区域移动到右上角,XOR
rgnRT.CombineRgn(&rgnRT,m_cRgnRT,RGN_XOR);//裁剪右上角
rgnWnd.CreateRectRgnIndirect(&rect);
rgnWnd.CombineRgn(&rgnWnd,&rgnRT, RGN_XOR);//将裁剪后的右上角合并到主区域,XOR
rgnRT.DeleteObject();
rgnWnd.DeleteObject();
m_cRgnRT.OffsetRgn(-nOffsetx,0);//返回原来的位置