CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

急!小妹请教关于自定义msgbox弹出位置的疑问?!

楼主twofish(toofoo)2006-07-03 12:40:30 在 VB / 基础类 提问

小妹找了段可以自定义msgbox弹出位置的代码,但点击弹出的msgbox按钮无返回值,不知道为什么,请教大家!小女子谢过先~  
   
  請您參考:  
  Private   Declare   Function   FindWindow   Lib   "user32"   Alias   _  
                  "FindWindowA"   (ByVal   lpClassName   As   String,   ByVal   _  
                                  lpWindowName   As   String)   As   Long  
  Public   Declare   Function   UnHookWindowsHookEx   Lib   "user32"   Alias   "UnhookWindowsHookEx"   (ByVal   hHook   As   Long)   As   Long  
  Public   Declare   Function   GetWindowLong   Lib   "user32"   Alias   "GetWindowLongA"   (ByVal   hwnd   As   Long,   ByVal   nIndex   As   Long)   As   Long  
  Public   Declare   Function   GetCurrentThreadId   Lib   "kernel32"   ()   As   Long  
  Public   Declare   Function   SetWindowsHookEx   Lib   "user32"   Alias   "SetWindowsHookExA"   (ByVal   idHook   As   Long,   ByVal   lpfn   As   Long,   ByVal   hmod   As   Long,   ByVal   dwThreadId   As   Long)   As   Long  
  Public   Declare   Function   SetWindowPos   Lib   "user32"   (ByVal   hwnd   As   Long,   ByVal   hWndInsertAfter   As   Long,   ByVal   x   As   Long,   ByVal   y   As   Long,   ByVal   cx   As   Long,   ByVal   cy   As   Long,   ByVal   wFlags   As   Long)   As   Long  
  Public   Declare   Function   GetWindowRect   Lib   "user32"   (ByVal   hwnd   As   Long,   lpRect   As   RECT)   As   Long  
   
  Public   Const   GWL_HINSTANCE   =   (-6)  
  Public   Const   SWP_NOSIZE   =   &H1  
  Public   Const   SWP_NOZORDER   =   &H4  
  Public   Const   SWP_NOACTIVATE   =   &H10  
  Public   Const   HCBT_ACTIVATE   =   5  
  Public   Const   WH_CBT   =   5  
   
  Public   hHook   As   Long  
  Public   MsgBoxPosX   As   Integer  
  Public   MsgBoxPosY   As   Integer  
   
  Type   RECT  
          Left   As   Long  
          Top   As   Long  
          Right   As   Long  
          Bottom   As   Long  
  End   Type  
   
  Function   WinProc(ByVal   lMsg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
          If   lMsg   =   HCBT_ACTIVATE   Then  
                  SetWindowPos   wParam,   0,   MsgBoxPosX,   MsgBoxPosY,   0,   0,   SWP_NOSIZE   Or   SWP_NOZORDER   Or   SWP_NOACTIVATE  
                  UnHookWindowsHookEx   hHook  
                  'Declare   Function   UnHookWindowsHookEx   Lib   "user32"   (ByVal   hHook   As   Long)   As   Long  
                  '  
                  '函數說明:   本函數是解除Hook之用。hHook是Hook函數的控制碼。  
                  '  
          End   If  
          WinProc   =   False  
  End   Function  
   
  Function   msg(msgText   As   String,   msgButton   As   Long,   msgTitel   As   String,   xPos   As   Long,   yPos   As   Long)  
          Dim   hInst   As   Long  
          Dim   XLInst   As   Long  
          Dim   Thread   As   Long  
   
          MsgBoxPosX   =   xPos  
          MsgBoxPosY   =   yPos  
   
          XLInst   =   FindWindow("xlmain",   vbNullString)                 '取得Excel   Hwnd  
          hInst   =   GetWindowLong(XLInst,   GWL_HINSTANCE)                 '從指定視窗的架構中取得資訊:擁有視窗的實例的句柄  
          Thread   =   GetCurrentThreadId()                 '獲取目前執行緒之識別代碼(ID)  
          hHook   =   SetWindowsHookEx(WH_CBT,   AddressOf   WinProc,   hInst,   Thread)  
          'WH_CBT   Hook:系統在激活,創建,消毀,最小化,最大化,移動,改變窗體前;在完成一條系統命令前;_  
          '       在從系統消息隊列中移去鼠標或鍵盤事件前;在設置輸入焦點前,或同步系統消息隊列前,將調用WH_CBT  
          'Declare   Function   SetWindowsHookEx   Lib   "user32"   Alias   "SetWindowsHookExA"   (ByVal   idHook   As   Long,   ByVal   lpfn   As   Long,   ByVal   hmod   As   Long,   ByVal   dwThreadId   As   Long)   As   Long  
          '  
          '函數說明:本函數是用於啟動Hook設置。  
          '  
          'idHook是Hook的類型,即處理的消息類型。  
          '  
          'Lpfn是Hook子程(函數或過程)的位址指針。如果dwThreadId參數為0或是一個由別的進程創建的線程的標識,lpfn必須指向DLL中的Hook子程。除此以外,lpfn可以指向當前進程的一段Hook子程代碼(我們利用的就是這個性質)。  
          '  
          'hMod是應用程式實例的控制碼,標識包含lpfn所指的子程的DLL。如果dwThreadId   標識當前進程創建的一個線程,而且子程代碼位於當前進程,hMod必須為NULL。  
          '  
          'dwThreadId是與安裝Hook子程相關聯的線程的識別字,如果為0,Hook子程與所有的線程關聯。   返回值:函數成功則返回Hook子程的控制碼,失敗  
          MsgBox   msgText,   msgButton,   msgTitel,   0,   0  
  End   Function  
   
  Sub   Aufruf_MsgBox()  
          Dummy   =   msg("目前位置:-)",   4   +   32,   ":-!",   10,   100)  
  End   Sub 问题点数:0、回复次数:11Top

1 楼twofish(toofoo)回复于 2006-07-03 12:44:56 得分 0

急啊,拜托大家了Top

2 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 12:52:44 得分 0

我不会,,,不过小妹挺可爱的!帮顶!Top

3 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 12:55:23 得分 0

要什么返回值啊?  
   
  Sub   Aufruf_MsgBox()  
          Dummy   =   msg("目前位置:-)",   4   +   32,   ":-!",   10,   100)  
  End   Sub  
   
  Dummy的返回值?  
   
  要返回值没问题,主要是你要返回值做什么?希望返回点什么。。  
   
  在msg函数里最后加上一句“msg=返回值”,比如:  
          …………  
          MsgBox   msgText,   msgButton,   msgTitel,   0,   0  
          msg   =   1  
  End   Function  
  就可以了Top

4 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 12:57:07 得分 0

我没理解错的话,你要这个,在msg函数最后一段这么改也成。  
          msg   =   MsgBox(msgText,   msgButton,   msgTitel,   0,   0)Top

5 楼twofish(toofoo)回复于 2006-07-03 13:06:57 得分 0

先谢过上面诸位的大哥,  
   
  也许是我没说清楚,我要的是Dummy   的值,就是说例如设Dummy   =   msg("目前位置:-)",   vbOkCancel,   ":-!",   10,   100),就应该要得到点击vbok时的返回值1,点击vbcancel时的返回值2。但现在不管设哪种msgbutton组合,得到的返回值都为0。Top

6 楼twofish(toofoo)回复于 2006-07-03 13:13:44 得分 0

一定不能沉阿~Top

7 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 13:33:55 得分 0

我用你程序运行的,确定返回7,取消返回6。  
   
  在msg函数最后一段这么改:  
          msg   =   MsgBox(msgText,   msgButton,   msgTitel,   0,   0)  
   
  你再试试。  
   
  辛苦回答半天,小妹居然没给分啊!!狂汗Top

8 楼aspower_(敬个礼 握个手 大家都素好朋友!)回复于 2006-07-03 14:03:18 得分 0

他一分没有给  
  怎么给你分阿  
   
  呵呵Top

9 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 14:07:00 得分 0

楼上的  
   
  发扬风格方面多提提,重色轻友一定要少提!Top

10 楼aspower_(敬个礼 握个手 大家都素好朋友!)回复于 2006-07-03 14:11:32 得分 0

不明白  
   
  我怎么重色轻友了?Top

11 楼boiciy(喜欢去哪去哪)回复于 2006-07-03 15:59:09 得分 0

无语。。。。  
   
  我再说自己。。。。。  
   
  昨晚熬一宿,今天坚持到现在,不行了,睡觉了,1点准时起床!Top

相关问题

关键词

得分解答快速导航

  • 帖主:twofish

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo