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

2022-07-24 19:21:07 字數 1621 閱讀 6867

本文主要針對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移動到新位置 對話方塊或視類的大小調後,控制項的大小和位置沒...