注意
Active Template Library(ATL)將持續獲得支援。 不過,我們不再新增功能或更新文件。
ATL 使用 CContainedWindowT 實作包含式視窗。 被包含的視窗代表將訊息委派給容器物件的視窗,而不是在自己的類別中處理訊息。
注意
您不需要從 CContainedWindowT 衍生類別,即可使用自主視窗。
透過封裝的視窗,您可以將現有的 Windows 類別設為超類別,或將現有的視窗設為子類別。 若要建立將現有 Windows 類別超類別化的視窗,請先在 物件的建構函式 CContainedWindowT 中指定現有的類別名稱。 然後呼叫 CContainedWindowT::Create。 若要將現有的視窗子類別化,您不需要指定 Windows 類別名稱(將 NULL 傳遞至建構函式)。 只需使用視窗的句柄來呼叫 CContainedWindowT::SubclassWindow 方法以進行子類別化。
您通常會使用嵌入視窗作為容器類別的數據成員。 容器不需要是視窗;不過,它必須衍生自 CMessageMap。
內嵌視窗可以使用替代訊息對應來處理其訊息。 如果您有一個以上的內含視窗,您應該宣告數個替代的訊息對應表,每個對應至個別的內含視窗。
範例
以下是具有兩個自主視窗的容器類別範例:
class CMyContainer : public CMessageMap
{
public:
CContainedWindow m_wndEdit;
CContainedWindow m_wndList;
CMyContainer() : m_wndEdit(_T("Edit"), this, 1),
m_wndList(_T("List"), this, 2)
{
}
BEGIN_MSG_MAP(CMyContainer)
ALT_MSG_MAP(1)
// handlers for the Edit window go here
ALT_MSG_MAP(2)
// handlers for the List window go here
END_MSG_MAP()
};
如需嵌入式視窗的詳細資訊,請參閱 SUBEDIT 範例。