不知道怎么的,这样的调用会出错,-----断言!
dingd 2003-01-05 12:53:20 学着网上的例子做了个 右下角系统任务栏里显示的程序,
如果鼠标在其上,会响应一个函数,如下:
void CTrayDlg::OnProc(WPARAM wParam,LPARAM lParam)
{
UINT uMouseMsg;//鼠标动作
uMouseMsg=(UINT) lParam;
if(uMouseMsg==WM_LBUTTONDOWN)
{
ATOM GlobalAtom;
if(!GlobalFindAtom("Aboutc"))
{
GlobalAtom=GlobalAddAtom("Aboutc");
CAboutDlg dlg; //弹出About对话框
dlg.DoModal();
GlobalDeleteAtom(GlobalAtom);
}
}
if(uMouseMsg==WM_RBUTTONDOWN)
{
AfxGetMainWnd()->SetForegroundWindow(); //弹出Popup菜单
CMenu menu;
menu.LoadMenu(IDR_TRAYMENU);
CMenu* pPopup=menu.GetSubMenu(0);
CPoint Point;
GetCursorPos(&Point);
pPopup->TrackPopupMenu(TPM_LEFTALIGN,Point.x,Point.y,AfxGetMainWnd(),NULL ); /*********/
AfxGetMainWnd()->PostMessage(WM_NULL, 0, 0);
}
}
前面的左键响应是正确的,可是右键的响应却除了些问题,
如果响应右键,执行到/*********/处,调用函数TrackPopupMenu()
进入到函数里:
其第一行的断言报错,运行的结果就是弹出一个错误,说不能读!
BOOL CMenu::TrackPopupMenu(UINT nFlags, int x, int y,
CWnd* pWnd, LPCRECT lpRect)
{
ASSERT(m_hMenu != NULL); //调试说这个地方有问题。
我实在不太理解,这是什么原因?
是俄帮帮忙吧。
原文章:http://asp3.6to23.com/dever/shell/shell01.asp
我就是照着里面说的做的。