2014-09-16 11 views
0

WTL을 실험 중이며 큰 메시지 맵을 두 개 이상의 파일로 분리하고 싶습니다. 예를 들어 트레이 아이콘 논리를 별도의 파일로 이동하려고합니다. CHAIN_MSG_MAPCHAIN_MSG_MAP_MEMBER을 알고 있지만이 경우 어떻게 사용해야합니까?기본 메시지 맵 (BEGIN_MSG_MAP_EX)을 두 개의 파일로 분할

또한 어떻게 두 번째 클래스에서 창 핸들에 액세스 할 수 있습니까?

+0

코드를보고 나도 내가 성취하려고 시도하는 것이 가능할 지 확신하지 못합니다. 두 파일 (아마 두 개의 클래스)을 가질 수 있습니까? 둘 다'm_hWnd' 멤버가 같은 창을 참조합니까? – Paul

+0

가능합니다. 그러나 여전히 너무 광범위합니다. –

+0

글쎄, 예를 들어 트레이 아이콘을 가져 가라. 'WM_CREATE'에서'NOTIFYICONDATA'를 초기화하고,'Shell_NotifyIcon (NIM_ADD)'를 호출합니다. ' "TaskbarCreated"에, 나는 그것을 다시 만든다. 마우스 오른쪽 버튼을 클릭하면 메뉴가 표시됩니다. 모든 기능을 깨끗하게 별도의 파일로 옮길 수 있습니까? 나는 여분의 창 (너무 우아한 IMO가 아님)을 생성하여 작업을 해결 한이 클래스를 찾았습니다. http://www.naughter.com/ntray.html – Paul

답변

0

당신은 이와 같은 것을 찾고있을 수도 있습니다 (테스트되지 않았고, 나의 WTL은 녹슬었고주의해야합니다).

class TrayIconHandler : public CWindow, public CMessageMap { 
public: 
    BEGIN_MSG_MAP(TrayIconHandler) 
    // Message handlers to taste 
    END_MSG_MAP() 
}; 

class MainWindow : public CWindowImpl<MainWindow> { 
public: 
    BEGIN_MSG_MAP(MainWindow) 
    MESSAGE_HANDLER(WM_CREATE, OnCreate) 
    // Other message handlers 
    CHAIN_MSG_MAP_MEMBER(tray_icon_) 
    END_MSG_MAP() 

    LRESULT OnCreate(UINT, WPARAM, LPARAM, BOOL&) { 
    tray_icon_.m_hWnd = m_hWnd; 
    } 
private: 
    TrayIconHandler tray_icon_; 
}; 

물론 두 개의 클래스가 서로 다른 소스 파일 및/또는 헤더에있을 수 있습니다.