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的...