![]() |
Platforms, Frameworks & Libraries »
WTL »
General
Intermediate
Sizing FrameworkBy Laurent KempéPort of the window sizing framework from Paul DiLascia |
VC6, Windows, WTL, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
|||||||||||

The WTL possibilities to build sizeable graphical user interface exists but was not fitting my needs so I decided to port the excellent framework from Paul DiLascia 'Windows UI: Our WinMgr Sample Makes Custom Window Sizing Simple' published in the July 2001 issue of MSDN Magazine. To understand all the principle of the framework, please read the original article.
The port was almost straightforward. I just added the gripper to the dialog.
CDialogSizeable like this:
class CTestDlg : public CDialogSizeable<CTestDlg>, public CDialogImpl<CTestDlg>In the
OnInitDialog() event handler, add as first line the following:
LRESULT CTestDlg::OnInitDialog( HWND hwnd, LPARAM lParam)
{
BOOL bRet = CDialogSizeable<CTestDlg>::OnInitDialog( hwnd, lParam );
...
}
Add the following macro to your main message map:
BEGIN_MSG_MAP_EX(CTestDlg)
...
MESSAGE_HANDLER_EX(WM_WINMGR, OnWinMgr)
...
END_MSG_MAP()
And the the method to your dialog class (get more information on the original article):
/////////////////// // 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; }Build the Window map in the cpp file of your dialog class, i.e.:
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()Add finally the following to the constructor of your dialog:
CTestDlg::CTestDlg( ) :
CDialogSizeable<CTestDlg>( TestDlgMap )
{
...
Now enjoy your sizing dialog.
| Version 1.00 |
October 8, 2001
. Submitted the article to Codeproject web site. . Added the article on Tech Head web site. |
| You must Sign In to use this message board. | |||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads.
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 15 Oct 2001 Editor: Chris Maunder |
Copyright 2001 by Laurent Kempé Everything else Copyright © CodeProject, 1999-2010 Web17 | Advertise on the Code Project |