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] 下一页 没有相关教程
|