Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите разобраться с tooltip(balloon)

26K
07 января 2008 года
† m@k$ †
18 / / 04.01.2008
Здравствуйте, вот отрывок кода с созданием и использованием тултипа в стиле balloon. Есть 2 вопроса. 1) В чем ошибка? (При нажатии на иконку в трее ничего не происходит (ни с левой клавишей, ни с правой))
2) Как сделать так, чтобы подсказка "выплывала" не сразу, а после нажатия например на кнопку "1".
Заранее спасибо за помощь!!!

Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static HINSTANCE hInst;
    HDC hDC;
    PAINTSTRUCT ps;
    RECT rc;
 NOTIFYICONDATA iconData;

switch(uMsg)
{

case WM_COMMAND:
   
    if (wParam == 1)//мои кнопки
    {
        MessageBox(hWnd,"Ну что ж, начнем...","",MB_OK);
    }
    if(wParam==2)
    {
        MessageBox(hWnd,"Закончили","",MB_OK);
    /////////
    }
    break;
case WM_USER+5:

if(lParam==WM_LBUTTONUP)
{
             ShowWindow(hWnd,SW_SHOW);
    ShowWindow(hWnd,SW_RESTORE);
    Shell_NotifyIcon(NIM_DELETE, &iconData);
}
if(lParam==WM_RBUTTONUP)
    PostQuitMessage(0);
break;
    case WM_PAINT:     
 
        hDC = BeginPaint(hWnd, &ps);
        //////////
       
        /////////
        EndPaint(hWnd, &ps);
        break;
case WM_CLOSE:

{
    iconData.cbSize           = sizeof(NOTIFYICONDATA);
    iconData.hWnd             = hWnd;
    iconData.uID              = 5;
    iconData.uFlags           = NIF_ICON |NIF_INFO ;
    iconData.uCallbackMessage     = WM_USER+5;
    iconData.hIcon            = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1));
    iconData.dwInfoFlags          = NIIF_WARNING;
    strcpy_s(iconData.szInfo,"† m@k$ †");
    strcpy_s(iconData.szInfoTitle,"Автор");

    Shell_NotifyIcon(NIM_ADD, &iconData);  
}

ShowWindow(hWnd,SW_MINIMIZE);
break;
397
08 января 2008 года
SergPas
527 / / 03.02.2007
Цитата:
iconData.uFlags = NIF_ICON |NIF_INFO ;


Забыли флаг NIF_MESSAGE для обработки сообщения WM_USER+5:

 
Код:
iconData.uFlags = NIF_ICON |NIF_INFO | NIF_MESSAGE;

А вот насчёт появления balloon'а по нажатию на кнопку дела обстоят намного сложнее. Вопрос: Какое приложение будет обрабатывать события клавиатуры? Ответ: Конечно же текущее Вопрос: А разве "наше" приложение является текущим? Ответ: Нет... не является...
Может на помощь придёт клавиатурный шпион? А может без него обойтись? Вас не устраивает, скажем обычный таймер?
26K
09 января 2008 года
† m@k$ †
18 / / 04.01.2008
За NIF_MESSAGE спасибо, действительно забыл
а вот насчет кнопки я не понял. Кнопка в окне моей программы. Что, оно не является текущим?
397
09 января 2008 года
SergPas
527 / / 03.02.2007
Цитата:

Как сделать так, чтобы подсказка "выплывала" не сразу, а после нажатия например на кнопку "1"


Я подумал, что Вы говорите о "кнопке" клавиатуры. На эту мысль меня навлекло название кнопки - "1"- такое же как и у клавиши "1" Тогда всё элементарно...
В самом начале Вы не указываете флаг NIF_INFO в поле uFlags структуры NOTIFYICONDATA:
[LEFT]

 
Код:
iconData.uFlags = NIF_ICON | NIF_MESSAGE;
[/LEFT]
Затем в обработчике сообщения WM_COMMAND добавляем флаг NIF_INFO в поле uFlags, ну к примеру так:
 
Код:
case WM_COMMAND:
switch(wParam)
{
case 100://идентификатор кнопки
tray.uFlags=tray.uFlags | NIF_INFO;
Shell_NotifyIcon(NIM_MODIFY, &tray);//обновляем
return 0;
}
return 0;

Теперь нажатие на кнопку приводит к отображению подсказки в виде balloon'а или tooltip'а
Вот и всё...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог