首页 > 学院 > 开发设计 > 正文

MFC 控件随窗口大小变化

2019-11-08 02:05:33
字体:
来源:转载
供稿:网友

首先放一下参考的链接。。

http://blog.sina.com.cn/s/blog_4b5039210100dzkd.html

http://bbs.csdn.NET/topics/350153879

http://blog.csdn.Net/liuy_yy/article/details/7219616

以上第一篇文章博主的方法虽然可以实现控件按比例跟随窗口变大变小,但问题来了。。

button控件我们不需要他变大啊(变大要丑死),而编辑框控件(Edit Control)到边角的距离应该保持不变。

所以必须换一种方法。。

第二篇文章是一个帖子,里面说到可以用MoveWindow/SetWindowPos自己调整按钮的位置或者大小。

操作方式类似于第一篇文章博主的做法

 1   首先要知道对话框大小是否改变,改变了多少,我们应该记录当前对话框的大小。

      现在Dlg上面拖进来一个Edit  Control  ,命名为IDC_EDIT1。

     在CTestDlg对话框类(根据工程名的不同,读者自己找自己的对话框类,一般以Dlg结尾)中添加成员变量 CRect m_rect 他是用来记录当前对话框的大小。

      我们在OnInitDialog()函数中获取对话框创建时的大小:GetClientRect(&m_rect);

 2   增加消息WM_SIZE的消息响应函数OnSize(): 只要对话框大小发生变化,就会调用该函数。

      PS:  消息响应函数的添加方法可参考文章末尾

 3   在OnSize()函数中增加如下代码:(最简单的为例子,就一个确定按钮,取消按钮和一个编辑框)

 

 void CTestDlg::OnSize(UINT nType, int cx, intcy){     CDialog::OnSize(nType, cx, cy);      // TODO: Add your message handler code here 

      CWnd *pWnd;       pWnd =GetDlgItem(IDC_EDIT1);    //获取控件的句柄     if(pWnd)  //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建     {              CRectrect;   //获取控件变化前的大小  

              pWnd->GetWindowRect(&rect);              ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标              //        cx/m_rect.Width()为对话框在横向的变化比例            

               rect.left=rect.left;//调整控件大小               rect.right=         cy  -  ( m_rect.Width() -  rect.right  ) ;               rect.top=rect.top;               rect.bottom=    cy   -   (  m_rect.Height() - rect.bottom   ) ;

               pWnd->MoveWindow(rect);//设置控件大小

        }         GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小 }

归根结底的思路就是:用旧的坐标,通过数学计算得到新的坐标。

上面那个示例的运行结果,确定取消按钮是不会动的。。

如果想要让他们也动,需要重新修改坐标那块的代码。

累。。。

老师告诉我们,如果有一个功能实现不了,那肯定是你不知道,不是人家实现不了。

肯定会有更简单的方法。。

于是找到了这个东西   easysize

使用方法很简单。

1、在stdafx.h中引用EasySize.h头文件(同时将EasySize.h放到你的程序目录中)

 

2、在类定义中添加DECLARE_EASYSIZE

[html] view plain copyPRint?<pre name="code" class="html">class CEasySizeDemoDlg : public CDialog  {       DECLARE_EASYSIZE    //(此处没有分号)       ``````  };  
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表