概述
代码是书中的SYSTEM.C一部分。
直接上代码:
case WM_CREATE:
hdc=GetDC(hwnd);
GetTextMetrics(hdc,&tm);
cxChar=tm.tmAveCharWidth;
cxCaps=(tm.tmPitchAndFamily & 1? 3:2)*cxChar/2;
cyChar=tm.tmHeight+tm.tmExternalLeading;
ReleaseDC(hwnd,hdc);
iMaxWidth=40*cxChar+22*cxCaps;
//这个地方需要注意一下,这里没有return 0,一开始怎么都没调试出来,最后才发现的这个问题。
//没有return 0,这样才会直接调用WM_SETTINGCHANGE,不然是不会调用的。
case WM_SETTINGCHANGE:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES,0,&ulScrollLines,0);
if(ulScrollLines)
//这里iDeltaPerLine是在根据控制面板中的设置而计算而来的。我电脑上是40
iDeltaPerLine=WHEEL_DELTA/ulScrollLines;
else
iDeltaPerLine=0;
return 0;
case WM_MOUSEWHEEL:
if(iDeltaPerLine==0)
break;
//一开始下面的wParam被我写成了lParam,无论怎么操作滚轮,屏幕都没有变化。
//但是跟踪却显示调用了SendMessage,但是为什么没有变化,于是我做了一个测试。
//用鼠标拖动滚动条放到中间,再滚动滚轮,这次就出来效果了,但是无论怎么滚动,滚动条都向上运动。
//这就是为什么一开始滚动滚轮没有效果的原因了。
iAccumDelta+=(short)HIWORD(wParam);//iAccumDelta只有120或-120两个值
while(iAccumDelta>=iDeltaPerLine)
{
SendMessage(hwnd,WM_VSCROLL,SB_LINEUP,0);
iAccumDelta-=iDeltaPerLine;
}
while(iAccumDelta<=-iDeltaPerLine)
{
SendMessage(hwnd,WM_VSCROLL,SB_LINEDOWN,0);
iAccumDelta+=iDeltaPerLine;
}
return 0;
下面是WM_MOUSEWHEEL相关信息:
对于鼠标滑轮,可以提供非常友好的滚动操作,比如我们常常用滑轮滚动来控制滚动条,而编程需要知道的关键的信息一般就是
1.滚动的方向
2.滚动的大小
通过响应WM_MOUSEWHEEL消息可以得到有用的信息
(short)HIWORD(wParam) 返回一个滚动的大小,一般是120的倍数,正数代表滚动向前,负数代表向后
(short)LOWORD(wParam) 返回当前同时用鼠标键的时候按下了哪些键
系统只有更改了系统相关设置,才会调用WM_SETTINGCHANGE。最后
以上就是无辜服饰为你收集整理的《Windows程序设计》之鼠标滚轮的全部内容,希望文章能够帮你解决《Windows程序设计》之鼠标滚轮所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复