mfc程序界面贴图,难题!!!

UnkownState 2013-09-07 05:08:02
一个界面为类似圆角矩形的软件,圆角矩形的中央是程序的操作部分。
目前贴图方案是圆角矩形四周的边框分别放到四个dialog中绘制,绘制方式为stetchblt,中心使用一个
dialog,但是拖动窗口改变大小会导致四周的圆角矩形边框对不上,线条错开。

如果将整个圆角矩形做背景,那么怎样保证放在圆角矩形中的dialog在拖动窗口时和四周都保持一定距离,否则可能存在拖动一边,中心的dialog可以覆盖到圆角矩形的圆角部分。写死了和边框的距离又很难看,随着背景图形的变化有时近有时远。
...全文
266 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
UnkownState 2013-09-09
  • 打赏
  • 举报
回复
引用 11 楼 schlafenhamster 的回复:
对话框OnPaint: #define R 50 #define W 300 #define H 200 #define O_X 30 #define O_Y 20 CPaintDC dc(this); // CDC memDC; memDC.CreateCompatibleDC(&dc); // CBitmap bmp; bmp.CreateCompatibleBitmap(&dc,W,H); memDC.SelectObject(bmp); CBrush brush; brush.CreateSolidBrush(RGB(196,196,255)); memDC.SelectObject(brush); // 蓝底 CRgn rgn; rgn.CreateRoundRectRgn(0,0,W,H,R,R); memDC.FillRgn(&rgn,&brush); // 红边 CBrush brush1; brush1.CreateSolidBrush(RGB(255,0,0)); memDC.SelectObject(brush1); memDC.FrameRgn(&rgn,&brush1,1,1); // 去4个角 CRgn rgn1; rgn1.CreateRoundRectRgn(O_X,O_Y,W+O_X,H+O_Y,R,R); dc.SelectClipRgn(&rgn1); dc.BitBlt(O_X,O_Y,W+O_X,H+O_Y,&memDC,0,0,SRCCOPY); // // CDialog::OnPaint(); } }
非常感谢,已经实现。 我也在window上面画了两个错开位置的圆角矩形。
schlafenhamster 2013-09-08
  • 打赏
  • 举报
回复
对话框OnPaint: #define R 50 #define W 300 #define H 200 #define O_X 30 #define O_Y 20 CPaintDC dc(this); // CDC memDC; memDC.CreateCompatibleDC(&dc); // CBitmap bmp; bmp.CreateCompatibleBitmap(&dc,W,H); memDC.SelectObject(bmp); CBrush brush; brush.CreateSolidBrush(RGB(196,196,255)); memDC.SelectObject(brush); // 蓝底 CRgn rgn; rgn.CreateRoundRectRgn(0,0,W,H,R,R); memDC.FillRgn(&rgn,&brush); // 红边 CBrush brush1; brush1.CreateSolidBrush(RGB(255,0,0)); memDC.SelectObject(brush1); memDC.FrameRgn(&rgn,&brush1,1,1); // 去4个角 CRgn rgn1; rgn1.CreateRoundRectRgn(O_X,O_Y,W+O_X,H+O_Y,R,R); dc.SelectClipRgn(&rgn1); dc.BitBlt(O_X,O_Y,W+O_X,H+O_Y,&memDC,0,0,SRCCOPY); // // CDialog::OnPaint(); } }
UnkownState 2013-09-07
  • 打赏
  • 举报
回复
到不是需要圆形按钮。只是怎么把这个图形绘制到mfc dialog上。而且保证里面其他图形界面和他等比例缩放。
schlafenhamster 2013-09-07
  • 打赏
  • 举报
回复
圆按钮 就是 用 的: SetWindowRgn(wndRgn,TRUE);
UnkownState 2013-09-07
  • 打赏
  • 举报
回复
没有这样试过。这只是里面的一个,外面是一个方形的矩形做为最外城的边框。 而其余的操作界面在这个圆角矩形里。
schlafenhamster 2013-09-07
  • 打赏
  • 举报
回复
程序窗口就是这样? 用: SetWindowRgn(wndRgn,TRUE); 不行吗 ?
UnkownState 2013-09-07
  • 打赏
  • 举报
回复

引用 4 楼 schlafenhamster 的回复:
5个 对话框 画一个 圆角 矩形 ?


一个这样的矩形
UnkownState 2013-09-07
  • 打赏
  • 举报
回复
引用 4 楼 schlafenhamster 的回复:
5个 对话框 画一个 圆角 矩形 ?
是的,圆角矩形的四条边放在四周的四个dialog中,中间的dialog是程序的操作区。
schlafenhamster 2013-09-07
  • 打赏
  • 举报
回复
5个 对话框 画一个 圆角 矩形 ?
UnkownState 2013-09-07
  • 打赏
  • 举报
回复
引用 1 楼 schlafenhamster 的回复:
这么复杂? 5个 对话框 ?
就像我上面说的,最后发现改变窗口大小,矩形线条错开。
UnkownState 2013-09-07
  • 打赏
  • 举报
回复
5个只是我的涉及,我开始觉得这么拼到一起就可以。
schlafenhamster 2013-09-07
  • 打赏
  • 举报
回复
这么复杂? 5个 对话框 ?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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