mfc的menu确是不如C#活着java那么easy..
首先在rc里添加menu资源。。然后在ui界面里先设置一下你的菜单。。
在第(二)部分已经简单知道了怎么取得tray的鼠标左右点击事件。。下面我们就把左右点击事件分开。。
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
// .cpp
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..现在再运行一下。。可以菜单就可以用了。。
下面来添加一下小气球的提示。。其实很简单。。写一个方法:
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的时候或者任何你需要的时候调用就可以了。。但是气球还是不要用太多为好。。或者像msn似的。。添加一下鼠标点击事件。。然后下回就再也不自动提示了。。当然这个可能就要借助注册表了。。
这四部份实际上是为了完成一个叫做女巫店 - 每周运程的一个小东东。。也是我第一次做mfc程序。。感觉还挺简单的。。程序分享出来吧。。就是通过网络连接nownow的女巫店。。然后读取rss文件(nownow..我要向你抗议。。你现在的文件格式我很难解析。。)。。然后到本地显示。。方便查询。。
ps.附上这个小东西。。顺便支持一下nownow。。你弄得这玩意太准了。。够意思的话一定要教教我。。嘿嘿。。
女巫店-桌面版
ok,关于托盘程序的mfc就此告一段落。。尽管写的很颓。。就这样吧。。:)