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
原文地址:https://www.cnblogs.com/greenleaf1976/p/14267291.html