vc控件大小隨窗體改變

vc控件大小隨窗體改變

ID:34726801

大?。?0.18 KB

頁數(shù):7頁

時(shí)間:2019-03-10

vc控件大小隨窗體改變_第1頁
vc控件大小隨窗體改變_第2頁
vc控件大小隨窗體改變_第3頁
vc控件大小隨窗體改變_第4頁
vc控件大小隨窗體改變_第5頁
資源描述:

《vc控件大小隨窗體改變》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、一??一般情況下,我們新建的對(duì)話框,里面的“確定”和:取消”按鈕,在對(duì)話框最大化得時(shí)候,不會(huì)一起變大的,而是保持原來的大小。??最簡(jiǎn)單的情況:???當(dāng)我們點(diǎn)擊最大化按鈕的時(shí)候,對(duì)話框會(huì)最大化,但是控件“確定”和“取消”不會(huì)跟著變大。如果我們?cè)趯?duì)話框上面有多少控件,那么會(huì)很丑,而且很不實(shí)用,最大化本來就是想看的更清楚嘛。??我們可以采取下面的措施:對(duì)話框也是窗口,最大化是對(duì)窗口大小的改變,而在windowsmessagehandle中有個(gè)WM_SIZE的消息,該消息在窗口大小發(fā)生變化的時(shí)候會(huì)產(chǎn)生。那么

2、我們可以根據(jù)這個(gè)消息,在窗口大小發(fā)生變化的時(shí)候,利用MoveWindow()函數(shù)來重新設(shè)置各個(gè)控件的大小。??還是以上面最簡(jiǎn)單的情況為例子:?1?首先要知道對(duì)話框大小是否改變,改變了多少,我們應(yīng)該記錄當(dāng)前對(duì)話框的大小。???在對(duì)話框類中添加成員變量CRectm_rect?他是用來記錄當(dāng)前對(duì)話框的大小。我們?cè)贠nInitDialog()函數(shù)中獲取對(duì)話框創(chuàng)建時(shí)的大?。篏etClientRect(&m_rect);?2增加消息WM_SIZE的消息響應(yīng)函數(shù)OnSize():只要對(duì)話框大小發(fā)生變化,就會(huì)調(diào)用該

3、函數(shù)。?3在OnSize()函數(shù)中增加如下代碼:(最簡(jiǎn)單的為例子,就一個(gè)確定按鈕和取消按鈕)來源:(http://blog.sina.com.cn/s/blog_4b5039210100dzkd.html)-MFC:如何讓對(duì)話框中的控件和對(duì)話框一起變小變大_蕭蕭_新浪博客??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)閷?duì)話框創(chuàng)建時(shí)會(huì)調(diào)用此函數(shù),而當(dāng)時(shí)控件還未創(chuàng)建?{??CRectrect;??//獲取控件變化前的大小????pWnd->GetWindowRect(&rect);??ScreenToClient(&rect//將控件大小轉(zhuǎn)換為在對(duì)話框

5、中的區(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è)置控件大小?}?}?G

6、etClientRect(&m_rect);//將變化后的對(duì)話框大小設(shè)為舊大小??}??然后運(yùn)行,當(dāng)對(duì)話框最大化的時(shí)候,兩個(gè)按鈕也變大了。????????????????(因?yàn)槿翀D太大,我只截取了右上角的部分)?PS:其實(shí)這種方法實(shí)現(xiàn)起來簡(jiǎn)單,但是是存在問題的,如果界面有很多控件,那個(gè)當(dāng)你拖拽窗口的角的時(shí)候,經(jīng)過幾次變大變小,你會(huì)發(fā)現(xiàn)其實(shí)里面的控件已經(jīng)失真了,就不是原來的長(zhǎng)寬比例了。那么要實(shí)現(xiàn)不管窗口怎么變,里面的控件不但大小跟著變,而且大小比例也跟著變,那就不是這個(gè)OnSize函數(shù)那么簡(jiǎn)單了,實(shí)

7、現(xiàn)起來有點(diǎn)復(fù)雜。等我掌握了這個(gè)復(fù)雜的方法,一定會(huì)拿來分享的。二mfc控件大小隨窗體改變而改變  如果對(duì)話框或視類的大小調(diào)后,控件的大小和位置沒有變化,界面看起來會(huì)很不爽.  控件是從CWnd派生的,但不能使用SetWindowPos()或OnSize()或OnSizing()來改變其大小,應(yīng)在父窗口的WM_SIZE消息中使用MoveWindow()來進(jìn)行調(diào)整?! C++之根據(jù)對(duì)話框大小調(diào)整控件大小  1、在對(duì)話框類中加入成員變量CRectm_rect;用于保存對(duì)話框大小變化前的大??;  2、在對(duì)話

8、框的OnInitDialog()函數(shù)中獲取對(duì)話框創(chuàng)建時(shí)的大?。骸 etClientRect(&m_rect);  3、在WM_SIZE的響應(yīng)函數(shù)OnSize()中加入以下代碼:  CWnd*pWnd;  pWnd=GetDlgItem(IDC_LIST);  //獲取控件句柄  if(pWnd)//判斷是否為空,因?yàn)閷?duì)話框創(chuàng)建時(shí)會(huì)調(diào)用此函數(shù),而當(dāng)時(shí)控件還未創(chuàng)建  {  CRectrect; //獲取控件變化前大小  pWnd->GetWindowRect(&rect

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。