当前位置:首页
开发技术指南» 文章正文
    引言:
 

 

    摘要: http://www.film888.com/film.asp?id=wicked ......
    摘要: 刚刚接到电话,老妈让我这个礼拜回去,我本来不想回去的,给单位做的mis才测试阶段,而且在单位可以上免费网,后来我妈告诉我星期天过生日 才决定回去的,一转眼已经24了,20岁时给自己定的目标也都一个个逐渐在实现,但还是感到很迷茫,而且这么大了连个对象也没处过,真失败 希望在我过完生日后不久 可以找到一个漂亮,温柔,体贴,活泼,单纯的女朋友 能够进入分局电子所 正做的这个mis能拿笔大钱 f......


屏蔽文本框的右键菜单

请问如何能将窗体上的文本框自带的右键菜单给屏蔽掉?

NO.1   作者: junwhj

我的收藏:  
   
  首先,谈谈消息和窗口函数。在Windows里,消息有两方面的用途:首先,它们由Windows传给窗口函数,指出发生了一个特定的事件。比如用户单击了鼠标,或者按下了键盘上的某个键。消息也可由Windows用于通告发生了一个内部事件,比如输入焦点的变更。另外,可将消息作为Windows的一种命令使用。这种命令用于通知一个窗口执行特定的任务。其次,通常可将消息传给一个控件或窗口,请求它执行特定的操作。而每个窗口都有一个窗口函数,它的作用是对消息进行处理。该函数就象一个特殊的VB程序,其中包含了对事件进行处理的代码。  
  对于右击文本框,首先是产生一条   WM_CONTEXTMENU   消息,该消息被文本框的窗口函数接收,就会弹出默认的菜单。所以,我的思路是:接收所有的文本框消息,如果消息为   WM_CONTEXTMENU   ,那么弹出自定义菜单,否则,把消息传递给默认的窗口函数由它处理。  
  如何接收消息?一个方法是,用   AddressOf   关键字,它可以把一个自定义模块的地址变为窗口函数的地址。这样,窗口函数就成了你的自定义模块了。而消息仍然传递到原先窗口函数的地址  
   
  现在就看看是如何实现的吧。首先建议你看看VB联机手册关于   AddressOf   的帮助。程序需要一个窗体、窗体中有一个文本框,以及一个标准模块。  
   
  标准模块的代码:  
   
  Option   Explicit  
   
  Public   OldWindowProc   As   Long  
    保存默认的窗口函数的地址  
  Public   Const   WM_CONTEXTMENU   =   &H7B  
    当右击文本框时,产生这条消息  
   
  Public   Declare   Function   GetWindowLong   Lib   "user32"   Alias   "GetWindowLongA"   (ByVal   hWnd   As   Long,   ByVal   nIndex   As   Long)   As   Long  
  Public   Declare   Function   SetWindowLong   Lib   "user32"   Alias   "SetWindowLongA"   (ByVal   hWnd   As   Long,   ByVal   nIndex   As   Long,   ByVal   dwNewLong   As   Long)   As   Long  
  Private   Declare   Function   CallWindowProc   Lib   "user32"   Alias   "CallWindowProcA"   (ByVal   lpPrevWndFunc   As   Long,   ByVal   hWnd   As   Long,   ByVal   Msg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
   
   
  Public   Function   SubClass1_WndMessage(ByVal   hWnd   As   OLE_HANDLE,   ByVal   Msg   As   OLE_HANDLE,   ByVal   wp   As   OLE_HANDLE,   ByVal   lp   As   Long)   As   Long  
  If   Msg   <>   WM_CONTEXTMENU   Then  
  SubClass1_WndMessage   =   CallWindowProc(OldWindowProc,   hWnd,   Msg,   wp,   lp)  
    如果消息不是WM_CONTEXTMENU,就调用默认的窗口函数处理  
  Exit   Function  
  End   If  
  SubClass1_WndMessage   =   True  
  End   Function  
   
  窗体的代码:  
   
  Option   Explicit  
   
  Private   Const   GWL_WNDPROC   =   (-4)  
   
  Private   Sub   Text1_MouseDown(Button   As   Integer,   Shift   As   Integer,   X   As   Single,   Y   As   Single)  
  If   Button   =   1   Then   Exit   Sub  
  OldWindowProc   =   GetWindowLong(Text1.hWnd,   GWL_WNDPROC)  
    取得窗口函数的地址  
  Call   SetWindowLong(Text1.hWnd,   GWL_WNDPROC,   AddressOf   SubClass1_WndMessage)  
    用SubClass1_WndMessage代替窗口函数处理消息  
  End   Sub  
   
  Private   Sub   Text1_MouseUp(Button   As   Integer,   Shift   As   Integer,   X   As   Single,   Y   As   Single)  
  If   Button   =   1   Then   Exit   Sub  
  Call   SetWindowLong(Text1.hWnd,   GWL_WNDPROC,   OldWindowProc)  
    恢复窗口的默认函数  
  PopupMenu   usermenu  
    弹出自定义菜单  
  End   Sub  
   
  运行这个程序,右键菜单已被自定义菜单取代,不会出现两个菜单的情况。关于这个程序,你可以在例程中下载它,实现的功能比这里的要完整。最后要说明的是,尽量不要使用   AddressOf   来改变一个窗口的默认窗口函数,它可能引起不可预料的后果。在VB的联机手册里也是这样建议的,我在编这个程序时,死过几次机,其中一次,搞的我的Windows的“开始”菜单没有反应。  
   
  在Windows   98   +   VB5.0下通过。  
   
 

NO.2   作者: hisofty

Private   Sub   Text1_MouseDown(Button   As   Integer,   Shift   As   Integer,   X   As   Single,   Y   As   Single)  
    If   Button   =   2   Then  
          Text1.Enabled   =   False  
          Text1.Enabled   =   True  
          PopupMenu   MyMenu  
  End   If  
  End   Sub  
   
  mymenu   为已做好的菜单  
 

NO.3   作者: rainstormmaster

Private   Sub   Text2_MouseDown(Button   As   Integer,   Shift   As   Integer,   X   As   Single,   Y   As   Single)  
  If   Button   =   2   Then  
          Text2.Enabled   =   False  
          Text2.Enabled   =   True  
          Text2.SetFocus  
          PopupMenu   mnutest  
  End   If  
  End   Sub


 ·水晶报表的序列号    »显示摘要«
    摘要: 请问,谁能赐教水晶报表的安装序列号? ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE