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
  • 相关阅读:
    生成日期列表的函数.sql
    Archlinux下启用Thinkpad功能键
    使用临时表进行编号重排的处理示例.sql
    行值动态变化的交叉报表处理示例.sql
    工作日处理函数(标准节假日).sql
    字符串在编号查询中的应用示例及常见问题.sql
    分段更新函数.sql
    TypeMembersToIL.cs
    排序规则在拼音处理中的应用.sql
    text与image字段转换处理示例.sql
  • 原文地址:https://www.cnblogs.com/greenleaf1976/p/14267291.html
Copyright © 2011-2022 走看看