基于Dialog的MFC程序在启动时隐藏为托盘程序(四)
生活随笔
收集整理的這篇文章主要介紹了
基于Dialog的MFC程序在启动时隐藏为托盘程序(四)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這部分說一下如何加menu。。如果做小氣球。。
mfc的menu確是不如C#活著java那么easy..
首先在rc里添加menu資源。。然后在ui界面里先設(shè)置一下你的菜單。。
在第(二)部分已經(jīng)簡(jiǎn)單知道了怎么取得tray的鼠標(biāo)左右點(diǎn)擊事件。。下面我們就把左右點(diǎn)擊事件分開。。
Code
?1LRESULT?CDesktopDlg::OnNotifyIcon(WPARAM?wParam,LPARAM?lParam)
?2{
?3????switch?(lParam)
?4????{
?5????case?WM_LBUTTONDOWN:
?6????????????????//?切換dialog狀態(tài)。。
?7????????if?(dialogStatus)
?8????????{
?9????????????dialogToTray();
10????????}
11????????else
12????????{
13????????????trayToDialog();
14????????}
15????????break;
16
17????case?WM_RBUTTONDOWN:
18????????????????//?添加menu
19????????CMenu?pMenu;????????
20
21????????if?(pMenu.LoadMenu(IDR_MENU1))?//?IDR_MENU1就是我們添加的menu的id
22????????{
23????????????CMenu*?pPopupMenu?=?pMenu.GetSubMenu(0);
24????????????ASSERT(pPopupMenu?!=?NULL);?
25????????????CPoint?point;?
26????????????GetCursorPos(&point);
27????????????SetForegroundWindow();
28
29????????????pPopupMenu->TrackPopupMenu(
30????????????????TPM_LEFTALIGN?|?TPM_RIGHTBUTTON,
31????????????????point.x,?point.y,?this);
32????????}
33????????break;
34????}
35
36????return?0;
37}
ok,測(cè)試一下發(fā)現(xiàn)菜單運(yùn)行良好。。不過這里還有個(gè)問題我有點(diǎn)疑問。。不知道是不是只有我的電腦有這個(gè)問題。。我在點(diǎn)右鍵的時(shí)候有一定概率把任務(wù)欄的那個(gè)菜單點(diǎn)出來。。不知道問什么。。
我們繼續(xù)。
菜單是出來了。。下面開始添加事件。。
// .h
1afx_msg?BOOL?OnCommand(WPARAM?wParam,?LPARAM?lParam);
// .cpp
Code
BOOL?CDesktopDlg::OnCommand(WPARAM?wParam,?LPARAM?lParam)
{
????switch?(wParam)
????{
????????//?這幾個(gè)id是在rc里面定義的。。
????case?ID_TRAYMENU_32771:
????????trayToDialog();
????????break;
????case?ID_TRAYMENU_32772:
????????dialogToTray();
????????break;
????case?ID_TRAYMENU_32773:
????????OnExit();
????????break;
????case?ID_TRAYMENU_32774:
????????showAboutDlg();
????????break;
????????//?添加這個(gè)command之后。。原來的button事件不管用了。。
????????//?經(jīng)測(cè)試在這里好用。。原因不明。。
????case?IDOK:
????????OnBnClickedOk();
????????break;
????case?IDCANCEL:
????????OnBnClickedCancel();
????????break;
????}
????return?true;
}
ok..現(xiàn)在再運(yùn)行一下。??梢圆藛尉涂梢杂昧?。。
下面來添加一下小氣球的提示。。其實(shí)很簡(jiǎn)單。。寫一個(gè)方法:
Code
?1BOOL?CDesktopDlg::ShowBalloonTip(LPCTSTR?szMsg,LPCTSTR?szTitle,?UINT?uTimeout,?DWORD?dwInfoFlags)
?2{
?3
?4????m_notifyIcon.cbSize=sizeof(NOTIFYICONDATA);
?5????m_notifyIcon.uFlags?=?NIF_INFO;
?6????m_notifyIcon.uTimeout?=?uTimeout;
?7????m_notifyIcon.dwInfoFlags?=?dwInfoFlags;
?8????strcpy(m_notifyIcon.szInfo,szMsg???szMsg?:?_T(""));
?9????strcpy(m_notifyIcon.szInfoTitle,szTitle???szTitle?:?_T(""));
10
11????return?Shell_NotifyIcon(NIM_MODIFY,?&m_notifyIcon);
12}??
然后在init的時(shí)候或者任何你需要的時(shí)候調(diào)用就可以了。。但是氣球還是不要用太多為好。。或者像msn似的。。添加一下鼠標(biāo)點(diǎn)擊事件。。然后下回就再也不自動(dòng)提示了。。當(dāng)然這個(gè)可能就要借助注冊(cè)表了。。
這四部份實(shí)際上是為了完成一個(gè)叫做女巫店 - 每周運(yùn)程的一個(gè)小東東。。也是我第一次做mfc程序。。感覺還挺簡(jiǎn)單的。。程序分享出來吧。。就是通過網(wǎng)絡(luò)連接nownow的女巫店。。然后讀取rss文件(nownow..我要向你抗議。。你現(xiàn)在的文件格式我很難解析。。)。。然后到本地顯示。。方便查詢。。
ps.附上這個(gè)小東西。。順便支持一下nownow。。你弄得這玩意太準(zhǔn)了。。夠意思的話一定要教教我。。嘿嘿。。
女巫店-桌面版
ok,關(guān)于托盤程序的mfc就此告一段落。。盡管寫的很頹。。就這樣吧。。:)
mfc的menu確是不如C#活著java那么easy..
首先在rc里添加menu資源。。然后在ui界面里先設(shè)置一下你的菜單。。
在第(二)部分已經(jīng)簡(jiǎn)單知道了怎么取得tray的鼠標(biāo)左右點(diǎn)擊事件。。下面我們就把左右點(diǎn)擊事件分開。。
Code
?1LRESULT?CDesktopDlg::OnNotifyIcon(WPARAM?wParam,LPARAM?lParam)
?2{
?3????switch?(lParam)
?4????{
?5????case?WM_LBUTTONDOWN:
?6????????????????//?切換dialog狀態(tài)。。
?7????????if?(dialogStatus)
?8????????{
?9????????????dialogToTray();
10????????}
11????????else
12????????{
13????????????trayToDialog();
14????????}
15????????break;
16
17????case?WM_RBUTTONDOWN:
18????????????????//?添加menu
19????????CMenu?pMenu;????????
20
21????????if?(pMenu.LoadMenu(IDR_MENU1))?//?IDR_MENU1就是我們添加的menu的id
22????????{
23????????????CMenu*?pPopupMenu?=?pMenu.GetSubMenu(0);
24????????????ASSERT(pPopupMenu?!=?NULL);?
25????????????CPoint?point;?
26????????????GetCursorPos(&point);
27????????????SetForegroundWindow();
28
29????????????pPopupMenu->TrackPopupMenu(
30????????????????TPM_LEFTALIGN?|?TPM_RIGHTBUTTON,
31????????????????point.x,?point.y,?this);
32????????}
33????????break;
34????}
35
36????return?0;
37}
ok,測(cè)試一下發(fā)現(xiàn)菜單運(yùn)行良好。。不過這里還有個(gè)問題我有點(diǎn)疑問。。不知道是不是只有我的電腦有這個(gè)問題。。我在點(diǎn)右鍵的時(shí)候有一定概率把任務(wù)欄的那個(gè)菜單點(diǎn)出來。。不知道問什么。。
我們繼續(xù)。
菜單是出來了。。下面開始添加事件。。
// .h
1afx_msg?BOOL?OnCommand(WPARAM?wParam,?LPARAM?lParam);
// .cpp
Code
BOOL?CDesktopDlg::OnCommand(WPARAM?wParam,?LPARAM?lParam)
{
????switch?(wParam)
????{
????????//?這幾個(gè)id是在rc里面定義的。。
????case?ID_TRAYMENU_32771:
????????trayToDialog();
????????break;
????case?ID_TRAYMENU_32772:
????????dialogToTray();
????????break;
????case?ID_TRAYMENU_32773:
????????OnExit();
????????break;
????case?ID_TRAYMENU_32774:
????????showAboutDlg();
????????break;
????????//?添加這個(gè)command之后。。原來的button事件不管用了。。
????????//?經(jīng)測(cè)試在這里好用。。原因不明。。
????case?IDOK:
????????OnBnClickedOk();
????????break;
????case?IDCANCEL:
????????OnBnClickedCancel();
????????break;
????}
????return?true;
}
ok..現(xiàn)在再運(yùn)行一下。??梢圆藛尉涂梢杂昧?。。
下面來添加一下小氣球的提示。。其實(shí)很簡(jiǎn)單。。寫一個(gè)方法:
Code
?1BOOL?CDesktopDlg::ShowBalloonTip(LPCTSTR?szMsg,LPCTSTR?szTitle,?UINT?uTimeout,?DWORD?dwInfoFlags)
?2{
?3
?4????m_notifyIcon.cbSize=sizeof(NOTIFYICONDATA);
?5????m_notifyIcon.uFlags?=?NIF_INFO;
?6????m_notifyIcon.uTimeout?=?uTimeout;
?7????m_notifyIcon.dwInfoFlags?=?dwInfoFlags;
?8????strcpy(m_notifyIcon.szInfo,szMsg???szMsg?:?_T(""));
?9????strcpy(m_notifyIcon.szInfoTitle,szTitle???szTitle?:?_T(""));
10
11????return?Shell_NotifyIcon(NIM_MODIFY,?&m_notifyIcon);
12}??
然后在init的時(shí)候或者任何你需要的時(shí)候調(diào)用就可以了。。但是氣球還是不要用太多為好。。或者像msn似的。。添加一下鼠標(biāo)點(diǎn)擊事件。。然后下回就再也不自動(dòng)提示了。。當(dāng)然這個(gè)可能就要借助注冊(cè)表了。。
這四部份實(shí)際上是為了完成一個(gè)叫做女巫店 - 每周運(yùn)程的一個(gè)小東東。。也是我第一次做mfc程序。。感覺還挺簡(jiǎn)單的。。程序分享出來吧。。就是通過網(wǎng)絡(luò)連接nownow的女巫店。。然后讀取rss文件(nownow..我要向你抗議。。你現(xiàn)在的文件格式我很難解析。。)。。然后到本地顯示。。方便查詢。。
ps.附上這個(gè)小東西。。順便支持一下nownow。。你弄得這玩意太準(zhǔn)了。。夠意思的話一定要教教我。。嘿嘿。。
女巫店-桌面版
ok,關(guān)于托盤程序的mfc就此告一段落。。盡管寫的很頹。。就這樣吧。。:)
轉(zhuǎn)載于:https://www.cnblogs.com/hudo/archive/2009/08/19/1549973.html
總結(jié)
以上是生活随笔為你收集整理的基于Dialog的MFC程序在启动时隐藏为托盘程序(四)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哈利波特魔法觉醒怎么加好友?
- 下一篇: 明基家用投影仪ms3801如何操作?