先说一下思路吧。。。。。主要用的的是一个NOTIFYICONDATA结构和Shell_NotifyIcon函数
其它的就是一些消息响应了
一、先是自己写一个实现托盘的函数StartTry(),
nData;
nData.cbSize = sizeof(NOTIFYICONDATA);
nData.hWnd = this->m_hWnd;
nData.uID = IDR_MAINFRAME;
nData.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nData.uCallbackMessage = WM_ONTRY; //在头文件中自定义WM_ONTRY(#define WM_ONTRY WM_USER+1)消息响应函数nData.hIcon = LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_MAINFRAME));
strcpy(nData.szTip,"sun");
Shell_NotifyIcon(NIM_ADD, &nData);
this->ShowWindow(SW_HIDE);
return TRUE;
二、写一个停止托盘的函数StopTry()
NOTIFYICONDATA nData;
nData.cbSize = sizeof(NOTIFYICONDATA);
nData.hWnd = this->m_hWnd;
nData.uID = IDR_MAINFRAME;
nData.uFlags = NIF_TIP|NIF_MESSAGE|NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,&nData);
三、写一个删除托盘的消息响应函数DeleteTry();
StopTry();
this->ShowWindow(SW_SHOW);
四、在WM_ONTRY消息响应函数中对不同的操作进行响应
switch(lParam)
{
case WM_LBUTTONDOWN:
this->ShowWindow(SW_SHOW); //显示菜单
DeleteTry();
case WM_RBUTTONDOWN:
{
POINT point;
GetCursorPos(&point);
CMenu menu;
menu.CreatePopupMenu();
menu.AppendMenu(MF_BITMAP,WM_DeleteTry,&m_Bitmap[0]); //右击图片删除菜单
menu.AppendMenu(MF_BITMAP,WM_DESTROY,&m_Bitmap[1]); //右击图片退出菜单
menu.TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this);
break;
}
default:
{
CMenu::DeleteTempMap();
break;
}
}
出现的问题
menu.CreatePopupMenu();这一句。
刚开始我是产生一个菜单menu.createMenu(),菜单栏中的图片和文字只出现一小部分
看来还是做下才知道问题出现在哪。