Win32_SDK 屏蔽Edit控件的右键系统菜单方法
找了好久的方法,网上都是基于mfc的方法,现在找到解决方法了,分享给大家,
就是要重新设置Edit控件的回调函数
//Win32 SDK 下Edit控件屏蔽右键系统菜单方法
第一步:
//声明保存旧的Edit控件回调函数地址的变量
LONG_PTR oldProc;
//新的Edit控件的回调函数声明
LONG_PTR CALLBACK EditProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
第二步:
在对话框初始函数中添加
BOOL MyWinDialog::OnInitDialog(WPARAM wParam, LPARAM lParam)
{
AfxCWin::OnInitDialog(wParam, lParam);
//TODO:初始化代码
//重新设置Edit控件的回调函数
HWND hEditWnd = ::GetDlgItem(m_hWnd, IDC_EDIT2);
oldProc = SetWindowLongPtr(hEditWnd, GWLP_WNDPROC, (LONG_PTR)EditProc);
//网上用的是GWL_WNDPROC消息,这个在64系统下不能用,所以只好用这了,32和64都能用
}
第三步;在新回调函数中捕捉鼠标右键按下消息
LONG_PTR CALLBACK EditProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_RBUTTONDOWN:
{
//在这添加自己的右键菜单,不添加直接返回1就能屏蔽掉系统菜单了
HMENU hRoot = LoadMenu(hThisApp, MAKEINTRESOURCE(IDR_MENU1));
HMENU hSub = GetSubMenu(hRoot, 0);
POINT pt;
GetCursorPos(&pt);
TrackPopupMenu(hSub, TPM_LEFTBUTTON | TPM_TOPALIGN | TPM_RIGHTBUTTON,
pt.x, pt.y, 0,pMyDlg->GetHwnd(), NULL);
DestroyMenu(hRoot);
}
return 1;
default:
break;
}
//最后要返回旧的回调函数地址
return CallWindowProc((WNDPROC)oldProc, hWnd, uMsg, wParam, lParam);
}
签名:GreenLeaf1976

浙公网安备 33010602011771号