使用自主視窗
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 範例。