大小调整框架





0/5 (0投票)
2001 年 10 月 16 日
1分钟阅读

58877

945
移植自 Paul DiLascia 的窗口大小调整框架。
引言
WTL 提供了构建大型图形用户界面的可能性,但它并不完全符合我的需求,所以我决定移植 Paul DiLascia 在 MSDN Magazine 2001年7月号 上发表的优秀框架“Windows UI: Our WinMgr Sample Makes Custom Window Sizing Simple”。要理解该框架的所有原理,请阅读原文。
移植过程几乎是直接的。我只是在对话框中添加了抓手。
用法
要使用该框架,首先需要将这些文件添加到您的项目中- WinMgr.h
- WinMgr.cpp
- WinRect.cpp
- SizeableDlg.h
CDialogSizeable
类继承,如下所示class CTestDlg : public CDialogSizeable<CTestDlg>, public CDialogImpl<CTestDlg>在
OnInitDialog()
事件处理程序中,添加以下代码作为第一行LRESULT CTestDlg::OnInitDialog( HWND hwnd, LPARAM lParam) { BOOL bRet = CDialogSizeable<CTestDlg>::OnInitDialog( hwnd, lParam ); ... }将以下宏添加到您的主消息映射中
BEGIN_MSG_MAP_EX(CTestDlg) ... MESSAGE_HANDLER_EX(WM_WINMGR, OnWinMgr) ... END_MSG_MAP()并将该方法添加到您的对话框类中(有关更多信息,请参阅原文)
/////////////////// // Handle WM_WINMGR: return min size for OK/Cancel buttons // LRESULT CTestDlg::OnWinMgr(UINT uMsg, WPARAM wp, LPARAM lp) { ATLASSERT(lp); NMWINMGR& nmw = *(NMWINMGR*)lp; if ( nmw.code == NMWINMGR::GET_SIZEINFO ) { if ( wp==IDOK || wp==IDCANCEL ) { nmw.sizeinfo.szMin = m_szMinButton; return TRUE; } } return 0; }在对话框类的 cpp 文件中构建窗口映射,例如:
BEGIN_WINDOW_MAP(TestDlgMap) BEGINROWS(WRCT_REST,0,RCMARGINS(8,8)) BEGINCOLS(WRCT_REST,0,0) BEGINROWS(WRCT_REST,4,RCMARGINS(-4,-4)) RCTOFIT(IDC_STATIC1) RCSPACE(-4) BEGINROWS(WRCT_TOFIT,IDC_GROUP1,RCMARGINS(-8,-8)) RCSPACE(-10) RCTOFIT(IDC_RADIO1) RCTOFIT(IDC_RADIO2) ENDGROUP() ENDGROUP() RCPERCENT(IDC_EDIT1,50) ENDGROUP() RCSPACE(-4) RCTOFIT(IDC_STATIC2) RCTOFIT(IDC_SLIDER1) BEGINCOLS(WRCT_TOFIT,0,0) RCREST(-1) BEGINROWS(WRCT_TOFIT,0,0) RCTOFIT(IDOK) RCSPACE(-2) RCTOFIT(IDCANCEL) ENDGROUP() ENDGROUP() ENDGROUP() END_WINDOW_MAP()最后,将以下代码添加到您的对话框构造函数中
CTestDlg::CTestDlg( ) : CDialogSizeable<CTestDlg>( TestDlgMap ) { ...现在,享受您的可调整大小的对话框吧。
遇到的问题
目前没有(;-)。历史
版本 1.00 | 2001年10月8日 将文章提交到 Codeproject 网站。 将文章添加到 Tech Head 网站。 |