如何實現控制項隨對話方塊大小變化而自動調整大小和位置

2021-05-27 15:13:26 字數 2245 閱讀 5514

1. 處理對話方塊的wm_size,然後用movewindow或者setwindowpos來把對話方塊上面的控制項重新調整新位置和大小。

2. 基本的做法就是響應wm_size訊息,並按照視窗大小比例來調整控制項的位置和大小,控制項的大小最好設定成視窗的百分之幾,這樣的話,就可以根據視窗的大小隨時調整了。

3. 每次onsize 即可獲得乙個crect,然後根據這個crect來確定這些控制項的位置和大小,使用函式movewindow 或setwindowpos實現。

4. 1)通過下面兩個函式獲取的是顯示螢幕的大小【螢幕的解析度】(不包括工作列等區域):

int   nfullwidth=getsystemmetrics( sm_cxfullscreen );   //螢幕寬度  

int   nfullheight=getsystemmetrics( sm_cyfullscreen );  //螢幕高度

2)這兩個函式獲取的是真正螢幕的大小【螢幕的解析度】(包括工作列等區域):

int   cx   =   getsystemmetrics( sm_cxscreen );  

int   cy   =   getsystemmetrics( sm_cyscreen );

如:用前兩個函式獲取的大小可能是1024*687 ,而用下邊兩個獲取的就是1024*768。

5. 在onsize() 中呼叫: getclientrect()  和  getwindowrect() 函式可獲取視窗大小,但需注意得到的是裝置座標,如果需要畫圖什麼的還需要轉換成邏輯座標。

6. 字型大小隨視窗變化而自動變化,比如說始終使字的高度始終佔視窗的1/3。使用:

1). 在creat中將nheight設成視窗長度或者寬度的一定比值就行了 (最好在onsize函式中設定);

2). 使用 wm_fontchange 訊息。

總結步驟:

1.建立乙個cwnd*   的陣列,在初始化時取的各個控制項的控制代碼,存在這個陣列裡面  

2.處理wm_size事件,可以得到新變化後的視窗和最初視窗的變化比例kx,ky  

3.對陣列中的每乙個控制項,計算新位置  

4.movewindow移動到新位置

對話方塊或視類的大小調後,控制項的大小和位置沒有變化,介面看起來會很不爽。控制項是從cwnd派生的,但不能使用setwindowpos()或onsize()或onsizing()來改變其大小,應在父視窗的wm_size訊息中使用movewindow()來進行調整。**********=>>>>>>>

根據按鈕控制項id不同進行調整,響應wm_size

1. 先宣告乙個成員

crect m_rect; //用於儲存對話方塊大小變化前的大小

} 3. 自定義乙個函式,根據控制項id進行處理

void ctestdlg::changesize(uint nid, int x, int y)

} void ctestdlg::onsize(uint ntype, int cx, int cy) } 

vc對話方塊全屏顯示及相應控制項位置改變

一、簡單對話方塊全屏顯示方法

在oninitdialog()中任意加入:

1、modifystyle(ws_caption,0,0);   //如果不想去掉標題欄,去掉該句。

sendmessage(wm_syscommand,sc_maximize,0);

2、showwindow(sw_showmaximized);  

二、複雜一點的對話方塊全屏顯示方法,隨螢幕的分辯率而調節

void cmainframe::onfullscreen()    

三、對話方塊全屏及按鈕控制項移到相應位置

void c***dlg::onlbuttondown(uint nflags, cpoint point)    

四、設計狀態下指定對話方塊以全屏顯示

1、手工把它拽成比如1024×768, 然後alt+v   u

2、在*.rc檔案中修改,但是單位不一樣。

五、用movewindow或setwindowpos全屏對話方塊

1. 首先計算出客戶區的大小getclientrect();

2. 再計算出整個視窗的大小getwindowrect();

3. 然後再得到當前螢幕的大小getsystemmetrics();

4. 最後根據這三個資料進行換算,得到當客戶區為螢幕大小時視窗的位置和大小;

5. 計算完成後呼叫movewindow就可以了。

對話方塊控制項大小隨視窗的大小變化而變化

我們經常會發現當我們將視窗最大化時,裡面的控制項並沒有進行改變,接下來我就介紹一下此問題的解決辦法,我們其實一般的都會把視窗的最大化按鈕失效,是視窗不能進行最大化操作,但是有時候我們還是需要對視窗進行最大化操作的,下面我們可以通過新增wm size訊息來解決此問題。1 在xxdlg.h中新增 afx...

MFC中控制項大小隨對話方塊大小動態變化

首先在 dlg.h標頭檔案中定義 cpp view plain copy print?crect m rectmin 用於儲存初始化對話方塊的大小 crect button1rectinit 用於儲存初始化控制項的大小 crect m rectmin 用於儲存初始化對話方塊的大小 crect but...

MFC對話方塊內控制項大小隨著對話方塊大小變化

1 首先要知道對話方塊大小是否改變,改變了多少,我們應該記錄當前對話方塊的大小。在對話方塊類中新增成員變數 crect m rect 他是用來記錄當前對話方塊的大小。我們在oninitdialog 函式中獲取對話方塊建立時的大小 getclientrect m rect 2 增加訊息wm size的...