为什么Cmenu的按钮不能点?class sample:public CFrameWnd
{
public:
sample()
{
Create(NULL,"MFC Window");
//MessageBox("My MFC Window","CFrame constructor",MB_OK);
m_notify.cbSize=sizeof NOTIFYICONDATA;
m_notify.hWnd=this->m_hWnd;
m_notify.uID=IDR_MAINFRAME;
m_notify.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(m_notify.szTip,"client");
m_notify.uCallbackMessage=WM_USER_NOTIFYICON;
m_notify.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; //OK,下面就是托盘产生了.
Shell_NotifyIcon(NIM_ADD,&m_notify);
} LRESULT sample::OnNotifyMsg(WPARAM wparam,LPARAM lparam)
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
{
if(wparam != IDR_MAINFRAME)
return 1;
switch(lparam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
{
LPPOINT lpoint = new tagPOINT;
::GetCursorPos(lpoint); // 得到鼠标位置
CMenu menu;
menu.CreatePopupMenu(); // 声明一个弹出式菜单
menu.AppendMenu(MF_STRING|MF_ENABLED,WM_DESTROY, "关闭");
SetForegroundWindow();
menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y, this);
RBDown = 1;
//HMENU hmenu = menu.Detach();
//menu.DestroyMenu();
delete lpoint;
}
break;
}
return 0;
} BOOL sample::DestroyWindow()
{ // TODO: Add your specialized code here and/or call the base class
// 在托盘区删除图标
Shell_NotifyIcon(NIM_DELETE, &m_notify);
return CFrameWnd::DestroyWindow();
} LRESULT sample::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message) //判断消息类型
{
case WM_USER_NOTIFYICON:
//如果是用户定义的消息
break;
case WM_SYSCOMMAND:
//如果是系统消息
if(wParam==SC_CLOSE)
{
::Shell_NotifyIcon(NIM_DELETE,&m_notify); //关闭时删除系统托盘图标
}
break;
}
return CFrameWnd::WindowProc(message, wParam, lParam);
} DECLARE_MESSAGE_MAP();
private:
NOTIFYICONDATA m_notify;
int RBDown;
};BEGIN_MESSAGE_MAP(sample,CFrameWnd)
//这个宏是一个带参数的宏,填写两个参数,一个子类,一个父类
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_DESTROY()
ON_MESSAGE(WM_USER_NOTIFYICON,OnNotifyMsg)
END_MESSAGE_MAP()//结束宏
{
public:
sample()
{
Create(NULL,"MFC Window");
//MessageBox("My MFC Window","CFrame constructor",MB_OK);
m_notify.cbSize=sizeof NOTIFYICONDATA;
m_notify.hWnd=this->m_hWnd;
m_notify.uID=IDR_MAINFRAME;
m_notify.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(m_notify.szTip,"client");
m_notify.uCallbackMessage=WM_USER_NOTIFYICON;
m_notify.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; //OK,下面就是托盘产生了.
Shell_NotifyIcon(NIM_ADD,&m_notify);
} LRESULT sample::OnNotifyMsg(WPARAM wparam,LPARAM lparam)
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
{
if(wparam != IDR_MAINFRAME)
return 1;
switch(lparam)
{
case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
{
LPPOINT lpoint = new tagPOINT;
::GetCursorPos(lpoint); // 得到鼠标位置
CMenu menu;
menu.CreatePopupMenu(); // 声明一个弹出式菜单
menu.AppendMenu(MF_STRING|MF_ENABLED,WM_DESTROY, "关闭");
SetForegroundWindow();
menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y, this);
RBDown = 1;
//HMENU hmenu = menu.Detach();
//menu.DestroyMenu();
delete lpoint;
}
break;
}
return 0;
} BOOL sample::DestroyWindow()
{ // TODO: Add your specialized code here and/or call the base class
// 在托盘区删除图标
Shell_NotifyIcon(NIM_DELETE, &m_notify);
return CFrameWnd::DestroyWindow();
} LRESULT sample::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message) //判断消息类型
{
case WM_USER_NOTIFYICON:
//如果是用户定义的消息
break;
case WM_SYSCOMMAND:
//如果是系统消息
if(wParam==SC_CLOSE)
{
::Shell_NotifyIcon(NIM_DELETE,&m_notify); //关闭时删除系统托盘图标
}
break;
}
return CFrameWnd::WindowProc(message, wParam, lParam);
} DECLARE_MESSAGE_MAP();
private:
NOTIFYICONDATA m_notify;
int RBDown;
};BEGIN_MESSAGE_MAP(sample,CFrameWnd)
//这个宏是一个带参数的宏,填写两个参数,一个子类,一个父类
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_DESTROY()
ON_MESSAGE(WM_USER_NOTIFYICON,OnNotifyMsg)
END_MESSAGE_MAP()//结束宏
解决方案 »
- 请问各位大哥,如何用VC对Excel表格里的chart添加x轴说明和y轴说明?请用代码具体演示下,谢谢!
- 请高手指教,如何遍历结构体或类的成员变量,vc
- 急!寻支持接收对方手机按键的GSM Modem。请各位兄弟姐妹帮忙啊
- ADO 连接 “使用WINDOW验证方式”的SQL SERVER2000出现的问题,请高手帮忙解决!
- 高手帮忙:怎样定义这样的链表?
- 简单问题,CArray、CMap、CList等集合类,是不是线程安全的?
- 一个不错的 VC/C/C++ 书籍下载站. UP有分!
- 我是菜鸟,请问有了MFC还有必要再系统全面的学习WINAPI吗?
- 哪位大侠给个做组件的完整程序代码
- VC6中Installshield在哪里?
- ado 读取数据库open()崩溃
- 无线网卡也是tcp/udp通信吗?
menu.AppendMenu(MF_STRING|MF_ENABLED,其他数值, "关闭");的时候按钮就是灰色的
menu.AppendMenu(MF_STRING|MF_ENABLED,其他数值, "关闭");的时候按钮就是灰色的.各位大神这是为什么啊?
#define ID_POPCLOSE 3550
menu.AppendMenu(MF_STRING|MF_ENABLED,ID_POPCLOSE, "关闭");然后
WM_COMMAND(ID_POPCLOSE,OnPopClose)void sample::OnPopClose()
{
........
}