在使用這個類的時候,需要注意:托盤選單的id要和圖示資源的id一樣,否則會出錯。
新增新的類,選擇父類是
trayicon.h
#pragma once
//trayicon.h : 標頭檔案
////
繼承自ccmdtarget才能接收訊息,詳見《深入淺出 mfc》
class ctrayicon :
public ccmdtarget
/*bool setstandardicon(lpctstr lpsziconname, lpcstr lptip) */
virtual lresult ontraynotification(wparam uid, lparam levent);
/**/protected:
notifyicondata m_nid;
declare_message_map()
};
trayicon.cpp
//trayicon.cpp : 實現檔案
//#include
"stdafx.h
"#include
"trayiconshell.h
"#include
"trayicon.h"/*
注意:托盤選單的id要和圖示資源的id一樣,否則會出錯!
*/implement_dynamic(ctrayicon, ccmdtarget)
ctrayicon::ctrayicon(uint uid)
ctrayicon::~ctrayicon()
void ctrayicon::setnotificationwnd(cwnd* pnotifywnd, uint ucbmsg)
bool ctrayicon::seticon(uint uid,lpwstr lptip)
return seticon(hicon,lptip);
}bool ctrayicon::seticon(hicon hicon, lpwstr lptip)
if(m_nid.sztip[
0])
m_nid.uflags |= nif_tip;
//設定標誌
} else
//刪除圖示
if(m_nid.ucallbackmessage && m_nid.hwnd)
m_nid.uflags |= nif_message;
bool bret = ::shell_notifyicon(umsg,&m_nid);
//把失敗和nim_delete的操作放在這裡
if(!bret) m_nid.hicon = null;
return bret;
} lresult ctrayicon::ontraynotification(wparam uid, lparam levent)
if(levent == wm_lbuttondblclk)
return
1;
}
begin_message_map(ctrayicon, ccmdtarget)
end_message_map()
由於這個類的父類是ccmdtarget,所以,可以接受命令訊息(選單的訊息),我們可以自定義新增訊息。
在需要使用「托盤」的視窗類中宣告乙個ctrayicon的物件,然後在oncreate函式當中呼叫即可。
int ctrayiconshelldlg::oncreate(lpcreatestruct lpcreatestruct)
在這一次實驗之後,我更加仰慕和崇尚物件導向(oo)的思想,如果程式設計思路清晰,資料設計得當,介面功能完善,以及介面與介面之間有良好的資訊溝通,oo能讓你在程式設計當中游刃有餘,所以在平時的時候要養成物件導向的思考習慣。
本文完
monday, april 23, 2012(更新)
搗亂小子
MFC實現程式托盤
今天將程式托盤加入了正在開發的程式中,實現如下。使程式托盤我們這裡要用到了乙個結構體notifyicondata,它包含了系統需要用來傳遞托盤區域資訊的訊息 還有需要用到乙個函式shell notifyicon,它的作用是對拖盤圖示進行顯示與刪除。struct notiflyicondata boo...
MFC之托盤區程式設計
notifyicondata notifyicon 該句可以放在dlg類的宣告中,作為dlg類的乙個成員 也可以放在dlg類的實現中,作為全域性變數來使用。notifyicon.cbsize sizeof notifyicondata notifyicon.hwnd m hwnd lstrcpy n...
MFC 最小化到托盤及右擊托盤選單
全域性變數 notifyicondata nid 托盤圖示全域性變數 在stdafx.h define wm showtask wm user 123 關聯訊息對映函式 位於begin message map與end message map之間 on message wm showtask,onsh...