zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    大数据-KNN算法
    Java-单链表的实现
    Python分析《武林外传》
    Java-javaFx库运用-自动弹跳的球
    Java-javaFx库运用-时钟显示
    Python爬虫-《神雕侠侣》
    大数据-决策树
    Java--用键盘控制小球
    Java--下大雪模拟
    Java File ——Io流复习
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/14267291.html
Copyright © 2011-2022 走看看