为CEdit控件设置右键菜单

来源:互联网 发布:网上看病软件 编辑:程序博客网 时间:2024/05/29 02:04

FARPROC OldEditProc = NULL;
LRESULT CALLBACK NewEditProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
 if (uMsg == WM_RBUTTONUP)
 {
  CPoint curPoint;
  GetCursorPos(&curPoint);
  CMenu Menu,*pSubMenu;
  Menu.LoadMenu(IDR_MENU);
  pSubMenu=Menu.GetSubMenu(0);
  TrackPopupMenu(pSubMenu->GetSafeHmenu(),TPM_LEFTALIGN,curPoint.x,curPoint.y,0,AfxGetMainWnd()->GetSafeHwnd(),NULL);// 不要忘了指定处理消息的窗口句柄
  return TRUE;
 }
 else
 {
  if(OldEditProc)
  {
   return CallWindowProc((WNDPROC)OldEditProc,hwnd,uMsg,wParam,lParam);
  }
  else
  {
   return FALSE;
  }
 }
}

 

在OnInitDialog函数里面添加如下代码:

CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT_LOG); // 为IDC_EDIT_LOG设置新的窗口过程
 if(pEdit)
 {
  OldEditProc = (FARPROC)SetWindowLong(pEdit->m_hWnd,GWL_WNDPROC,long(NewEditProc));//更换窗口过程函数
 }

原创粉丝点击