国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

MFC控件大小隨窗體大小而改變

2020-01-26 15:05:20
字體:
來源:轉載
供稿:網友

一。大小和位置都改變

1.首先為窗體類添加CRect m_rect,該成員變量用來記錄窗體的當前大小。

2.在類向導里面(Ctrl+W),為窗體添加消息WM_SIZE的響應函數OnSize();

注意if(nType==1) return;這一句必須添加,否則最小化恢復的時候會出錯。

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),并編寫代碼

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()中加入以下代碼:

  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);//將變化后的對話框大小設為舊大小

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 静宁县| 大丰市| 易门县| 迭部县| 土默特左旗| 余庆县| 盐池县| 姚安县| 五华县| 拜城县| 彰化县| 讷河市| 许昌县| 怀集县| 南丹县| 仁寿县| 三亚市| 泗水县| 藁城市| 礼泉县| 天台县| 明水县| 贵南县| 株洲县| 沽源县| 浏阳市| 南投市| 哈巴河县| 武城县| 监利县| 和静县| 教育| 大余县| 灵丘县| 上饶市| 原阳县| 东乌珠穆沁旗| 仁寿县| 吉林省| 普格县| 定南县|