This article replaces my former article "Dynamic child window positioning" (cdxCDynamicControlsManager
).
See the what's new section to find our whether it's worth changing your code.
What's this article about?
I'll introduce you to some of my code that has will make your windows support automatic repositioning of their child controls. I'll call such windows
dynamic (since they don't have a
static size and child control ordering but
dynamic ones):
|
=> |
|
What classes are part of this release?
cdxCDynamicWnd
, cdxCDynamicWndEx
General base class(es) used to implement dynamic child window repositioning in any CWnd
-derived class.
cdxCDynamicDialog
A CDialog
replacement that allows you to dynamically move your controls.
cdxCDynamicChildDlg
The same as a dialog base-class for child window dialogs.
cdxCDynamicFormView
A CFormView
, now supports the scrollbars, knows its own size perfectly and stuff!
cdxCDynamicPropSheet
, cdxCDynamicPropPage
The dynamic CPropertySheet
/ CPropertyPage
replacement.
cdxCDynamicBar
, cdxCDynamicBarDlg
and cdxCDynamicBarT<>
A controlbar with an embedded dialog that is dynamically moving its childs.
The bar itself is derived from the CSizingControlBar
published at CodeGuru.com by Cristi Posea.
- New and better code :)
This is why we can not simply replace a cdxCDynamicControlsManager
code into a cdxCDynamicWnd
code. :(
- Now works with
HWNDs
and IDs instead of CWnds
.
Therefore you don't need to explicitely create DDX control variables anymore. *
- Supports "dynamic maps" - as known from message map macros.
These maps map IDs to a resizable control. *
- Now uses
::DeferWindowPos()
instead of ::SetWindowPos()
to decrease flickering (for all classes). *
- Anti-Flickering system for
cdxCDynamicDialog
(looks much better!). *
- Supports scrolling in
CFormView
(and any other class, if you enable it by hand). *
- "Auto-Positioning" feature for dynamic dialogs & property pages. *
- Support for dialogs that are meant to be "child control dialogs" - if often embedd dialogs and this class helps to make your child controls remain in a suitable place :)
- A ControlBar solution.
* ~ Suggested by users of my cdxCDynamicControlsManager :)
However, since I rewrote much of the code of the cdxCDynamicControlsManager
, you cannot switch from that class to my new cdxCDynamicWnd
without further work to be done; converting a cdxCSizingDialog
into a cdxCDynamicDialog
would need help by you.
A documentation file is included in the sub-directory codex/doc/cdxCDynamicWnd-DOC.html
.
Any suggestions & bug-reports are welcome.