版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一一個基于對話框的MFC界面,怎么樣才能讓對話框里的控件能和對話框同比例變小變大?今天我一直想解決這個問題,這是師姐留給我的任務(wù)。經(jīng)過在網(wǎng)上的大量搜素,終于找到了解決方法,其實(shí)比較簡單。 一般情況下,我們新建的對話框,里面的“確定”和:取消”按鈕,在對話框最大化得時(shí)候,不會一起變大的,而是保持原來的大小。 最簡單的情況: 當(dāng)我們點(diǎn)擊最大化按鈕的時(shí)候,對話框會最大化,但是控件“確定”和“取消”不會跟著變大。如果我們在對話框上面有多少控件,那么會很丑,而且很不實(shí)用,最大化本來就是想看的更清楚嘛。
2、60; 我們可以采取下面的措施:對話框也是窗口,最大化是對窗口大小的改變,而在windows message handle中有個WM_SIZE的消息,該消息在窗口大小發(fā)生變化的時(shí)候會產(chǎn)生。那么我們可以根據(jù)這個消息,在窗口大小發(fā)生變化的時(shí)候,利用MoveWindow()函數(shù)來重新設(shè)置各個控件的大小。 還是以上面最簡單的情況為例子: 1 首先要知道對話框大小是否改變,改變了多少,我們應(yīng)該記錄當(dāng)前對話框的大小。 在對話框類中添加成員變量 CRect m_rect 他是用來記錄當(dāng)前對話框的大小。我們在OnIn
3、itDialog()函數(shù)中獲取對話框創(chuàng)建時(shí)的大?。篏etClientRect(&m_rect); 2 增加消息WM_SIZE的消息響應(yīng)函數(shù) OnSize():只要對話框大小發(fā)生變化,就會調(diào)用該函數(shù)。 3 在OnSize()函數(shù)中增加如下代碼:(最簡單的為例子,就一個確定按鈕和取消按鈕)來源:() - MFC:如何讓對話框中的控件和對話框一起變小變大_蕭蕭_新浪博客 void CTestDlg:OnSize(UINT nType, int cx, int cy) CDialog:OnSize(nType, cx, cy);
4、; / TODO: Add your message handler code here for (int i=1;i<=2;i+) /因?yàn)槭莾蓚€控件,所以這里用了循環(huán) CWnd *pWnd; pWnd = GetDlgItem(i); /獲取ID為i的空間的句柄,因?yàn)椤按_認(rèn)”ID為1,“取消”ID為2 if(pWnd) /判斷是否為空,因?yàn)閷υ捒騽?chuàng)建時(shí)會調(diào)用此函數(shù),而當(dāng)時(shí)控件還未創(chuàng)建
5、160; CRect rect; /獲取控件變化前的大小 pWnd->GetWindowRect(&rect); ScreenToClient(&rect/將控件大小轉(zhuǎn)換為在對話框中的區(qū)域坐標(biāo) /cx/m_rect.Width()為對話框在橫向的變化比例 rect.left=rect.left*cx/m_rect.Width();/調(diào)整控件大小 rect.right=rect.rig
6、ht*cx/m_rect.Width(); rect.top=rect.top*cy/m_rect.Height(); rect.bottom=rect.bottom*cy/m_rect.Height(); pWnd->MoveWindow(rect);/設(shè)置控件大小 GetClientRect(&m_rect);/ 將變化后的對話框大小設(shè)為舊大小 然后運(yùn)行 ,當(dāng)對話框最大化的時(shí)候,兩個按鈕也變大了。
7、0; (因?yàn)槿翀D太大,我只截取了右上角的部分) PS:其實(shí)這種方法實(shí)現(xiàn)起來簡單,但是是存在問題的,如果界面有很多控件,那個當(dāng)你拖拽窗口的角的時(shí)候,經(jīng)過幾次變大變小,你會發(fā)現(xiàn)其實(shí)里面的控件已經(jīng)失真了,就不是原來的長寬比例了。那么要實(shí)現(xiàn)不管窗口怎么變,里面的控件不但大小跟著變,而且大小比例也跟著變,那就不是這個OnSize函數(shù)那么簡單了,實(shí)現(xiàn)起來有點(diǎn)復(fù)雜。等我掌握了這個復(fù)雜的方法,一定會拿來分享的。二mfc 控件大小隨窗
8、體改變而改變 如果對話框或視類的大小調(diào)后,控件的大小和位置沒有變化,界面看起來會很不爽. 控件是從CWnd派生的,但不能使用SetWindowPos()或OnSize()或OnSizing()來改變其大小,應(yīng)在父窗口的WM_SIZE消息中使用MoveWindow()來進(jìn)行調(diào)整。VC+之根據(jù)對話框大小調(diào)整控件大小1、在對話框類中加入成員變量CRect m_rect;用于保存對話框大小變化前的大??;2、在對話框的OnInitDialog()函數(shù)中獲取對話框創(chuàng)建時(shí)的大小:GetClientRect(&m_rect);3、在WM_SIZE的響應(yīng)函數(shù)OnSize()中加入以下代碼:CWnd *p
9、Wnd;pWnd = GetDlgItem(IDC_LIST); /獲取控件句柄if(pWnd)/判斷是否為空,因?yàn)閷υ捒騽?chuàng)建時(shí)會調(diào)用此函數(shù),而當(dāng)時(shí)控件還未創(chuàng)建CRect rect; /獲取控件變化前大小pWnd->GetWindowRect(&rect);ScreenToClient(&rect);/將控件大小轉(zhuǎn)換為在對話框中的區(qū)域坐標(biāo)/cx/m_rect.Width()為對話框在橫向的變化比例rect.left=rect.left*cx/m_rect.Width();/調(diào)整控件大小rect.right=rect.right*cx/m_rect.Width();rect
10、.top=rect.top*cy/m_rect.Height();rect.bottom=rect.bottom*cy/m_rect.Height();pWnd->MoveWindow(rect);/設(shè)置控件大小GetClientRect(&m_rect);/將變化后的對話框大小設(shè)為舊大小三 如果是里面只有一兩個控件倒好辦,但控件太多的話這樣做是不是重復(fù)勞動太多了? 有沒有更好的辦法???視類中加成員函數(shù)和成員變量: void SetControlInfo(WORD CtrlId); pr
11、otected: int m_old_cx,m_old_cy; CDWordArray m_control_info; 構(gòu)造函數(shù)中初始化: m_old_cx = m_old_cy = 0; 加控件信息的函數(shù)定義: void CTestFormView:SetControlInfo(WORD
12、CtrlId) m_control_info.Add(CtrlId); 修改OnSize函數(shù): void CTestFormView:OnSize(UINT nType, int cx, int cy) if(cx=0 | cy=0)
13、 cx=800; cy=600; CFormView:OnSize(nType, cx, cy); float dx_percent = (m_old_cx =0)?
14、1 : (float)(float)cx/(float)m_old_cx); float dy_percent = (m_old_cy =0)? 1 : (float)(float)cy/(float)m_old_cy); if(m_old_cx)
15、 CRect WndRect; CWnd *pWnd; for(int i = 0; i < m_control_info.GetSize(); i+)
16、0; pWnd = GetDlgItem(m_control_infoi); if(!pWnd)
17、 TRACE( "Control ID - %d NOT FOUND!n ",m_control_infoi);
18、160; continue; pWnd-> GetWindowRect(&a
19、mp;WndRect); ScreenToClient(&WndRect); WndRect.left = (int)(WndRect.left*dx_percent); WndRect.right = (int)(WndRect.right* dx_percent); WndRect.bottom = (int)(W
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年互動廣告推廣合同
- 2025年醫(yī)藥制造擔(dān)保合同
- 2025年度個人寫字樓租賃合同協(xié)議書(商務(wù)洽談中心)
- 2025年河南洛陽市眾達(dá)人力資源管理服務(wù)有限公司招聘筆試參考題庫附帶答案詳解
- 2025年浙江臺州溫嶺市社會事業(yè)發(fā)展集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 2025年粵教新版八年級地理下冊月考試卷
- 2025年度個人二手房買賣合同樣本及貸款服務(wù)協(xié)議
- 個人應(yīng)急周轉(zhuǎn)借款合同(2024年版)
- 二零二五年度木材出口代理及貿(mào)易合同3篇
- 2025年華東師大版選修3歷史上冊月考試卷含答案
- 中鐵十四局合同范本
- 農(nóng)耕研學(xué)活動方案種小麥
- 七年級下冊-備戰(zhàn)2024年中考?xì)v史總復(fù)習(xí)核心考點(diǎn)與重難點(diǎn)練習(xí)(統(tǒng)部編版)
- 2024年佛山市勞動合同條例
- 污水管網(wǎng)規(guī)劃建設(shè)方案
- 城鎮(zhèn)智慧排水系統(tǒng)技術(shù)標(biāo)準(zhǔn)
- 采購管理制度及流程采購管理制度及流程
- 五年級美術(shù)下冊第9課《寫意蔬果》-優(yōu)秀課件4人教版
- 節(jié)能降耗課件
- 尼爾森數(shù)據(jù)市場分析報(bào)告
- 氧氣霧化吸入法
評論
0/150
提交評論