System Tray Icons – Minimize Your Application to the SysTray

Posted: 一月 16, 2008 in 技術相關
標籤:,

當我們對一個 App 最小化時 一般都是會將 App 給縮小到 工作列去….

Task List

那今天如果我們想將 App 於最小化時 給縮小至 系統列時(如下圖) 要怎麼做呢 !?

SysTrayIcon

Code Project 裡面有提供詳細之作法 [連結]

簡單來說有如下幾個步驟

  • 假設先建立一個專案 名為 MyTray
  • 將該網頁中之 TrayDialog.cpp TrayDialog.h 兩隻檔案給 include 到你的程式中
  • 修改 MyTrayDlg.h 中的宣告

class MyTrayDlg : public CDialog

become

#include “TrayDialog.h"

class MyTrayDlg : public CDialog

    • 將所有於 MyTrayDlg.cpp 中出現的 CDialog 給替換成 CTrayDialog

    CMyTrayDlg::CMyTrayDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CMyTrayDlg::IDD, pParent)

    become

    CMyTrayDlg::CMyTrayDlg(CWnd* pParent /*=NULL*/)
    : CTrayDialog(CMyTrayDlg::IDD, pParent)

    • 如果需要在點選 System Tray Icons 時呈現 MENU 則需要另外建立一個 MENU 的 RESOURCE 並且將其命名為 IDR_MENU1
    • 於主程式 MyTrayDlg.cpp 的 OnInitDialog() 中加入如程式

    TraySetIcon(IDR_MAINFRAME);
    TraySetToolTip(“Hint of your App Trap Icons");
    TraySetMenu(IDR_MENU1);

    • 主程式 Dialog 記得要生成一個 “最小化" 的按鈕 !
    • Build & Run 則可以 完成上述功能 !

    至於程式中相對應之 滑鼠左右鍵點選 單擊 雙擊 部分則可以自己於 TrayDialog.cpp 程式中逕自修改 !!

    那如果希望成是在執行初期 急可以直接最小化 並且 縮小至系統工作列的話要怎麼做呢 !?

    思考邏輯 -> 程式初使時即將其縮至工作列 在利用 Message 傳送方式送出 最小化的 Message 給 Dialog 的 Handle

    所以只需要在 MyTrayDlg.cpp 的 OnInitDialog() 最後加入如下兩行即可 ! [reference]

    ShowWindow (SW_MINIMIZE) ;
    PostMessage(WM_SYSCOMMAND, SC_MINIMIZE);

    變化 -> 我要在程式初使時及最小化, 且不希望出現 SysTrayIcon 的圖示在系統工作列 要怎麼做呢 !?

    這有點類似駭客程式了… 偷偷藏在使用者 OS 中執行 !

    其實就直接不要管上面什麼 TrayDialog 的修改及套用 直接於程式初使時即偷偷最小化並縮至工作列 就好了 !

    如此一來 就可以神不知鬼不覺的藏在使用者電腦中囉 !! @@"

    發表迴響

    在下方填入你的資料或按右方圖示以社群網站登入:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / 變更 )

    Twitter picture

    You are commenting using your Twitter account. Log Out / 變更 )

    Facebook照片

    You are commenting using your Facebook account. Log Out / 變更 )

    Google+ photo

    You are commenting using your Google+ account. Log Out / 變更 )

    連結到 %s