Introduction
Even thought this implementation seems to be a port of the MFC Rollup Control by Johann Nadalutti, I started to develop it some days before the first post of the above-mentioned article. Nevertheless, I need to thank Johann Nadalutti for his great work that gave me the opportunity to improve my implementation.
This implementation consists of two classes: CRolldownCtrl<TChild>
implements the actual Rolldown control while CRolldownContainer
implements a manager, which provides the visual area for the Rolldown controls.
The class definitions and implementations are in the file AtlRolldownCtrl.h
, which are included in the demo project.
Requirements
You will require the WTL Libraries; these can be downloaded from the Microsoft site. If the WTL Libraries have no meaning to you, see Introduction to WTL - Part 1.
How to use the control in your WTL App
To use this control in your application, add the header file AtlRolldownCtrl.h
to your project and then add CRolloutContainer m_RolloutContainer;
to the class definition that will be using the control.
- Create a dialog box in the resource editor with the
WS_CHILD
style and its WTL dialog class as usual (e.g.CDlg1
).
Note: TrapIDOK
andIDCANCEL
else the dialog will be destroyed if the user presses either RETURN or ESC. - Add
CRolloutCtrl<CDlg1> m_dlg1;
to the class declaration that will be using the control. - Create the control in the
OnCreate
function and add it to the container, e.g.:m_dlg1.Create(m_RolloutContainer.m_hWnd, _T("My Rollout Control")); m_RolloutContainer.AddRollout(m_dlg1);
Repeat these steps for additional Rolldown controls.
The final OnCreate
function may look like this:
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { ... m_RolloutContainer.Create(m_hWnd); ... m_dlg1.Create(m_RolloutContainer.m_hWnd, _T("Rollout Control 1")); m_RolloutContainer.AddRollout(m_dlg1); m_dlg2.Create(m_RolloutContainer.m_hWnd, _T("Rollout Control 2")); m_RolloutContainer.AddRollout(m_dlg2); m_dlg3.Create(m_RolloutContainer.m_hWnd, _T("Rollout Control 3")); m_RolloutContainer.AddRollout(m_dlg3); ... }
CRolloutCtrl
User Methods:
Creation
HWND Create(HWND hWndParent, LPCTSTR szWindowName, _U_RECT rect = NULL, DWORD dwStyle = 0, DWORD dwExStyle = 0, DWORD dwExRcStyle = 0, UINT nID = 0U, LPVOID lpCreateParam = NULL); BOOL SubclassWindow(HWND hWnd);
Attributes
bool IsExpanded();
Returns true
if the control is expanded or false
otherwise.
Operations
void GetRect(bool fExpanded, RECT* pRect);
Returns the bounding rectangle of the expanded (fExpanded = true
) or collapsed (fExpanded = false
) control.
void Expand(bool fExpand = true); void ToggleExpandCollapse();
Expands (fExpand = true
) or collapses (fExpand = false
) the control.
CRolloutContainer
User Methods:
Creation
HWND Create(HWND hWndParent, LPCTSTR lpstrTitle = NULL, DWORD dwStyle = 0, DWORD dwExStyle = 0, UINT nID = 0, LPVOID lpCreateParam = NULL); HWND Create(HWND hWndParent, UINT uTitleID, DWORD dwStyle = 0, DWORD dwExStyle = 0, UINT nID = 0, LPVOID lpCreateParam = NULL);
Operations
void GetClientSize(SIZE* pClientSize);
Returns the size the container needs to display all Rolldown controls.
int GetSpacing(); void SetSpacing(int nSpacing);
Gets and sets the inter Rolldown spacing.
int AddRollout(HWND hWndRollout);
Adds a Rolldown control to the container. If the return value is greater than or equal to 0, it is the zero-based index to the Rolldown control in the container. The return value is -1 if an error occurs.
bool RemoveRollout(HWND hWndRollout); bool RemoveRollout(int nIndex); bool RemoveAllRollouts();
Removes one or all Rolldown controls from the container.
int GetRolloutCount();
Retrieves the count of contained Rolldown controls.
HWND GetRollout(int nIndex);
Retrieves the window handle of a Rolldown control.
void ExpandRollout(HWND hWndRollout, bool fExpand = true, bool fUpdate = true); void ExpandRollout(int nIndex, bool fExpand = true, bool fUpdate = true); void ExpandAllRollouts(bool fExpand = true);
Expands (fExpand = true
) or collapses (fExpand = false
) one or all Rollout controls. If fUpdate
is set to true
, the layout will be recalculated.
bool IsRolloutExpanded(HWND hWndRollout); bool IsRolloutExpanded(int nIndex);
Returns true
if the control is expanded or false
otherwise.
void RolloutEnabled(HWND hWndRollout, bool fEnable); void RolloutEnabled(int nIndex, bool fEnable);
Enables (fEnable = true
) or disables (fEnable = false
) the specified rollout control.
bool IsRolloutEnabled(HWND hWndRollout); bool IsRolloutEnabled(int nIndex);
Returns true
if the control is enabled or false
otherwise.
void ScrollToRollout(HWND hWndRollout); void ScrollToRollout(int nIndex);
Scrolls the specified Rolldown control into view.
标签:Control,control,true,HWND,void,bool,Rolldown,WTL From: https://www.cnblogs.com/qzxff/p/16978760.html