




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、般情況下,我們新建的對話框,里面的確定”和:取消”按鈕,在對話框最大化得時(shí)候,不會(huì)一起變大的,而是保持原來的大小。最簡單的情況:當(dāng)我們點(diǎn)擊最大化按鈕的時(shí)候,對話框會(huì)最大化,但是控件確定”和取消”不會(huì)跟著變大。 如果我們在對話框上面有多少控件, 那么會(huì)很丑,而且很不實(shí)用,最大化本來就是想看的更 清楚嘛。我們可以采取下面的措施:對話框也是窗口,最大化是對窗口大小的改變,而在win dowsmessage handle中有個(gè) WM_SIZE的消息,該消息在窗口大小發(fā)生變化的時(shí)候會(huì)產(chǎn)生。那么 我們可以根據(jù)這個(gè)消息,在窗口大小發(fā)生變化的時(shí)候,利用MoveWindow()函數(shù)來重新設(shè)置各個(gè)控件的大小。還是
2、以上面最簡單的情況為例子:1首先要知道對話框大小是否改變,改變了多少,我們應(yīng)該記錄當(dāng)前對話框的大小。在對話框類中添加成員變量 CRect m_rect 他是用來記錄當(dāng)前對話框的大小。我們在 OnInitDialog() 函數(shù)中獲取對話框創(chuàng)建時(shí)的大小: GetClientRect(&m_rect);2 增加消息 WM_SIZE 的消息響應(yīng)函數(shù) OnSize(): 只要對話框大小發(fā)生變化,就會(huì)調(diào)用該函 數(shù)。3在OnSize()函數(shù)中增加如下代碼:(最簡單的為例子,就一個(gè)確定按鈕和取消按鈕)void CTestDlg:OnSize(UINT nType, int cx, int cy)CDi
3、alog:OnSize(nType, cx, cy);/ TODO: Add your message handler code herefor (int i=1;i<=2;i+)/因?yàn)槭莾蓚€(gè)控件,所以這里用了循環(huán)CWnd *pWnd;pWnd = GetDlgltem(i);/獲取ID為i的空間的句柄,因?yàn)?確認(rèn)” ID為1,取消” D為2if(pWnd) /判斷是否為空,因?yàn)閷υ捒騽?chuàng)建時(shí)會(huì)調(diào)用此函數(shù),而當(dāng)時(shí)控件還未創(chuàng)建CRect rect;/獲取控件變化前的大小pWnd->GetWindowRect(&rect);ScreenToClient(&rect /將控
4、件大小轉(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.top=rect.top*cy/m_rect.Height();rect.bottom=rect.bottom*cy/m_rect.Height();pWnd->MoveWindow(rect);/ 設(shè)置控件大小GetClie ntRect(&m _rect); 將變化后的對話框大小設(shè)為舊大小然后運(yùn)行,當(dāng)對話
5、框最大化的時(shí)候,兩個(gè)按鈕也變大了。個(gè)為全屏圖太大,我只截取了右上角的部分)PS:其實(shí)這種方法實(shí)現(xiàn)起來簡單,但是是存在問題的,如果界面有很多控件,那個(gè)當(dāng)你拖拽窗口的角的時(shí)候, 經(jīng)過幾次變大變小, 你會(huì)發(fā)現(xiàn)其實(shí)里面的控件已經(jīng)失真了,就不是原來 的長寬比例了。 那么要實(shí)現(xiàn)不管窗口怎么變, 里面的控件不但大小跟著變, 而且大小比例也 跟著變,那就不是這個(gè) OnSize 函數(shù)那么簡單了,實(shí)現(xiàn)起來有點(diǎn)復(fù)雜。等我掌握了這個(gè)復(fù)雜 的方法,一定會(huì)拿來分享的。mfc 控件大小隨窗體改變而改變 如果對話框或視類的大小調(diào)后,控件的大小和位置沒有變化,界面看起來會(huì)很不爽 .控件是從 CWnd 派生的,但不能使用 Set
6、WindowPos() 或 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 *pWnd;pWnd = GetDlgItem(IDC_LIST); /獲取控件句柄if(pWn
7、d)/ 判斷是否為空,因?yàn)閷υ捒騽?chuàng)建時(shí)會(huì)調(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.top=rect.top*cy/m_rect.Height(); rec
8、t.bottom=rect.bottom*cy/m_rect.Height(); pWnd->MoveWindow(rect);/ 設(shè)置控件大小 GetClientRect(&m_rect);/ 將變化后的對話框大小設(shè)為舊大小如果是里面只有一兩個(gè)控件倒好辦,但控件太多的話這樣做是不是重復(fù)勞動(dòng)太多了?有沒有更好的辦法啊?視類中加成員函數(shù)和成員變量:void SetControlInfo(WORD CtrlId);protected:int m_old_cx,m_old_cy;CDWordArray m_control_info;構(gòu)造函數(shù)中初始化:m_old_cx = m_old_c
9、y = 0;加控件信息的函數(shù)定義:void CTestFormView:SetControlInfo(WORD CtrlId)m_control_info.Add(CtrlId);修改 OnSize 函數(shù):void CTestFormView:OnSize(UINT nType, int cx, int cy) if(cx=0 | cy=0)cx=800;cy=600;CFormView:OnSize(nType, cx, cy);(float)(float)cx/(float)m_old_cx);(float)(float)cy/(float)m_old_cfloatdx_percent=(
10、m_old_cx=0)?1floatdy_percent=(m_old_cy=0)?1y);if(m_old_cx)CRect WndRect;CWnd *pWnd;for(int i = 0; i < m_control_info.GetSize(); i+)pWnd = GetDlgItem(m_control_infoi); if(!pWnd)TRACE( "Control ID - %d NOT FOUND!n ",m_control_infoi);continue;pWnd-> GetWindowRect(&WndRect);ScreenToClient(&WndRect);WndRect.left = (int)(WndRect.left*dx_percent);WndRect.right = (int)(WndRect.right* dx_percent);WndRect.bottom = (int)(WndRect.bottom*dy_percent);WndRect.top = (
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新一代大學(xué)英語(第二版)綜合教程1-U3-教師用書 Unit 3 Culture Counts
- 家具制造業(yè)原材料價(jià)格波動(dòng)應(yīng)對2025年產(chǎn)業(yè)鏈整合策略報(bào)告
- 2025年醫(yī)藥流通企業(yè)供應(yīng)鏈優(yōu)化與成本控制創(chuàng)新策略報(bào)告
- 特色農(nóng)產(chǎn)品冷鏈物流中心建設(shè)對農(nóng)村經(jīng)濟(jì)發(fā)展的推動(dòng)作用報(bào)告
- 新能源商用車型號(hào)2025年市場需求與電動(dòng)物流車售后服務(wù)滿意度研究報(bào)告
- 磅房安全培訓(xùn)試題及答案
- 傳統(tǒng)食品工業(yè)化生產(chǎn)2025年智能檢測技術(shù)改造與創(chuàng)新案例報(bào)告
- 安全生產(chǎn)管理知識(shí)試題及答案
- 快時(shí)尚行業(yè)在2025年時(shí)尚零售市場中的品牌合作與跨界營銷報(bào)告
- 2025年土壤污染修復(fù)技術(shù)土壤修復(fù)藥劑市場發(fā)展趨勢報(bào)告
- 出師表標(biāo)準(zhǔn)注音版修正版
- 孤獨(dú)癥康復(fù)教育人員上崗培訓(xùn)練習(xí)題庫及答案
- 籃球比賽記錄表A4版
- 機(jī)械設(shè)備投入計(jì)劃及保證措施
- 小兒清熱止咳口服液產(chǎn)品知識(shí)-課件
- 工程項(xiàng)目成本預(yù)算表
- 鋼 筋 檢 查 記 錄 表(鋼筋加工及安裝)
- 附件9:未取得國外國籍的聲明
- 一般自我效能感量表(GSES)
- 新題型大綱樣題(考研英語一)
- Blue Planet Ⅱ《藍(lán)色星球2(2017)》第一季第一集完整中英文對照劇本
評論
0/150
提交評論