可以缩放的异形窗口

covsno 2009-11-10 02:58:56
可以缩放的异形窗口

一个矩形裁剪区(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);//?
...全文
126 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wfx_net 2009-11-11
  • 打赏
  • 举报
回复
结贴吧
muzizongheng 2009-11-11
  • 打赏
  • 举报
回复
lz, 解决了吗?
解决了结贴给分吧
LPR_Pro 2009-11-11
  • 打赏
  • 举报
回复
ding
xwsn007 2009-11-11
  • 打赏
  • 举报
回复
来晚了,支持
covsno 2009-11-10
  • 打赏
  • 举报
回复
我已经弄出来了
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);//返回原来的位置
covsno 2009-11-10
  • 打赏
  • 举报
回复
rgnlt,rgnrt,rgnrb,rgnlb 只生成一次
不多次生成
covsno 2009-11-10
  • 打赏
  • 举报
回复
生成rgnlt,rgnrt,rgnrb,rgnlb 的代价比较高,就是流行的Bmp2Rgn
这4个区域怎么和rgn[4]产生反应?
qifa 2009-11-10
  • 打赏
  • 举报
回复
假定4个角裁剪区大小不变,假定都是10*10
在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);


貌似另外一个版也发了同样的问题?!

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧