系统拖盘的问题, 急

hehongyu2000 2002-01-16 08:31:57
我用MFC AppWizard(exe)生成了一个单文档应用程序框架, 然后在它的CMainFrame class的构造函数CMainFrame()中加入添加系统拖盘的代码:
HICON hicon = NULL;
NOTIFYICONDATA m_nid;
hicon = AfxGetApp() -> LoadIcon(IDR_MYTRAYTYPE);
m_nid.cbSize = sizeof(NOTIFYICONDATA);
m_nid.hIcon = hicon;
m_nid.hWnd = this -> m_hWnd;
strcpy(m_nid.szTip, "Tip");
m_nid.uCallbackMessage = WM_TRAYNOTIFY;
m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
m_nid.uID = 10;
Shell_NotifyIcon(NIM_ADD, &m_nid);
然后在CMainFrame中加入自定义事件WM_TRAYNOTIFY响应函数
LRESULT CMainFrame::OnTrayNotify(WPARAM wParam,LPARAM lParam)
{
return 1;
}
和响应的加入MFC的事件Map中的代码
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_WM_CREATE()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_TRAYNOTIFY, OnTrayNotify)
END_MESSAGE_MAP()
程序编译运行成功, 系统拖盘区出现我的图标, 但我的鼠标一放上去, 此图标就会消失, 并且我的事件处理函数未被运行.
各位大哥帮忙看看这是什么原因.
...全文
193 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ashura 2002-01-16
  • 打赏
  • 举报
回复
这个托盘本来用的就是API,怎么会有MFC的?
hehongyu2000 2002-01-16
  • 打赏
  • 举报
回复
To swxh(中重):
不会出错了, 但还是会消失
不解 2002-01-16
  • 打赏
  • 举报
回复
1.m_nid.hWnd = AfxGetMainWnd()->GetSafeHwnd();

hehongyu2000 2002-01-16
  • 打赏
  • 举报
回复
如果是MFC的可以发给我, SDK的我也有, 谢谢!
hehongyu2000@sina.com
Ashura 2002-01-16
  • 打赏
  • 举报
回复
老兄我自己的例子要不要看看?
hehongyu2000 2002-01-16
  • 打赏
  • 举报
回复
To dsc(松紧带):
出现error:
Unhandled exception at 0x00401b61 in MyTray.exe: 0xC0000005: Access violation reading location 0x00000020.
renren6250 2002-01-16
  • 打赏
  • 举报
回复
学习
hehongyu2000 2002-01-16
  • 打赏
  • 举报
回复
还是不行啊, 老大, 你的消息处理函数是For SDK的, 在MFC中Microsoft用它的消息映射机制跳到我的消息处理函数上来, 所以, 我的函数接口是
LRESULT CMainFrame::OnTrayNotify(WPARAM wParam, LPARAM lParam)
不需要你的UINT message参数,所以我改为
LRESULT CMainFrame::OnTrayNotify(WPARAM wParam, LPARAM lParam)
{
if(lParam==WM_LBUTTONDBLCLK)
{
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
}
if(lParam==WM_RBUTTONDOWN)
{
MessageBox(_T("This is a tray!"));
}
return 1;
}

但还是同样的问题, 最怪的是, MFC的消息处理机制没有跳到我的处理函数上来, 因为我在LRESULT CMainFrame::OnTrayNotify(WPARAM wParam, LPARAM lParam)内设break point居然没有停下来, 麻烦那各位大哥再帮忙看看
hehongyu2000 2002-01-16
  • 打赏
  • 举报
回复
喔, 可能是page被cache住了.
hehongyu2000 2002-01-16
  • 打赏
  • 举报
回复
To dsc(松紧带):
You are right, thank you very much!
现在CSDN是怎么了, 无法给分, 没有给分的text box出现.
ylb_and_xy 2002-01-16
  • 打赏
  • 举报
回复
like as alfwolf(戈壁孤狼) 
dsc 2002-01-16
  • 打赏
  • 举报
回复




鼠标一放上去, 此图标就会消失,是 m_nid.hWnd 的问题,请改为这样:
m_nid.hWnd = AfxGetMainWnd()->m_hWnd;


hehongyu2000 2002-01-16
  • 打赏
  • 举报
回复
我试试先
angular_lucy 2002-01-16
  • 打赏
  • 举报
回复
同意楼上的,没有处理消息响应把~!
alfwolf 2002-01-16
  • 打赏
  • 举报
回复
给你一个回调函数的例子:
LRESULT CServerDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message){
case MYWM_NOTIFYICON: //======>>>>如果是用户定义的消息
if(lParam==WM_LBUTTONDBLCLK)
{ //鼠标双击时主窗口出现
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
}
if(lParam==WM_RBUTTONDOWN)
{ //鼠标右键单击弹出菜单

//加载自建菜单
CMenu menu,*pMenu;
menu.LoadMenu(IDR_RIGHT_MENU);
pMenu = menu.GetSubMenu(0);
CPoint pos;
GetCursorPos(&pos);
this->SetForegroundWindow(); //只有这样才会使得鼠标在菜单外点击时菜单关闭
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_LEFTBUTTON,pos.x,pos.y,this);
}
break;
case WM_SYSCOMMAND: //======>>>>如果是系统消息
if(wParam==SC_MINIMIZE)
{ //接收到最小化消息,最小化窗口
AfxGetApp()->m_pMainWnd->ShowWindow(SW_MINIMIZE);
return 0;
}
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}
hehongyu2000 2002-01-16
  • 打赏
  • 举报
回复
回调函数什么问题
我的define
#define WM_MYTRAYNOTIFY WM_USER + 100
gjd111686 2002-01-16
  • 打赏
  • 举报
回复
自定义消息的#define写了没有.开发指南的Shell块有个例子.可以加菜单,看看吧
ygd 2002-01-16
  • 打赏
  • 举报
回复
看看回调函数吧
dsc 2002-01-16
  • 打赏
  • 举报
回复



对了,你是在构造函数里实现,肯定不行的,那时窗口句柄都为空,你应该将下面这一段放在 OnCreate 函数里面,我试了,肯定行。

HICON hicon = NULL;
NOTIFYICONDATA m_nid;
hicon = AfxGetApp() -> LoadIcon(IDR_MYTRAYTYPE);
m_nid.cbSize = sizeof(NOTIFYICONDATA);
m_nid.hIcon = hicon;
m_nid.hWnd = this -> m_hWnd;
strcpy(m_nid.szTip, "Tip");
m_nid.uCallbackMessage = WM_TRAYNOTIFY;
m_nid.uFlags = NIF_ICON ¦ NIF_MESSAGE ¦ NIF_TIP;
m_nid.uID = 10;
Shell_NotifyIcon(NIM_ADD, &m_nid);

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧