V
Vadik(R)
Добрый вечер, форумчане!
В общем, проблема в следующем. Была лабораторная работа по операционным системам, где было дано необязательно бонусное задание - свернуть консольное приложение в трей и развернуть его при клике по иконке. Вот свернуть окно в трей получилось почти без проблем. Проблема номер один - иконка в трее всегда прозрачная, какие бы параметры я не писал в функцию
Но это ещё не такая проблема, как с разворачиванием иконки. Почитав информацию на
Но тем не менее, при клике на иконку ничего не происходит Помогите, пожалуйста. Приложение должно быть именно консольное (можно QtConsoleApplication).
P.S. Видимо, я не первый студент, кто хотел сделать такой бонус, так как в интернете видел часто обсуждения этой проблемы, но тем не менее, нигде она полностью не решена
P.P.S. Хотя эта лабораторная работа уже и прошла, и баллов за неё не получить, мне чисто из своего интереса охота решить эту проблему :facepalm: Будущему курсу пригодится
В общем, проблема в следующем. Была лабораторная работа по операционным системам, где было дано необязательно бонусное задание - свернуть консольное приложение в трей и развернуть его при клике по иконке. Вот свернуть окно в трей получилось почти без проблем. Проблема номер один - иконка в трее всегда прозрачная, какие бы параметры я не писал в функцию
C++:
LoadIcon(GetModuleHandle(NULL), IDI_APPLICATION);
Ссылка скрыта от гостей
, у меня получился следующий код:
C++:
#include <iostream>
#include <locale>
#include <windows.h>
using namespace std;
HWND Window;
LRESULT CALLBACK MyWindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
printf("Вошли в обработчик сообщений!\r\n");
if ((uMsg == WM_USER) && (hWnd == Window) && (wParam == 0) && ((UINT)lParam == WM_LBUTTONDOWN))
{
printf("Ураа!!! Клик по иконке!!!\r\n");
}
return NULL;
}
int main()
{
int i;
NOTIFYICONDATA NIData;
WCHAR Title[128];
setlocale(LC_ALL, "Rus");
GetConsoleTitle(Title, sizeof(Title) / sizeof(Title[0]));
Window = FindWindow(NULL, Title);
//ShowWindow(Window, SW_HIDE);
NIData.cbSize = sizeof(NOTIFYICONDATA);
NIData.hWnd = Window;
NIData.uID = 0;
NIData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
NIData.uCallbackMessage = WM_USER;
NIData.hIcon = LoadIcon(GetModuleHandle(NULL), IDI_APPLICATION);
wcscpy(NIData.szTip, L"Тест иконки");
Shell_NotifyIcon(NIM_ADD, &NIData);
printf("Иконка создана.\r\n");
cin >> i;
Shell_NotifyIcon(NIM_DELETE, &NIData);
return 0;
}
P.S. Видимо, я не первый студент, кто хотел сделать такой бонус, так как в интернете видел часто обсуждения этой проблемы, но тем не менее, нигде она полностью не решена
P.P.S. Хотя эта лабораторная работа уже и прошла, и баллов за неё не получить, мне чисто из своего интереса охота решить эту проблему :facepalm: Будущему курсу пригодится