基于对话框在托盘图标上加的弹出菜单
.......
CMenu menu;menu.CreatePopupMenu();//声明一个弹出式菜单//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已//隐藏),将程序结束。menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭");
menu.AppendMenu(MF_STRING,WM_OpenAbout,"还原");.......
WM_OpenAbout是个自定义消息头文件加入#define WM_OpenAbout WM_USER+101
afx_msg LRESULT OnOpenAbout(WPARAM wParam,LPARAM lParam);cpp的消息Map里加入ON_MESSAGE(WM_OpenAbout,OnOpenAbout)
定义了函数LRESULT CTiXingDlg::OnOpenAbout(WPARAM wParam,LPARAM lParam)
{
this->ShowWindow(SW_SHOWNORMAL); //点托盘菜单后还原对话框显示
return 0;
}
通过了编译,但是点击托盘菜单“还原”不响应,换了执行其他语句也不响应WM_OpenAbout,但响应“关闭”
请教达人,谢谢
.......
CMenu menu;menu.CreatePopupMenu();//声明一个弹出式菜单//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已//隐藏),将程序结束。menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭");
menu.AppendMenu(MF_STRING,WM_OpenAbout,"还原");.......
WM_OpenAbout是个自定义消息头文件加入#define WM_OpenAbout WM_USER+101
afx_msg LRESULT OnOpenAbout(WPARAM wParam,LPARAM lParam);cpp的消息Map里加入ON_MESSAGE(WM_OpenAbout,OnOpenAbout)
定义了函数LRESULT CTiXingDlg::OnOpenAbout(WPARAM wParam,LPARAM lParam)
{
this->ShowWindow(SW_SHOWNORMAL); //点托盘菜单后还原对话框显示
return 0;
}
通过了编译,但是点击托盘菜单“还原”不响应,换了执行其他语句也不响应WM_OpenAbout,但响应“关闭”
请教达人,谢谢
你可以先跟踪一下你的消息相应函数实际上被执行了没有,设个断点就可以。
你很有可能是少了下面架星号的那一句:
NOTIFYICONDATA nid;
nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA);
nid.hWnd = this->m_hWnd;
nid.uID = IDR_MAINFRAME;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ;
*** nid.uCallbackMessage = WM_OpenAbout;
nid.hIcon = LoadIcon( AfxGetInstanceHandle(),
MAKEINTRESOURCE( IDI_ICON ));
strcpy( nid.szTip, "show window" ); Shell_NotifyIcon( NIM_ADD, &nid );
ShowWindow( SW_HIDE );
这个有写,化为托盘图标隐藏窗口用的,也管用ON_COMMAND(id , messageFxn)需要资源id,而我不想借助资源,纯文本菜单实现。既然menu.AppendMenu(MF_STRING,WM_DESTROY,"关闭");可以不借助资源响应关闭按钮,
自定义的menu.AppendMenu(MF_STRING,WM_OpenAbout,"还原");应该也可以