本文主要針對mfc的dialog,實現控制項隨視窗大小變化。
原理:首先獲取dialog的初始大小,當視窗傳送變動時,呼叫onsize事件和方法,計算縮放比例,然後對介面中的所有控制項進行縮放和布局。
實現:建立乙個cmfcdemodlg的dialog對話方塊;
//cmfcdemodlg 對話方塊
class cmfcdemodlg : public
cdialogex
;
protected
:
virtual
void dodataexchange(cdataexchange* pdx); //
ddx/ddv 支援
protected
: crect m_rect;
void changesize(uint nid,int x,int
y);
void resize(void
);
point old;
protected
:
//生成的訊息對映函式
virtual
bool oninitdialog();
afx_msg
void onsize(uint ntype, int cx, int
cy);
declare_message_map()
};
在oninitdialog方法中獲取dialog的初始大小,記錄到old變數中;
註冊onsize事件處理方法(on_wm_size(), onsize()函式),設定控制項大小
cmfcdemodlg::cmfcdemodlg(cwnd* pparent /*=null*/)
: cdialogex(cmfcdemodlg::idd, pparent)
void cmfcdemodlg::dodataexchange(cdataexchange*pdx)
begin_message_map(cmfcdemodlg, cdialogex)
on_wm_size()
end_message_map()
//cmfcdemodlg 訊息處理程式
bool cmfcdemodlg::oninitdialog()
void cmfcdemodlg::resize(void
) old=newp;
} void cmfcdemodlg::onsize(uint ntype, int cx, int
cy)}
通過hwndchild=::getwindow(m_hwnd,gw_child);和::getwindow(hwndchild, gw_hwndnext); 列出所有控制項
也可針對特定控制項設定其大小,如:
//change control size
void cmfcdemodlg::changesize(uint nid,int x,int
y)}
參考:
MFC小筆記 控制項隨視窗變化
當視窗大小變化時,如最大化 最小化時,控制項位置和大小並沒有變化,本文實現此功能。主介面為對話方塊,有最小化 最大化 關閉等功能。當視窗變化時,響應 onsize 函式,並計算各控制項位置,按比例縮放。在對話方塊類嚮導中新增 wm size 訊息。其函式定義如下 afx msg void onsiz...
控制項大小隨視窗變化的正確方法
一.在介紹這個方法之前先看下在網上見過一種方法 vc 之根據對話方塊大小調整控制項大小 1 在對話方塊類中加入成員變數crect m rect 用於儲存對話方塊大小變化前的大小 2 在對話方塊的oninitdialog 函式中獲取對話方塊建立時的大小 getclientrect m rect 3 在...
VC 之隨視窗變化調整控制項大小
總結步驟 1.建立乙個cwnd 的陣列,在初始化時取的各個控制項的控制代碼,存在這個陣列裡面 2.處理wm size事件,可以得到新變化後的視窗和最初視窗的變化比例kx,ky 3.對陣列中的每乙個控制項,計算新位置 4.movewindow移動到新位置 對話方塊或視類的大小調後,控制項的大小和位置沒...