資源描述:
《vc控件大小隨窗體改變》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、一??一般情況下,我們新建的對話框,里面的“確定”和:取消”按鈕,在對話框最大化得時(shí)候,不會(huì)一起變大的,而是保持原來的大小。??最簡單的情況:???當(dāng)我們點(diǎn)擊最大化按鈕的時(shí)候,對話框會(huì)最大化,但是控件“確定”和“取消”不會(huì)跟著變大。如果我們在對話框上面有多少控件,那么會(huì)很丑,而且很不實(shí)用,最大化本來就是想看的更清楚嘛。??我們可以采取下面的措施:對話框也是窗口,最大化是對窗口大小的改變,而在windowsmessagehandle中有個(gè)WM_SIZE的消息,該消息在窗口大小發(fā)生變化的時(shí)候會(huì)產(chǎn)生。那么
2、我們可以根據(jù)這個(gè)消息,在窗口大小發(fā)生變化的時(shí)候,利用MoveWindow()函數(shù)來重新設(shè)置各個(gè)控件的大小。??還是以上面最簡單的情況為例子:?1?首先要知道對話框大小是否改變,改變了多少,我們應(yīng)該記錄當(dāng)前對話框的大小。???在對話框類中添加成員變量CRectm_rect?他是用來記錄當(dāng)前對話框的大小。我們在OnInitDialog()函數(shù)中獲取對話框創(chuàng)建時(shí)的大?。篏etClientRect(&m_rect);?2增加消息WM_SIZE的消息響應(yīng)函數(shù)OnSize():只要對話框大小發(fā)生變化,就會(huì)調(diào)用該
3、函數(shù)。?3在OnSize()函數(shù)中增加如下代碼:(最簡單的為例子,就一個(gè)確定按鈕和取消按鈕)來源:(http://blog.sina.com.cn/s/blog_4b5039210100dzkd.html)-MFC:如何讓對話框中的控件和對話框一起變小變大_蕭蕭_新浪博客??voidCTestDlg::OnSize(UINTnType,intcx,intcy){?CDialog::OnSize(nType,cx,cy);??//TODO:Addyourmessagehandlercodehere?f
4、or(inti=1;i<=2;i++)?????//因?yàn)槭莾蓚€(gè)控件,所以這里用了循環(huán)?{?CWnd*pWnd;??pWnd=GetDlgItem(i);????//獲取ID為i的空間的句柄,因?yàn)椤按_認(rèn)”ID為1,“取消”ID為2?if(pWnd)?//判斷是否為空,因?yàn)閷υ捒騽?chuàng)建時(shí)會(huì)調(diào)用此函數(shù),而當(dāng)時(shí)控件還未創(chuàng)建?{??CRectrect;??//獲取控件變化前的大小????pWnd->GetWindowRect(&rect);??ScreenToClient(&rect//將控件大小轉(zhuǎn)換為在對話框
5、中的區(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è)置控件大小?}?}?G
6、etClientRect(&m_rect);//將變化后的對話框大小設(shè)為舊大小??}??然后運(yùn)行,當(dāng)對話框最大化的時(shí)候,兩個(gè)按鈕也變大了。????????????????(因?yàn)槿翀D太大,我只截取了右上角的部分)?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í)
7、現(xiàn)起來有點(diǎn)復(fù)雜。等我掌握了這個(gè)復(fù)雜的方法,一定會(huì)拿來分享的。二mfc控件大小隨窗體改變而改變 如果對話框或視類的大小調(diào)后,控件的大小和位置沒有變化,界面看起來會(huì)很不爽. 控件是從CWnd派生的,但不能使用SetWindowPos()或OnSize()或OnSizing()來改變其大小,應(yīng)在父窗口的WM_SIZE消息中使用MoveWindow()來進(jìn)行調(diào)整。 VC++之根據(jù)對話框大小調(diào)整控件大小 1、在對話框類中加入成員變量CRectm_rect;用于保存對話框大小變化前的大小; 2、在對話
8、框的OnInitDialog()函數(shù)中獲取對話框創(chuàng)建時(shí)的大?。骸 etClientRect(&m_rect); 3、在WM_SIZE的響應(yīng)函數(shù)OnSize()中加入以下代碼: CWnd*pWnd; pWnd=GetDlgItem(IDC_LIST); //獲取控件句柄 if(pWnd)//判斷是否為空,因?yàn)閷υ捒騽?chuàng)建時(shí)會(huì)調(diào)用此函數(shù),而當(dāng)時(shí)控件還未創(chuàng)建 { CRectrect; //獲取控件變化前大小 pWnd->GetWindowRect(&rect