MFC 視窗的縮放及控制項隨拖動改變大小

2021-06-08 11:11:36 字數 1240 閱讀 3281

首先乙個視窗是否可以拖動改變大小決定於border的屬性

當border為resizing是視窗可以拖動改變大小

其它屬性時則不可以

視窗中控制項是否隨著視窗大小改變而改變需要用的onsize函式。

新增wm_size訊息:

對onsize函式新增**

void c控制項隨拖動改變大小dlg::onsize(uint ntype, int cx, int cy)

idc_list1是乙個listbox

關於getsafehwnd()函式解釋:

當我們想得到乙個視窗物件(cwnd的派生物件)指標的控制代碼(hwnd)時,最安全的方法是使用getsafehwnd()函式,通過下面的例子來看其理由:

cwnd *pwnd = findwindow(「explorewclass」,null); //希望找到資源管理器

hwnd hwnd = pwnd->m_hwnd; //得到它的hwnd

這樣的**當開始得到的pwnd為空的時候就會出現乙個「general protection error」,並關閉應用程式,因為一般不能對乙個null指標訪問其成員,如果用下面的**:

cwnd *pwnd = findwindow(「explorewclass」,null); //希望找到資源管理器

hwnd hwnd = pwnd->getsafehwnd(); //得到它的hwnd

就不會出現問題,因為儘管當pwnd是null時,getsafehwnd仍然可以用,只是返回null,通過getsafehwnd()的實現**就更清楚了。

這樣執行後:

listbox的大小隨視窗大小而改變

而沒有onsize函式時:

執行效果是這樣:

MFC控制項隨視窗大小變化原理及實現

本文主要針對mfc的dialog,實現控制項隨視窗大小變化。原理 首先獲取dialog的初始大小,當視窗傳送變動時,呼叫onsize事件和方法,計算縮放比例,然後對介面中的所有控制項進行縮放和布局。實現 建立乙個cmfcdemodlg的dialog對話方塊 cmfcdemodlg 對話方塊 clas...

Winform控制項隨視窗等比例縮放

在建立winform視窗時,常常控制項不能隨視窗正確比例縮放。執行窗體如下 最大化後窗體 縮小後窗體 實現方法如下 在form1視窗下新增乙個panel工具,在父容器中停靠 然後在panel容器中放置我們需要的工具 新建乙個 nform 窗體類,繼承預設窗體類 form 而原來的 form1 for...

MFC小筆記 控制項隨視窗變化

當視窗大小變化時,如最大化 最小化時,控制項位置和大小並沒有變化,本文實現此功能。主介面為對話方塊,有最小化 最大化 關閉等功能。當視窗變化時,響應 onsize 函式,並計算各控制項位置,按比例縮放。在對話方塊類嚮導中新增 wm size 訊息。其函式定義如下 afx msg void onsiz...