在工作列上顯示圖示 (轉)
在工作列上顯示圖示
阿倫工作室 邱理 95/工作列的右邊是一狀態區,Windows95/Wi ndowsNT在其上顯示時間和一些小圖示,這些圖示代表著特定的功能或 ,用滑鼠單擊、右擊或雙擊這些圖示,就會彈出功能選單或程式視窗等。你也許想把自己的程式圖示也放在工作列的狀態區上,很簡單, VC++ 5.0提供了一個,讓你很容易地實現該功能。 _NotifyIcon()函式 該函式傳送訊息給在工作列的狀態區,增加、刪除或修改圖示。Shell_NotifyI con()有兩個引數: 1. D dwMessage 訊息標誌值,為以下三個中之一: NIM_ADD 在工作列狀態區增加圖示 NIM_DELETE 從工作列狀態區刪除圖示 NIM_MODITY 修改工作列狀態區的圖示 2. PNOTIFYICONDATA pnid 指向NOTIFYICONDATA結構的指標。NOTIFYICONDATA結構如下: typedef struct _NOTIFYICONDATA { // nid DWORD cbSize; // NOTIFYICONDATA 結構的大小 HWND hWnd; //接收回撥訊息的視窗控制程式碼 UINT uID; //自定義的圖示標誌值 UINT uFlags; //標誌後面的三個資料成員哪個有效, //可由NIF_ICON,NIF_MESSAGE和 NIF_TIP組合。 UINT uCallbackMessage; //回撥訊息 HICON hIcon; //圖示控制程式碼 char szTip[64]; //提示字元。當把滑鼠移到工作列 //狀態區該圖示上時,系統顯示該字元 } NOTIFYICONDATA, *PNOTIFYICONDATA; 如何在工作列狀態區實現程式圖示及其功能 1. 首先生成一個單文件的工程。 2. 在StdAfx.h 新增自定義的訊息: //回撥訊息 #define MYWM_NOTIFYICON WM_USER+1 //在工作列狀態區顯示圖示的訊息 #define MYWM_SHOPICONIC WM_USER+2 3. 在MainFrm.h 裡新增定義訊息處理函式說明,該部分看起來如下: protected: //{{AFX_MSG(CMainFrame) afx_msg void OnSymmand(UINT nID, LPARAM lParam); //手工加 afx_msg void OnMyIconNotify(WPARAM wParam, LPARAM lParam ); //手工加 afx_msg void OnShowAppIconic(WPARAM wParam, LPARAM lPara m); //手工加 afx_msg void OnClose(); //系統生成 //}}AFX_MSG DECLARE_MESSAGE_MAP() 另外,需在MainFrm.h定義一開關值,記錄程式視窗是開啟或關閉狀態: BOOL boolWndHadShow; 4. 在MainFrm.cpp裡實現訊息對映和訊息處理函式。訊息對映部分看起來如下: BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AFX_MSG_MAP(CMainFrame) ON_MESSAGE(MYWM_NOTIFYICON, OnMyIconNotify) ON_MESSAGE(MYWM_SHOWAPPICONIC, OnShowAppIconic) ON_WM_SYSCOMMAND() ON_WM_CLOSE() //}}AFX_MSG_MAP END_MESSAGE_MAP() 訊息處理及相關函式如下所示: //在工作列狀態區新增圖示 BOOL MyTaskBarAddIcon(HWND hwnd, UINT uID, HICON hicon, LPSTR lpszTip) { BOOL res; NOTIFYICONDATA tnid; tnid.cbSize = sizeof(NOTIFYICONDATA); tnid.hWnd = hwnd; tnid.uID = uID; tnid.uFlags = NIF_ICON | NIF_T| NIF_MESSAGE; tnid.uCallbackMessage = MYWM_NOTIFYICON; tnid.hIcon = hicon; if (lpszTip) lstrcpyn(tnid.szTip, lpszTip, sizeof(tnid.szTip)); else tnid.szTip[0]=‘'; res=shell_NotifyIco n(NIM_ADD, &tnid); if (hicon) DestroyIcon(hicon); return res; } //從工作列狀態區刪除圖示 BOOL MyTaskBarDeleteIcon(HWND hwnd, UINT uID) { BOOL res; NOTIFYICONDATA tnid; tnid.cbSize = sizeof(NOTIFYICONDATA); tnid.hWnd = hwnd; tnid.uID = uID; res = Shell_NotifyIcon(NIM_DELETE, &tnid); return res; } //處理圖示回撥訊息MYWM_NOTIFYICON void CMainFrame::OnMyIconNotify( WPARAM wParam, LPARAM l Param ) { UINT nID; UINT uMouseMsg; nID = (UINT)wParam; uMouseMsg = (UINT) lParam; if(uMouseMsg == WM_LBUTTONDOWN) //點選圖示 { if( boolWndHadShow ) //如果視窗已開啟,隱藏視窗 ShowWindow(SW_H ); else //否則,顯示視窗 ShowWindow(SW_SHOWNORMAL ); boolWndHadShow = ~boolWndHadShow; } } //訊息MYWM_SHOWAPPICONIC處理函式,在工作列顯示圖示並隱藏視窗 void CMainFrame::OnShowAppIconic(WPARAM wParam, LPARAM l Param ) { HICON theIcon = LoadIcon(AfxGetInstance-Handle(),MAKEINT RE(IDR_MAI NFRAME) ); MyTaskBarAddIcon(GetSafeHwnd(), 100, theIcon, _T("示範程式")); ShowWindow(SW_HIDE ); boolWndHadShow = FALSE; } 當程式關閉時,需把圖示從任務樣狀態區刪除,你可以新增一個處理WM_CLOSE訊息的函式來刪除圖示。透過ClassWizard來新增處理WM_ CLOSE的函式OnClose(),該函式如下: void CMainFrame::OnClose() { // TODO: Add your message handler code here and/or call default MyTaskBarDeleteIcon( GetSafeHwnd(), 100 ); CFrameWnd::OnClose(); } 當把視窗最小化時,你應隱藏整個視窗,所以要處理ON_SYSCO MMAND訊息。首先在MainFrm.h新增函式說明,如第三步所示;然後在Ma inFrm.cpp裡說明訊息對映和實現函式。訊息對映如前面所示,函式實現如下: void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam ) { if (nID==SC_MINIMIZE ) { ShowWindow(SW_HIDE ); boolWndHadShow=FALSE; } else CWnd::OnSysCommand(nID, lParam ); } 5. 在InitInstance()函式返回前,新增一語句 m_pMainWnd->PostMessage( MYWM_SHOWAP- PICONIC ); 它是傳送一個自定義的訊息MYWM_SHOWAP- PICONIC使程式啟動後隱藏程式視窗並在工作列狀態區顯示小圖示。 6. 現在,你可編譯和執行該程式了。程式執行後,點選工作列狀態區該程式的圖示, 系統會彈出程式視窗,再點選一下,又隱藏了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988011/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- win10qq圖示怎樣在工作列顯示_win10qq圖示在工作列顯示的方法Win10
- 利用工作列上的圖示與使用者互動 (轉)
- win10 選擇圖示怎麼顯示工作列_win10選擇快速操作圖示如何顯示在工作列Win10
- win10在工作列顯示觸控板圖示教程_win10怎麼在工作列右下角顯示觸控板圖示Win10
- Qt 子視窗 隱藏標題欄的圖示,隱藏在工作列上的圖示QT
- win7 在工作列左側加個 顯示桌面 的圖示Win7
- Win10工作列不顯示應用圖示怎麼辦 應用已經在執行但不顯示Win10
- Windows 7工作列無法顯示電源圖示解析Windows
- Extjs 在GridPanel中顯示圖示的方法JS
- win10設定始終在工作列顯示的圖示的兩種方法Win10
- win7工作列圖示設定(顯示或者隱藏)Win7
- win10工作列圖示不顯示怎麼辦 修復工作列顯示不正常的辦法Win10
- win11工作列顯示所有圖示怎麼設定 win11右下角圖示全部顯示怎麼操作
- windows10圖示不顯示怎麼設定_win10圖示不顯示在桌面如何解決WindowsWin10
- Activity背景顯示app圖示APP
- Word圖示未顯示在.doc和.docx文件檔案
- qt 使用qmake pro檔案新增 ico圖示,程式執行時顯示圖示,exe也顯示圖示QT
- fltk-rs 隱藏標題欄但顯示工作列圖示
- java byte[] 轉圖片 在jsp頁面顯示JavaJS
- 顯示地圖地圖
- win10怎麼把工作列圖示居中_win10電腦工作列圖示居中顯示設定方法Win10
- win10托盤圖示不顯示怎麼回事_win10工作列托盤圖示顯示不完全如何修復Win10
- 工作列輸入法圖示不見了怎麼辦? 顯示輸入法圖示的方法
- vue 滑鼠移入顯示圖示 ,滑鼠移出隱藏圖示Vue
- 修改Windows工作列的時間顯示(轉)Windows
- win7圖片只顯示圖示不顯示預覽圖解決方案Win7圖解
- 在托盤上顯示Balloon Tooltip (轉)
- win10如何設定桌面顯示圖示_windows10顯示桌面圖示設定方法Win10Windows
- 工作列圖示空白,圖示是一塊白板
- Android系統耳機圖示顯示Android
- 配置CKEditor顯示的圖示及配置
- MapSCII:在終端顯示世界地圖地圖
- 雨滴式的顯示圖片 (cloud 轉貼) (轉)Cloud
- 在選單中加入圖示 (轉)
- 關於Spyder在高解析度顯示器下的選單圖示顯示不正確問題
- Geoserver + MySQL實現圖層顯示和文字顯示ServerMySql
- win10系統工作列圖示名稱不顯示如何解決Win10
- win10 如何設定微信顯示通知和圖示 win10怎麼顯示微信圖示Win10