65.9K
CodeProject 正在变化。 阅读更多。
Home

自居中的 WTL 属性表

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.78/5 (6投票s)

2002年11月4日

viewsIcon

50007

downloadIcon

1196

一个可以自动居中 WTL 属性表的类。

引言

这是一个非常简单的类,可以自动居中 WTL 属性表。在各种 WTL 论坛中经常被问到的问题是“如何居中一个 CPropertySheet 对象?”。大多数人倾向于在属性表的第一个页面中添加一个 GetParent().CenterWindow() 调用,但在我看来,这有点笨拙。

相反,只需 #include "propertysheetex.h" 并将 CPropertySheetEx 作为标准 WTL CPropertySheet 类的直接替代品使用。

代码

该类的实际代码很简单

class CPropertySheetEx : public CPropertySheet
{
private:
    bool m_bCentered;
public:    
    CPropertySheetEx(WTL::_U_STRINGorID title = 
          (LPCTSTR)NULL, UINT uStartPage = 0, HWND hWndParent = NULL)
        : CPropertySheet(title, uStartPage, hWndParent), m_bCentered(false)
    {
    }
    
    BEGIN_MSG_MAP(CPropertySheetEx)
        MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow)
        CHAIN_MSG_MAP(CPropertySheet)
    END_MSG_MAP()

    LRESULT OnShowWindow(UINT /*uMsg*/, WPARAM wParam, 
          LPARAM /*lParam*/, BOOL& bHandled)
    {
        // Centre?
        if (wParam == TRUE)
            Center();
        // Ensure base-class gets this message
        bHandled = FALSE;
        return 0;
    }

    void Center(void)
    {
        // Only do this once
        if (!m_bCentered)
        {
            CenterWindow();
            m_bCentered = true;
        }
    }
};
© . All rights reserved.