代码是书中的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,但是为什么没有变化,于是我做了一个测试。
//用鼠标拖动滚动条放到中间,再滚动滚轮,这次就出来效果了,但是无论怎么滚动,