2015-01-06 5 views
0

Windows 7/8 용 사용자 지정 셸을 만듭니다. 셸용 사용자 지정 트레이는 어떻게 만듭니 까? 트레이 창에 "Shell_TrayWnd"클래스 이름이 있다는 것을 알고 있습니다. 나는 그것을 독자적으로 창조하는 것을 시도하고 PostMessage를 사용하여 "TaskbarCreated"메시지를 배치했다 그러나 나는 나의 쟁반 WndProc에있는 "WM_COPYDATA"메시지를 얻고 있지 않다. 나는 뭔가를 놓치고있어? 도움이 필요하다. 다음과 같이사용자 지정 셸용 사용자 지정 시스템 트레이

코드는 다음과 같습니다

static LRESULT CALLBACK tray_proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    if (uMsg == WM_COPYDATA) 
    { 
     COPYDATASTRUCT *cpdata = (COPYDATASTRUCT*)lParam; 
    } 
    return DefWindowProc(hWnd, uMsg, wParam, lParam); 
} 

int init_tray(void) 
{ 
    WNDCLASS wc; 
    memset(&wc, 0, sizeof(wc)); 
    wc.lpfnWndProc = tray_proc; 
    wc.hInstance = GetModuleHandle(NULL); 
    wc.lpszClassName = TEXT("Shell_TrayWnd"); 

    if (!RegisterClass(&wc)) 
    { 
     return 0; 
    } 

tray_window = CreateWindowEx(
    WS_EX_TOOLWINDOW, 
    wc.lpszClassName, 
    NULL, 
    WS_POPUP, 
    0, 0, 0, 0, 
    NULL, NULL, 
    wc.hInstance, 
    NULL); 

if (!tray_window) 
    return 0; 

/* let running apps know that a new tray is around */ 
PostMessage(HWND_BROADCAST, RegisterWindowMessage(TEXT("TaskbarCreated")), 0, 0); 

return 1; 
} 
+1

'WM_COPYDATA'와 관련된 "TaskbarCreated"메시지를 어떻게 방송합니까? 어쩌면 고객 연락 담당자가 고객과 연락을 취해 진정한 의미의 질문을 제공해야합니다. 게시됨에 따라 전체적으로 많은 의미를 갖기 위해 컴파일되지 않습니다. – IInspectable

+0

다른 셸에서 트레이 윈도우를 만든 후 "TaskbarCreated"메시지가 브로드 캐스팅되었습니다. 이해가되지 않는다면, 나를 도와 주겠니? 내 목표는 사용자 정의 트레이를 얻는 것입니다. –

+0

올바른 용어로 시작하겠습니다. 그것은 쟁반으로 알려진 적이 없어요. 알림 영역입니다. –

답변

0

가 작동있어!

SendNotifyMessage(HWND_BROADCAST, RegisterWindowMessage("TaskbarCreated"), 0, 0); 

이 메시지는 중요합니다. 이 기능이 없으면 트레이 WndProc에서 데이터를 가져 오지 않습니다.