龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

让VB开发环境支持鼠标滚轮(4)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
while(pScroll!=NULL) { ::GetClassName(pScroll-GetSafeHwnd(),buf,255); sWndClass.Format("%s",buf); if(sWndClass.Compare("ScrollBar")==0 (pScroll-GetStyle() SBS_VERT)) { break; } pScroll=pScroll-GetWind

                                   while(pScroll!=NULL)

                                   {

                                            ::GetClassName(pScroll->GetSafeHwnd(),buf,255);

                                            sWndClass.Format("%s",buf);

                                            if(sWndClass.Compare("ScrollBar")==0 && (pScroll->GetStyle()& SBS_VERT))

                                            {

                                                     break;

                                            }

                                            pScroll=pScroll->GetWindow(GW_HWNDNEXT);

                                   }

                                   if(((short) HIWORD(pMessage->wParam)<0))

                                   {

                                            ::SendMessage(pMessage->hwnd,WM_VSCROLL,MAKEWPARAM(SB_LINEDOWN,0),(LPARAM)(pScroll==NULL?0:pScroll->GetSafeHwnd()));

                                            ::SendMessage(pMessage->hwnd,WM_VSCROLL,MAKEWPARAM(SB_ENDSCROLL,0),(LPARAM)(pScroll==NULL?0:pScroll->GetSafeHwnd()));

                                   }else if(((short) HIWORD(pMessage->wParam)>0))

                                   {

                                            ::SendMessage(pMessage->hwnd,WM_VSCROLL,MAKEWPARAM(SB_LINEUP,0),(LPARAM)(pScroll==NULL?0:pScroll->GetSafeHwnd()));

                                            ::SendMessage(pMessage->hwnd,WM_VSCROLL,MAKEWPARAM(SB_ENDSCROLL,0),(LPARAM)(pScroll==NULL?0:pScroll->GetSafeHwnd()));

                                   }

                          }

                          return 0;

                  }

         }

         return  CallNextHookEx(g_hWinProc,nCode,wParam,lParam);

}

       从上面的代码不难看出,解决问题的关键在于,截获所需要的消息(WM_MOUSEWHEEL),并将该消息转化为响应的消息(WM_VSCROLL)发送给目的窗口。其中,需要注意的是:我们使用的是全局钩子,所以,它会截获所有窗体的消息,因此,在程序中就要对消息和窗体进行判断,对于不是我们所要的,就放行,是我们要的,就处理。

       通过该问题的分析,我们不难发现,可以使用类似的方法实现某些程序的最小化时隐藏等功能,即当收到特定窗口的最小化消息时,向它发送WM_SHOWWINDOW消息,然后在通知区生成一个对应图标,如果用户点击图标则显示窗口。

精彩图集

赞助商链接