打印本文 打印本文 关闭窗口 关闭窗口
让VB开发环境支持鼠标滚轮
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2133  更新时间:2009/4/23 18:59:51  文章录入:mintao  责任编辑:mintao

        Visual Basic 6.0的集成开发环境中的代码编辑器不支持鼠标滚轮的操作,这给使用VB的人带来了很多不便,为了使它能支持鼠标滚轮操作,我制作了一个小程序帮它实现该功能。

       这个程序实现的原理是,使用全局钩子截获窗口消息,通过相应滚轮消息,向VB编辑窗口发送视图滚动消息实现VB编辑窗口对鼠标滚轮的响应。

       首先,建立一个MFC的Dll工程,向工程中添加下列函数:

       下面这个函数用于安装钩子,之所以将其声明为这种形式,主要是考虑到其可扩展性。

BOOL __declspec(dllexport)__stdcall InstallHook(int nIDHook,const HINSTANCE hMod,DWORD dwThreadId)

{

         AFX_MANAGE_STATE(AfxGetStaticModuleState());

        

         BOOL bResult;

         HINSTANCE hInstance=NULL;

         if(hMod==NULL)

         {

                  hInstance=AfxGetInstanceHandle();

         }else

         {

                  hInstance=hMod;

         }

         switch(nIDHook)

         {

         case WH_CALLWNDPROC:

                  if(g_hWinProc!=NULL)

                  {

                          bResult=TRUE;

                          break;

                  }

                  g_hWinProc=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)ProcessWndProc,hInstance,dwThreadId);

                  if(g_hWinProc!=NULL)

                  {

                          bResult=TRUE;

                  }

                  break;

         case WH_GETMESSAGE:

                  if(g_hMsgProc!=NULL)

                  {

                          bResult=TRUE;

                          break;

                  }

                  g_hMsgProc=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)ProcessMsgProc,hInstance,dwThreadId);

                  if(g_hMsgProc!=NULL)

                  {

                          bResult=TRUE;

                  }

                  break;

         default:

                  bResult=FALSE;

                  break;

         }

         return bResult;

}

       下面这个函数用于卸载钩子,与前一个函数对应。

BOOL __declspec(dllexport)__stdcall  UninstallHook(int nIDHook)

{    

         BOOL bResult;

         switch(nIDHook)

         {

         case WH_CALLWNDPROC:

                  bResult=UnhookWindowsHookEx(g_hWinProc);

                  g_hWinProc=NULL;

                  break;

         case WH_GETMESSAGE:

[1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口