右键菜单咋响应不到事件呢?
我给CListCtrl添加了一个重写了Menu的菜单,,右击时可以弹出这个菜单,但是点击菜单是并没有响应添加的事件(ON_COMMAND_RANGE(IDR_MENU_SEND, IDR_MENU_KICK,OnCommandPopupMenu).
请问少了点什么呢?
[解决办法]
菜单响应事件添加到别的窗体去了?
贴个代码看看
[解决办法]
右键快捷菜单直接重写OnCommand就行了啊。这个很好弄的,明早给你个例子,要休息了,以前写的代码也不在这
[解决办法]
void CMyDialog::OnNMRclickList(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
POSITION pos = m_list.GetFirstSelectedItemPosition();
int nPos = m_list.GetNextSelectedItem(pos);
if(nPos == -1)
{
return;
}
CPoint point;
GetCursorPos(&point);
CMenu menu;
menu.LoadMenu(IDR_MENU);
//SetMenu(&menu);
vector<SvrInfo>::iterator iter;
for (iter = m_vtSvr.begin(); iter != m_vtSvr.end(); iter++)
{
if (nPos == iter->nID)
{
if (iter->nIsRun)
{
menu.GetSubMenu(0)->EnableMenuItem(ID_RUNSVR, MF_GRAYED|MF_BYCOMMAND);
menu.GetSubMenu(0)->EnableMenuItem(ID_EXITSVR, MF_ENABLED|MF_BYCOMMAND);
}
else
{
menu.GetSubMenu(0)->EnableMenuItem(ID_EXITSVR, MF_GRAYED|MF_BYCOMMAND);
menu.GetSubMenu(0)->EnableMenuItem(ID_RUNSVR, MF_ENABLED|MF_BYCOMMAND);
}
DWORD dwPID= iter->dwProID;
HWND hWnd = GetProcessMainWnd(dwPID);
if(!hWnd)
{
//服务未运行,查看/隐藏都需变灰
menu.GetSubMenu(0)->EnableMenuItem(ID_HIDE_SRV, MF_GRAYED|MF_BYCOMMAND);
menu.GetSubMenu(0)->EnableMenuItem(ID_SHOW_SRV, MF_GRAYED|MF_BYCOMMAND);
menu.GetSubMenu(0)->EnableMenuItem(ID_LOGFILE, MF_GRAYED|MF_BYCOMMAND);
break;
}
if(::IsWindowVisible(hWnd))
{
menu.GetSubMenu(0)->EnableMenuItem(ID_SHOW_SRV, MF_GRAYED|MF_BYCOMMAND);
}
else
{
menu.GetSubMenu(0)->EnableMenuItem(ID_HIDE_SRV, MF_GRAYED|MF_BYCOMMAND);
}
}
}
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
//menu.Detach();
*pResult = 0;
}
BOOL CMyDialog::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: 在此添加专用代码和/或调用基类
HANDLE hProcessHandle;
switch (wParam)
{
case ID_RUNSVR:
{
POSITION pos = m_list.GetFirstSelectedItemPosition();
int nPos = m_list.GetNextSelectedItem(pos);
vector<SvrInfo>::iterator iter;
for (iter = m_vtSvr.begin(); iter != m_vtSvr.end(); iter++)
{
if (nPos == iter->nID)
{
DWORD dwProID = this->RunProc(iter->strPro, iter->strParam);
if(dwProID == FALSE)
break;
iter->dwProID = dwProID;
iter->nIsRun = 1;
ShowSvr();
break;
}
}
}
break;
case ID_EXITSVR:
{
POSITION pos = m_list.GetFirstSelectedItemPosition();
int nPos = m_list.GetNextSelectedItem(pos);
vector<SvrInfo>::iterator iter;
for (iter = m_vtSvr.begin(); iter != m_vtSvr.end(); iter++)
{
if (nPos == iter->nID)
{
DWORD dw;
int iddd= iter->dwProID;
dw = TerminateApp(iddd, 50);
if (dw == TA_FAILED)
{
DWORD errorCode = GetLastError();
CString strMsg;
strMsg.Format("停止进程:%s失败!", iter->strPro.c_str());
AfxMessageBox(strMsg);
return false;
}
iter->nIsRun = 0;
iter->dwProID = 0;
UpdateListline(nPos);
break;
}
}
}
case ID_SHOW_SRV:
{
POSITION pos = m_list.GetFirstSelectedItemPosition();
int nPos = m_list.GetNextSelectedItem(pos);
vector<SvrInfo>::iterator iter;
for (iter = m_vtSvr.begin(); iter != m_vtSvr.end(); iter++)
{
if (nPos == iter->nID)
{
HANDLE hProc ;
DWORD dwPID= iter->dwProID;
HWND hWnd = GetProcessMainWnd(dwPID);
if(!hWnd)
{
break;
}
::ShowWindow(hWnd, SW_SHOW);
}
}
}
break;
…………
}
[解决办法]
WM_CONTEXMENU追加这个消息试试看