当窗口变大时,如何使自己绘制的图像相对窗口的位置不变

GeorgeSoros 2010-05-09 06:12:22
例如 我在Ondraw函数中绘制了一个矩形,在窗口变大时,如何使这个矩形相对窗口的位置不变
...全文
160 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-05-17
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
visualassist4680 2010-05-09
  • 打赏
  • 举报
回复
如果使用 wtl 的话, 有一个 sizedialog, 直接使用,所有你希望变的就都会自动变了,有按照比例变,和按照位置变两种
http://www.codeproject.com/KB/wtl/wtldlgresize.aspx
强大的刚刚的
BloodFighter 2010-05-09
  • 打赏
  • 举报
回复
如果你又一张绘制的底图了,仅仅需要往前台贴,那么就简单了
每次绘制的时候,不要用bltbit,用strebltbit……,可能拼写有错误,就是缩放啦

如果你不想缩放,那么就要考虑界面对齐的问题,所有的界面元素(控件)定义一个对其规则,是左上,还是右上,还是居中等等,最好还是自己处理一下,这样子界面不变型,不花不模糊
向立天 2010-05-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 georgesoros 的回复:]
能举个例吗
[/Quote]
以下代码是我在窗口大小改变时调整控件位置的代码
你可以参考一下
void CAutoFitDlg::OnSize(UINT nType, int cx, int cy)
{
//计算窗口宽度和高度的改变量
int nIncrementX = cx - m_nWinWidth;
int nIncrementY = cy - m_nWinHeight;

INT_PTR nCount = m_listCtrlTag.GetSize();

for (int i=0; i<nCount; i++)
{
//获取变化控制系数
int nMoveXPercent = m_listCtrlTag[i]->m_nMoveXPercent;
int nMoveYPercent = m_listCtrlTag[i]->m_nMoveYPercent;
int nZoomXPercent = m_listCtrlTag[i]->m_nZoomXPercent;
int nZoomYPercent = m_listCtrlTag[i]->m_nZoomYPercent;

CWnd* pWndCtrl;
//获取控件指针
pWndCtrl = m_listCtrlTag[i]->m_pWnd;

if(IsWindow(pWndCtrl->GetSafeHwnd()))
{
int nLeft = m_listCtrlTag[i]->m_rectWnd.left;
int nTop = m_listCtrlTag[i]->m_rectWnd.top;
int nWidth = m_listCtrlTag[i]->m_rectWnd.Width();
int nHeight = m_listCtrlTag[i]->m_rectWnd.Height();

//设置新的位置参数
nLeft += (nIncrementX*nMoveXPercent/100);
nTop += (nIncrementY*nMoveYPercent/100);
nWidth += (nIncrementX*nZoomXPercent/100);
nHeight += (nIncrementY*nZoomYPercent/100);

// 把控件移动到新位置
pWndCtrl->MoveWindow(nLeft, nTop, nWidth, nHeight);
}
}

CDialog::OnSize(nType, cx, cy);
}
reddevillg 2010-05-09
  • 打赏
  • 举报
回复
不用确定的值设置位置,用与对话框的比例来设置。
GeorgeSoros 2010-05-09
  • 打赏
  • 举报
回复
能举个例吗
GeorgeSoros 2010-05-09
  • 打赏
  • 举报
回复
比例怎么算啊
Eleven 2010-05-09
  • 打赏
  • 举报
回复
自己计算比例,然后MoveWindow/SetWindowPos到正确位置上。。。
zqlong_sunday 2010-05-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chinazhangjie 的回复:]
当窗口改变时,会响应WM_SIZE消息,然后你根据前后窗口大小比例,改变矩形大小,重绘就行了。
[/Quote]

同意这么做
独酌逸醉 2010-05-09
  • 打赏
  • 举报
回复
当窗口改变时,会响应WM_SIZE消息,然后你根据前后窗口大小比例,改变矩形大小,重绘就行了。
yschenwei 2010-05-09
  • 打赏
  • 举报
回复
1.自己算。
2.如果是在控件上绘制的话建议使用EasySize
reddevillg 2010-05-09
  • 打赏
  • 举报
回复
自己计算~~

15,979

社区成员

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

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