欢迎来到山村网

MFC控件大小随窗体大小而改变

2019-03-02 14:19:07浏览:956 来源:山村网   
核心摘要:  本文给大家分享的是使用VC++根据对话框大小调整控件大小的方法和示例代码,有需要的小伙伴可以参考下。  一。大小和位置都

  本文给大家分享的是使用VC++根据对话框大小调整控件大小的方法和示例代码,有需要的小伙伴可以参考下。

  一。大小和位置都改变

  1.首先为窗体类添加CRect m_rect,该成员变量用来记录窗体的当前大小。

  2.在类向导里面(Ctrl+W),为窗体添加消息WM_SIZE的响应函数onSize();

  注意if(nType==1) return;这一句必须添加,否则最小化恢复的时候会出错。

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 void CPaperManagementDlg::onSize(UINT nType, int cx, int cy) { CDialog::onSize(nType, cx, cy); if(nType==1) return;//最小化则什么都不做 // TODO: Add your message handler code here CWnd *pWnd; pWnd = GetDlgItem(IDC_STATIC); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_FILE_TREE); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_EDIT_NAME); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_EDIT_REFERENCE); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_EDIT_SUMMARY); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_EDIT_REMARK); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_BUTTON_UPDATE); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_BUTTON_SAVE); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_STATIC_1); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_STATIC_2); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_STATIC_3); ChangeSize(pWnd, cx, cy); pWnd = GetDlgItem(IDC_STATIC_4); ChangeSize(pWnd, cx, cy); GetClientRect(&m_rect);// 将变化后的对话框大小设为旧大小 }

  其中函数ChangeSize是手动添加的用户函数,步骤如下

  3.添加一个改变控件大小的用户函数,void ChangeSize(CWnd *pWnd, int cx, int cy),并编写代码

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 void CPaperManagementDlg::ChangeSize(CWnd *pWnd, int cx, int cy) { if(pWnd) //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建 { CRect rect; //获取控件变化前的大小 pWnd->GetWindowRect(&rect); ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标 // cx/m_rect.Width()为对话框在横向的变化比例 rect.left=rect.left*cx/m_rect.Width();//调整控件大小 rect.right=rect.right*cx/m_rect.Width(); rect.top=rect.top*cy/m_rect.Height(); rect.bottom=rect.bottom*cy/m_rect.Height(); pWnd->MoveWindow(rect);//设置控件大小 } }

  真正改变控件大小的函数是ChangeSize函数,在OnSize中不断调用ChangeSize函数从而改变窗体中所有控件的大小。

  ——————————————————————————————————————————————————————

  以下内容来自网络:

  二、 VC++之根据对话框大小仅调整控件位置

  1、在对话框类中加入成员变量CRect m_rect;用于保存对话框大小变化前的大小;

  2、在对话框的onInitDialog()函数中获取对话框创建时的大小:

  GetClientRect(&m_rect);

  3、在WM_SIZE的响应函数onSize()中加入以下代码:

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CWnd *pWnd; pWnd = GetDlgItem(IDC_BUTTON1); //获取控件句柄 if(nType==1) return; //如果是窗体最小化则什么都不做 if(pWnd)//判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建 { CRect rect; //获取控件变化前大小 LONG cWidth,cHeight; //记录控件的右部到窗体右部的距离,记录控件的底部到窗体底部的距离 pWnd->GetWindowRect(&rect); ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标 cWidth=m_rect.Width()-rect.right; cHeight=m_rect.Height()-rect.bottom; rect.left=cx-rect.Width()-cWidth; rect.right=cx-cWidth; rect.top=cy-rect.Height()-cHeight; rect.bottom=cy-cHeight; pWnd->MoveWindow(rect);//设置控件大小 } GetClientRect(&m_rect);//将变化后的对话框大小设为旧大小

  以上所述就是本文的全部内容了,希望大家能够喜欢。

(责任编辑:豆豆)
下一篇:

JMagick实现基本图像处理的类实例

上一篇:

django接入新浪微博OAuth的方法

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com