• 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
  • 相关阅读:
    四则运算出题器3
    《梦断代码》读书笔记
    结队开发的小程序
    四则运算程序测试
    (补)PSP三张表
    多功能四则运算出题器
    四则运算分析题
    C语言编写的随机产生四则运算测试题
    读书笔记
    四则运算(三)
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/14267291.html
Copyright © 2020-2023  润新知