Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.10.2011, 21:16   #1
Vadik(R)
Пользователь
 
Регистрация: 10.03.2008
Сообщений: 68
По умолчанию Работа С Треем В Консольном Приложении

Добрый вечер, форумчане!
В общем, проблема в следующем. Была лабораторная работа по операционным системам, где было дано необязательно бонусное задание - свернуть консольное приложение в трей и развернуть его при клике по иконке. Вот свернуть окно в трей получилось почти без проблем. Проблема номер один - иконка в трее всегда прозрачная, какие бы параметры я не писал в функцию
Код:
LoadIcon(GetModuleHandle(NULL), IDI_APPLICATION);
Но это ещё не такая проблема, как с разворачиванием иконки. Почитав информацию на этом сайте, у меня получился следующий код:
Код:
#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;
}
Но тем не менее, при клике на иконку ничего не происходит Помогите, пожалуйста. Приложение должно быть именно консольное (можно QtConsoleApplication).
P.S. Видимо, я не первый студент, кто хотел сделать такой бонус, так как в интернете видел часто обсуждения этой проблемы, но тем не менее, нигде она полностью не решена
P.P.S. Хотя эта лабораторная работа уже и прошла, и баллов за неё не получить, мне чисто из своего интереса охота решить эту проблему Будущему курсу пригодится
Vadik(R) вне форума Ответить с цитированием
Старый 13.10.2011, 21:35   #2
Vadik(R)
Пользователь
 
Регистрация: 10.03.2008
Сообщений: 68
По умолчанию

Проблему с изображением иконки частично решил:
Код:
LoadIcon(LoadLibrary(L"shell32.dll"), MAKEINTRESOURCE(3));
Правда, было бы супер загружать вообще собственную иконку
Vadik(R) вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PopupMenu в консольном приложении anger Общие вопросы Delphi 7 08.09.2011 13:56
Timer в консольном приложении Lauri Общие вопросы Delphi 8 05.04.2011 04:20
Графика в консольном приложении. Акунёк Общие вопросы C/C++ 11 19.03.2011 20:50
Вывод в консольном приложении Акунёк Общие вопросы C/C++ 6 16.02.2011 18:01
Русский текст в консольном приложении! XerSon Общие вопросы Delphi 4 21.12.2010 18:13