首页 > 其他分享 >WTL Rolldown Control

WTL Rolldown Control

时间:2022-12-13 14:57:20浏览次数:65  
标签:Control control true HWND void bool Rolldown WTL

 

Sample Image - WtlRolldownCtrl.gif

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.

  1. Create a dialog box in the resource editor with the WS_CHILD style and its WTL dialog class as usual (e.g. CDlg1).
    Note: Trap IDOK and IDCANCEL else the dialog will be destroyed if the user presses either RETURN or ESC.
  2. Add CRolloutCtrl<CDlg1> m_dlg1; to the class declaration that will be using the control.
  3. 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

相关文章