基于Dialog的MFC程序在启动时隐藏为托盘程序(四)
生活随笔
收集整理的這篇文章主要介紹了
基于Dialog的MFC程序在启动时隐藏为托盘程序(四)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這部分說一下如何加menu。。如果做小氣球。。
mfc的menu確是不如C#活著java那么easy..
首先在rc里添加menu資源。。然后在ui界面里先設置一下你的菜單。。
在第(二)部分已經簡單知道了怎么取得tray的鼠標左右點擊事件。。下面我們就把左右點擊事件分開。。
Code
?1LRESULT?CDesktopDlg::OnNotifyIcon(WPARAM?wParam,LPARAM?lParam)
?2{
?3????switch?(lParam)
?4????{
?5????case?WM_LBUTTONDOWN:
?6????????????????//?切換dialog狀態。。
?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,測試一下發現菜單運行良好。。不過這里還有個問題我有點疑問。。不知道是不是只有我的電腦有這個問題。。我在點右鍵的時候有一定概率把任務欄的那個菜單點出來。。不知道問什么。。
我們繼續。
菜單是出來了。。下面開始添加事件。。
// .h
1afx_msg?BOOL?OnCommand(WPARAM?wParam,?LPARAM?lParam);
// .cpp
Code
BOOL?CDesktopDlg::OnCommand(WPARAM?wParam,?LPARAM?lParam)
{
????switch?(wParam)
????{
????????//?這幾個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;
????????//?添加這個command之后。。原來的button事件不管用了。。
????????//?經測試在這里好用。。原因不明。。
????case?IDOK:
????????OnBnClickedOk();
????????break;
????case?IDCANCEL:
????????OnBnClickedCancel();
????????break;
????}
????return?true;
}
ok..現在再運行一下。??梢圆藛尉涂梢杂昧?。。
下面來添加一下小氣球的提示。。其實很簡單。。寫一個方法:
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的時候或者任何你需要的時候調用就可以了。。但是氣球還是不要用太多為好。?;蛘呦駇sn似的。。添加一下鼠標點擊事件。。然后下回就再也不自動提示了。。當然這個可能就要借助注冊表了。。
這四部份實際上是為了完成一個叫做女巫店 - 每周運程的一個小東東。。也是我第一次做mfc程序。。感覺還挺簡單的。。程序分享出來吧。。就是通過網絡連接nownow的女巫店。。然后讀取rss文件(nownow..我要向你抗議。。你現在的文件格式我很難解析。。)。。然后到本地顯示。。方便查詢。。
ps.附上這個小東西。。順便支持一下nownow。。你弄得這玩意太準了。。夠意思的話一定要教教我。。嘿嘿。。
女巫店-桌面版
ok,關于托盤程序的mfc就此告一段落。。盡管寫的很頹。。就這樣吧。。:)
mfc的menu確是不如C#活著java那么easy..
首先在rc里添加menu資源。。然后在ui界面里先設置一下你的菜單。。
在第(二)部分已經簡單知道了怎么取得tray的鼠標左右點擊事件。。下面我們就把左右點擊事件分開。。
Code
?1LRESULT?CDesktopDlg::OnNotifyIcon(WPARAM?wParam,LPARAM?lParam)
?2{
?3????switch?(lParam)
?4????{
?5????case?WM_LBUTTONDOWN:
?6????????????????//?切換dialog狀態。。
?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,測試一下發現菜單運行良好。。不過這里還有個問題我有點疑問。。不知道是不是只有我的電腦有這個問題。。我在點右鍵的時候有一定概率把任務欄的那個菜單點出來。。不知道問什么。。
我們繼續。
菜單是出來了。。下面開始添加事件。。
// .h
1afx_msg?BOOL?OnCommand(WPARAM?wParam,?LPARAM?lParam);
// .cpp
Code
BOOL?CDesktopDlg::OnCommand(WPARAM?wParam,?LPARAM?lParam)
{
????switch?(wParam)
????{
????????//?這幾個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;
????????//?添加這個command之后。。原來的button事件不管用了。。
????????//?經測試在這里好用。。原因不明。。
????case?IDOK:
????????OnBnClickedOk();
????????break;
????case?IDCANCEL:
????????OnBnClickedCancel();
????????break;
????}
????return?true;
}
ok..現在再運行一下。??梢圆藛尉涂梢杂昧?。。
下面來添加一下小氣球的提示。。其實很簡單。。寫一個方法:
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的時候或者任何你需要的時候調用就可以了。。但是氣球還是不要用太多為好。?;蛘呦駇sn似的。。添加一下鼠標點擊事件。。然后下回就再也不自動提示了。。當然這個可能就要借助注冊表了。。
這四部份實際上是為了完成一個叫做女巫店 - 每周運程的一個小東東。。也是我第一次做mfc程序。。感覺還挺簡單的。。程序分享出來吧。。就是通過網絡連接nownow的女巫店。。然后讀取rss文件(nownow..我要向你抗議。。你現在的文件格式我很難解析。。)。。然后到本地顯示。。方便查詢。。
ps.附上這個小東西。。順便支持一下nownow。。你弄得這玩意太準了。。夠意思的話一定要教教我。。嘿嘿。。
女巫店-桌面版
ok,關于托盤程序的mfc就此告一段落。。盡管寫的很頹。。就這樣吧。。:)
轉載于:https://www.cnblogs.com/hudo/archive/2009/08/19/1549973.html
總結
以上是生活随笔為你收集整理的基于Dialog的MFC程序在启动时隐藏为托盘程序(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哈利波特魔法觉醒怎么加好友?
- 下一篇: 诗歌rails之如何写一个简单的Rail