Всплывающая подсказка со значком уведомления не отображается, несмотря на правильную настройку szTip - PullRequest
1 голос
/ 26 февраля 2012

Я пытаюсь создать небольшую программу в системном трее с только контекстным меню в качестве графического интерфейса пользователя.

Однако я не могу заставить всплывающую подсказку работать.Я правильно настроил szTip NOTIFYICONDATA, и все остальное работает ... что мешает всплывающей подсказке отображаться при наведении мыши?

void main()
{
    int result;

    hinst = GetModuleHandle( NULL );

    memset( &wnd, 0, sizeof( wnd ) );
    wnd.cbSize = sizeof( wnd );
    wnd.lpszClassName = "MainWClass";
    wnd.lpfnWndProc = MainWProc;
    wnd.hInstance = hinst;
    result = RegisterClassEx( &wnd );

    hwnd = CreateWindowEx
        (
        0, //extended styles
        wnd.lpszClassName, //class name
        "Main Window", //window name
        WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL | WS_MINIMIZEBOX, //style tags
        CW_USEDEFAULT, //horizontal position
        CW_USEDEFAULT, //vertical position
        CW_USEDEFAULT, //width
        CW_USEDEFAULT, //height
        (HWND) NULL, //parent window
        (HMENU) NULL, //class menu
        (HINSTANCE) wnd.hInstance, //some HINSTANCE pointer
        NULL //Create Window Data?
        );

    nid.cbSize = sizeof( nid );
    nid.hWnd = hwnd;
    nid.uID = 1;
    nid.uVersion = NOTIFYICON_VERSION_4;
    nid.uCallbackMessage = WM_CONTEXTMENU;
    nid.hIcon = LoadIcon( hinst, MAKEINTRESOURCE( IDI_ICON1 ) );
    strcpy( nid.szTip, "My Tooltip!" );
    nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;

    if( ! Shell_NotifyIcon( NIM_ADD, &nid ) )
    {
        printf("Shell_NotifyIcon( NIM_ADD, &nid ) failed.\r\n");
        Sleep( INFINITE );
    }
    if( ! Shell_NotifyIcon( NIM_SETVERSION, &nid ) )
    {
        printf("Shell_NotifyIcon( NIM_SETVERSION, &nid ) failed.\r\n");
        Sleep( INFINITE );
    }

    UpdateWindow( hwnd );
    while( true )
    {
        //Dispatch for main window
        if( PeekMessage( &msg, hwnd, NULL, NULL, PM_REMOVE ) )
        {
            DispatchMessage( &msg );
        }
    }
}

1 Ответ

4 голосов
/ 26 февраля 2012

попробуйте добавить флаг NIF_SHOWTIP, в соответствии с MSDN , NOTIFYICON_VERSION_4 требует, чтобы всплывающая подсказка была отрисована пользователем.

...