a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > C > 正文

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

2020-01-26 15:05:20
字體:
供稿:網(wǎng)友

一。大小和位置都改變

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

2.在類向?qū)Ю锩妫–trl+W),為窗體添加消息WM_SIZE的響應(yīng)函數(shù)OnSize();

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

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

其中函數(shù)ChangeSize是手動(dòng)添加的用戶函數(shù),步驟如下

3.添加一個(gè)改變控件大小的用戶函數(shù),void ChangeSize(CWnd *pWnd, int cx, int cy),并編寫代碼

void CPaperManagementDlg::ChangeSize(CWnd *pWnd, int cx, int cy) {   if(pWnd) //判斷是否為空,因?yàn)閷?duì)話框創(chuàng)建時(shí)會(huì)調(diào)用此函數(shù),而當(dāng)時(shí)控件還未創(chuàng)建    {     CRect rect;  //獲取控件變化前的大小      pWnd->GetWindowRect(&rect);     ScreenToClient(&rect);//將控件大小轉(zhuǎn)換為在對(duì)話框中的區(qū)域坐標(biāo)       //  cx/m_rect.Width()為對(duì)話框在橫向的變化比例     rect.left=rect.left*cx/m_rect.Width();//調(diào)整控件大小     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);//設(shè)置控件大小   } } 

真正改變控件大小的函數(shù)是ChangeSize函數(shù),在OnSize中不斷調(diào)用ChangeSize函數(shù)從而改變窗體中所有控件的大小。

――――――――――――――――――――――――――――――――――――――――――――――――――――――

以下內(nèi)容來自網(wǎng)絡(luò):

二、 VC++之根據(jù)對(duì)話框大小僅調(diào)整控件位置

    1、在對(duì)話框類中加入成員變量CRect m_rect;用于保存對(duì)話框大小變化前的大小;
    2、在對(duì)話框的OnInitDialog()函數(shù)中獲取對(duì)話框創(chuàng)建時(shí)的大小:
    GetClientRect(&m_rect);
    3、在WM_SIZE的響應(yīng)函數(shù)OnSize()中加入以下代碼:

  CWnd *pWnd;   pWnd = GetDlgItem(IDC_BUTTON1);   //獲取控件句柄  if(nType==1) return;  //如果是窗體最小化則什么都不做  if(pWnd)//判斷是否為空,因?yàn)閷?duì)話框創(chuàng)建時(shí)會(huì)調(diào)用此函數(shù),而當(dāng)時(shí)控件還未創(chuàng)建  {   CRect rect;  //獲取控件變化前大小   LONG cWidth,cHeight; //記錄控件的右部到窗體右部的距離,記錄控件的底部到窗體底部的距離   pWnd->GetWindowRect(&rect);   ScreenToClient(&rect);//將控件大小轉(zhuǎn)換為在對(duì)話框中的區(qū)域坐標(biāo)   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);//設(shè)置控件大小  }  GetClientRect(&m_rect);//將變化后的對(duì)話框大小設(shè)為舊大小

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 午夜a级理论片915影院 | 可以免费看的av | 亚洲无吗天堂 | 欧美精品一区二区在线观看 | 日本在线观看 | 欧美淫视频 | 久久999 | 91天堂在线观看 | 九九热这里只有精 | 日韩精品1区2区 | 欧美成人第一页 | 91亚洲国产成人久久精品网站 | 香蕉在线影院 | 色九九九| 国产欧美精品一区二区 | 欧美日韩精品一区 | 伊人激情影院 | 亚洲精品乱码久久久久久蜜桃不卡 | 成人黄色精品 | 精品毛片| 亚洲欧美国产毛片在线 | 亚洲污视频| 国产一区亚洲 | 最新中文字幕在线观看 | 99这里只有精品 | 最新国产精品 | 亚洲精品一区二三区不卡 | 久久99国产精品久久99大师 | 中文字幕在线免费视频 | 欧美婷婷| av在线播放观看 | 亚洲精品日韩av | 中文字幕一区二区三 | 久久国产成人 | 久久av影视 | 91精品国产综合久久国产大片 | 欧美同性大尺度腐剧 | 91爱啪啪| 欧美成年黄网站色视频 | 亚洲精品电影 | 日本高清视频网站 |