2013-01-16 86 views
2

我寫了一個小應用程序,它在後臺執行一些操作。C++ MFC如何發送應用程序到托盤

因爲它不需要用戶注意,我想將應用程序發送到系統托盤中,當有人點擊它時,窗口應該再次彈出。

問題是,我寫了一個MFC程序(對話框),它做我希望它做的一切。現在我需要找到一種方法將它發送到托盤中。

類型:MFC(對話窗口) lnguage:C++ IDE :的Visual Studio 2012

你有我如何能做到這一點任何想法?或者你也許知道一個很好的教程或我需要的函數/類?

我已經在codeprojects.com和谷歌搜索,但似乎沒有太多關於此。 謝謝。

編輯1:

我想是這樣的:

HWND hMainWindow = this->GetSafeHwnd(); 
HICON hProgramIcon = this->GetIcon(false); 
char szTip[16] = "Tracker"; 
nidTrayIcon.cbSize = sizeof(nidTrayIcon); 
nidTrayIcon.hIcon = hProgramIcon; 
nidTrayIcon.hWnd = hMainWindow; 
nidTrayIcon.uCallbackMessage = (WM_USER + 1); 
nidTrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; 
nidTrayIcon.uID = 0x0200; 
strcpy_s((char*)nidTrayIcon.szTip,16, szTip2); 
nidTrayIcon.szTip[strlen(szTip)] = '\0'; 
Shell_NotifyIcon(NIM_ADD, &nidTrayIcon); 

如果我運行這段代碼,我關閉應用程序與代碼 「×03」(找不到路徑...)

編輯2:

this->ShowWindow(SW_HIDE); 

也不起作用。同樣的問題。

回答

1

您正在尋找的NotifyIcon類: http://msdn.microsoft.com/en-gb/library/system.windows.forms.notifyicon.aspx

這裏是一個教程: http://alanbondo.wordpress.com/2008/06/22/creating-a-system-tray-app-with-c/

這就是說只是增加你的應用程序到系統托盤是一個非常糟糕的主意UI。它曾經在Windows 95/98的日子裏非常流行,並且微軟有用地提供了一個每個人都可以複製和粘貼的有效代碼示例。不久,我們的魚和眼睛在我們的系統托盤中游動。托盤變得更飽滿,因此完全無用。

如果您的應用程序正在做一些不需要用戶注意的事情,可以將其設爲服務,或者讓用戶最小化對話框到任務欄並在對話框中顯示進度條。這種方式懸停在任務欄圖標上將允許用戶檢查進度。

使用系統嘗試顯示有用的通知。僅當圖標表示可能影響用戶當前工作的系統級活動(如網絡連接)時才添加圖標。否則,請勿混淆我的系統托盤。我不想讓我的視線離開需要我關注的工作(你說你的工作沒有),看看系統托盤中的彈跳兔子。

+1

這是託管代碼,完全無關的MFC。 – ildjarn

相關問題