Megosztás a következőn keresztül:


Egérbemenet áttekintése

Az egér egy fontos, de nem kötelező felhasználói beviteli eszköz az alkalmazások számára. Egy jól megírt alkalmazásnak tartalmaznia kell egy egérfelületet, de nem szabad kizárólag az egértől függenie a felhasználói bemenet beszerzéséhez. Az alkalmazásnak teljes billentyűzettámogatást is biztosítania kell.

Az alkalmazások az ablakba küldött vagy közzétett üzenetek formájában fogadják az egér bemenetét.

Ez a szakasz a következő témaköröket ismerteti:

Kurzort

Amikor a felhasználó áthelyezi az egeret, a rendszer áthelyez egy bitképet a képernyőn, az úgynevezett egérmutatót. Az egérmutató tartalmaz egy egy képpontos pontot, az úgynevezett gyakori elérésű, egy pontot, amelyet a rendszer nyomon követ, és felismeri a kurzor pozícióját. Ha egéresemény történik, a gyakori elérésű helyet tartalmazó ablak általában az eseményből eredő egérüzenetet kapja. Az ablaknak nem kell aktívnak lennie, vagy a billentyűzetfókusznak kell lennie az egérüzenet fogadásához.

A rendszer egy olyan változót tart fenn, amely szabályozza az egér sebességét, vagyis azt a távolságot, amelyet a kurzor mozgat, amikor a felhasználó mozgatja az egeret. A SystemParametersInfo függvényt a SPI_GETMOUSE vagy SPI_SETMOUSE jelzővel is használhatja az egér sebességének lekéréséhez vagy beállításához. További információ az egérmutatókról: Kurzorok.

Egérrögzítés

A rendszer általában egy egérüzenetet küld az ablakba, amely az egéresemények esetén a kurzor gyakori elérésű pontját tartalmazza. Az alkalmazások a SetCapture függvénnyel módosíthatják ezt a viselkedést az egérüzenetek adott ablakba való átirányításához. Az ablak az összes egérüzenetet megkapja, amíg az alkalmazás nem hívja meg a ReleaseCapture függvényt, vagy nem ad meg egy másik rögzítési ablakot, vagy amíg a felhasználó egy másik szál által létrehozott ablakra nem kattint.

Ha az egérrögzítés megváltozik, a rendszer egy WM_CAPTURECHANGED üzenetet küld az egérrögzítést elveszítő ablaknak. Az üzenet lParam paramétere megadja az egérrögzítést kapó ablak fogópontját.

Csak az előtérablak képes rögzíteni az egér bemenetét. Amikor egy háttérablak megkísérli rögzíteni az egérbemenetet, csak olyan egéreseményekre fogad üzeneteket, amelyek akkor fordulnak elő, amikor a kurzor gyakori elérésű pontja az ablak látható részén található.

Az egérbemenet rögzítése akkor is hasznos, ha egy ablaknak minden egérbemenetet fogadnia kell, még akkor is, ha a kurzor az ablakon kívülre kerül. Egy alkalmazás például általában nyomon követi a kurzor pozícióját az egérgomb lefelé mutató eseménye után, a kurzort követve, amíg az egérgomb fel nem lép. Ha egy alkalmazás nem rögzítette az egér bemenetét, és a felhasználó az ablakon kívül oldja fel az egérgombot, az ablak nem kapja meg a gombfelugró üzenetet.

A szál a GetCapture függvénnyel állapíthatja meg, hogy az egyik ablaka rögzítette-e az egeret. Ha a szál egyik ablaka rögzítette az egeret, GetCapture lekér egy fogópontot az ablakba.

Egérkattintás

Az Egérkattintás akadálymentességi funkció lehetővé teszi, hogy a felhasználó egyetlen kattintás után zárolja az elsődleges egérgombot. Egy alkalmazáson a gomb továbbra is le van nyomva. A gomb zárolásának feloldásához az alkalmazás bármilyen egérüzenetet küldhet, vagy a felhasználó bármelyik egérgombra kattinthat. Ez a funkció lehetővé teszi, hogy a felhasználó összetettebb egérkombinációkat használjon. A bizonyos fizikai korlátozásokkal rendelkezők például könnyebben kiemelhetik a szöveget, húzhatják az objektumokat vagy megnyithatják a menüket. További információkért tekintse meg a következő jelölőket és megjegyzéseket SystemParametersInfo:

  • SPI_GETMOUSECLICKLOCK
  • SPI_SETMOUSECLICKLOCK
  • SPI_GETMOUSECLICKLOCKTIME
  • SPI_SETMOUSECLICKLOCKTIME

Egérkonfiguráció

Bár az egér fontos beviteli eszköz az alkalmazások számára, nem minden felhasználó rendelkezik feltétlenül egérrel. Az alkalmazások úgy határozhatják meg, hogy a rendszer tartalmaz-e egeret, ha átadja a SM_MOUSEPRESENT értéket a GetSystemMetrics függvénynek.

A Windows legfeljebb három gombot támogató egeret támogat. Háromgombos egéren a gombok bal, középső és jobb gombként vannak kijelölve. Az egérgombokhoz kapcsolódó üzenetek és elnevezett állandók az L, M és R betűkkel azonosítják a gombokat. Az egygombos egérgombot a bal oldali gombnak tekintjük. Bár a Windows támogatja a több gombot tartalmazó egeret, a legtöbb alkalmazás elsősorban a bal gombot használja, a többit pedig minimálisan, ha egyáltalán.

Az alkalmazások az egérkerekeket is támogatják. Az egérkerék lenyomható vagy elforgatható. Az egérkerék megnyomásakor a középső (harmadik) gombként működik, és normál középső gombüzeneteket küld az alkalmazásnak. Elforgatáskor a rendszer keréküzenetet küld az alkalmazásnak. További információ: Az egérkerék szakasz.

Az alkalmazások támogathatják az alkalmazásparancsgombokat. Ezek az úgynevezett XBUTTON1 vagy XBUTTON2 gombok megkönnyítik az internetböngésző, az elektronikus levelezés és a médiaszolgáltatások elérését. Ha XBUTTON1 vagy XBUTTON2 van lenyomva, a rendszer WM_APPCOMMAND üzenetet küld az alkalmazásnak. További információt a WM_APPCOMMAND üzenet leírásában talál.

Az alkalmazások a GetSystemMetrics függvénynek adott SM_CMOUSEBUTTONS értékkel meg tudják határozni az egérgombok számát. A balkezes felhasználó egérének konfigurálásához az alkalmazás a SwapMouseButton függvénnyel megfordíthatja a bal és jobb egérgombok jelentését. Ha a SPI_SETMOUSEBUTTONSWAP értéket átadja a SystemParametersInfo függvénynek, a gombok jelentését is megfordíthatja. Vegye figyelembe azonban, hogy az egér megosztott erőforrás, ezért a gombok jelentésének megfordítása minden alkalmazásra hatással van.

XBUTTON-k

A Windows legfeljebb öt gombbal támogatja az egereket: balra, középen és jobbra, valamint két további gombot XBUTTON1 és XBUTTON2. A XBUTTON1 és XBUTTON2 gombok gyakran az egér oldalán, az alap közelében találhatók. Ezek az extra gombok nem minden egéren vannak jelen. Ha van ilyen, a XBUTTON1 és a XBUTTON2 gombok gyakran egy alkalmazásfüggvényhez vannak leképezve, például a webböngésző előre- és hátrafelé történő navigációjához.

Az ablakkezelő támogatja XBUTTON1 és XBUTTON2 a WM_XBUTTON* és WM_NCXBUTTON* üzeneteken keresztül. Ezekben az üzenetekben a WPARAM HIWORD egy jelölőt tartalmaz, amely jelzi, hogy melyik XBUTTON van lenyomva. Mivel ezek az egérüzenetek a WM_MOUSEFIRST és WM_MOUSELASTállandók közé is illeszkednek, az alkalmazások az összes egérüzenetet szűrhetik GetMessage vagy PeekMessage.

Az alábbi támogatási XBUTTON1 és XBUTTON2:

A következő API-kat módosítottuk a gombok támogatásához:

Nem valószínű, hogy egy összetevőalkalmazás gyermekablaka képes lesz közvetlenül implementálni a XBUTTON1 és XBUTTON2 parancsokat. Így DefWindowProcWM_APPCOMMAND üzenetet küld egy ablakba, amikor a XBUTTON1 vagy XBUTTON2 kattint. DefWindowProc is elküldi a WM_APPCOMMAND üzenetet a szülőablakba. Ez hasonló a helyi menük jobb kattintással történő meghívásához:DefWindowProcWM_CONTEXTMENU üzenetet küld a menünek, és elküldi azt a szülőjének is. Továbbá, ha DefWindowProc kap egy WM_APPCOMMAND üzenetet egy legfelső szintű ablakhoz, meghív egy HSHELL_APPCOMMAND kóddal rendelkező rendszerhéjhogot.

A böngészőfunkciókhoz, a médiafunkciókhoz, az alkalmazások indításához és az energiagazdálkodáshoz további billentyűkkel rendelkező billentyűzetek is támogatottak. További információ: böngészéshez és egyéb függvényekhez használható billentyűk.

Egérüzenetek

Az egér bemeneti eseményt hoz létre, amikor a felhasználó áthelyezi az egeret, vagy megnyom vagy felenged egy egérgombot. A rendszer üzenetekké alakítja az egérbemeneti eseményeket, és közzéteszi őket a megfelelő szál üzenetsorába. Ha az egérüzenetek gyorsabban jelennek meg, mint amennyit egy szál feldolgozhat, a rendszer a legutóbbi egérüzenet kivételével az összeset elveti.

Az ablakok akkor kapnak egérüzenetet, ha egéresemény történik, miközben a kurzor az ablak határain belül van, vagy amikor az ablak rögzítette az egeret. Az egérüzenetek két csoportra oszlanak: az ügyfélterületi üzenetekre és a nem aktív területekre irányuló üzenetekre. Az alkalmazás általában feldolgozza az ügyfélterületi üzeneteket, és figyelmen kívül hagyja a nem aktív területek üzeneteit.

Ez a szakasz a következő témaköröket ismerteti:

Ügyfélterületi egérüzenetek

Az ablak egy ügyfélterületi egérüzenetet kap, ha az egéresemény az ablak ügyfélterületén belül történik. A rendszer közzéteszi a WM_MOUSEMOVE üzenetet az ablakba, amikor a felhasználó áthelyezi a kurzort az ügyfélterületen belül. Az alábbi üzenetek egyikét teszi közzé, amikor a felhasználó lenyom vagy felenged egy egérgombot, miközben a kurzor az ügyfélterületen belül van.

Üzenet Jelentés
WM_LBUTTONDBLCLK A bal egérgombra duplán kattintott.
WM_LBUTTONDOWN A bal egérgombot lenyomta.
WM_LBUTTONUP A bal egérgomb ki lett adva.
WM_MBUTTONDBLCLK A középső egérgombra duplán kattintott.
WM_MBUTTONDOWN A középső egérgombot lenyomták.
WM_MBUTTONUP A középső egérgomb ki lett adva.
WM_RBUTTONDBLCLK A jobb egérgombra duplán kattintott.
WM_RBUTTONDOWN A jobb egérgombot lenyomta.
WM_RBUTTONUP A jobb egérgomb ki lett adva.
WM_XBUTTONDBLCLK Az X egérgombra duplán kattintott.
WM_XBUTTONDOWN Egy X egérgomb volt lenyomva.
WM_XBUTTONUP Megjelent egy X egérgomb.

 

Emellett egy alkalmazás meghívhatja a TrackMouseEvent függvényt, hogy a rendszer két másik üzenetet küldjön. Közzéteszi a WM_MOUSEHOVER üzenetet, amikor a kurzor egy bizonyos ideig az ügyfélterület fölé mutat. Közzéteszi a WM_MOUSELEAVE üzenetet, amikor a kurzor elhagyja az ügyfélterületet.

Üzenetparaméterek

Az ügyfélterületi egérüzenet lParam paramétere jelzi a kurzor gyakori elérésű helyét. Az alacsony sorrendű szó a gyakori elérésű pont x koordinátáját, a magasrendű szót pedig az y koordinátát jelöli. A koordináták az ügyfélkoordinátákban vannak megadva. Az ügyfélkoordináta-rendszerben a képernyő összes pontja az ügyfélterület bal felső sarkának koordinátáihoz (0,0) viszonyítva van megadva.

A wParam paraméter olyan jelölőket tartalmaz, amelyek jelzik a többi egérgomb, valamint a CTRL és a SHIFT billentyűk állapotát az egéresemény idején. Ezeket a jelzőket akkor ellenőrizheti, ha az egérüzenetek feldolgozása egy másik egérgomb vagy a CTRL vagy a SHIFT billentyű állapotától függ. A wParam paraméter a következő értékek kombinációja lehet.

Érték Leírás
MK_CONTROL A CTRL billentyű le van omlva.
MK_LBUTTON A bal egérgomb le van gombra kattintva.
MK_MBUTTON A középső egérgomb le van va.
MK_RBUTTON A jobb egérgomb le van omlva.
MK_SHIFT A SHIFT billentyű le van omlva.
MK_XBUTTON1 A XBUTTON1 leállt.
MK_XBUTTON2 A XBUTTON2 leállt.

 

Double-Click üzenetek

A rendszer dupla kattintással üzenetet hoz létre, amikor a felhasználó kétszer kattint egy egérgombra gyors egymás után. Amikor a felhasználó rákattint egy gombra, a rendszer létrehoz egy téglalapot a kurzor körüli gyakori elérésű pont körül. Azt is jelzi, hogy mikor történt a kattintás. Amikor a felhasználó másodszor is ugyanarra a gombra kattint, a rendszer meghatározza, hogy a gyakori elérésű pont továbbra is a téglalapon belül van-e, és kiszámítja az első kattintás óta eltelt időt. Ha a gyakori elérésű pont még mindig a téglalapon belül van, és az eltelt idő nem haladja meg a dupla kattintásos időtúllépési értéket, a rendszer dupla kattintásos üzenetet hoz létre.

Az alkalmazások a GetDoubleClickTime és a SetDoubleClickTime függvények használatával dupla kattintással időtúllépési értékeket kaphatnak és állíthatnak be. Másik lehetőségként az alkalmazás beállíthatja a dupla kattintással időtúllépési értéket a SPI_SETDOUBLECLICKTIME jelzővel a SystemParametersInfo függvénnyel. Beállíthatja a téglalap méretét is, amelyet a rendszer a dupla kattintások észlelésére használ a SPI_SETDOUBLECLKWIDTH és SPI_SETDOUBLECLKHEIGHT jelzők SystemParametersInfo. Vegye figyelembe azonban, hogy a dupla kattintással időtúllépési érték és téglalap beállítása minden alkalmazásra hatással van.

Az alkalmazás által definiált ablak alapértelmezés szerint nem fogad dupla kattintással érkező üzeneteket. A dupla kattintásos üzenetek generálásával járó rendszerterhelés miatt ezek az üzenetek csak a CS_DBLCLKS osztálystílussal rendelkező osztályokhoz tartozó ablakokhoz jönnek létre. Az alkalmazásnak ezt a stílust kell beállítania az ablakosztály regisztrálásakor. További információ: Ablakosztályok.

A dupla kattintással megjelenő üzenet mindig a harmadik üzenet egy négyüzenetes sorozatban. Az első két üzenet az első kattintással generált gombos és gombfelnyíló üzenetek. A második kattintással létrejön a dupla kattintással megjelenő üzenet, majd egy újabb gombfelnyíló üzenet. Ha például duplán kattint a bal egérgombra, a következő üzenetsor jön létre:

  1. WM_LBUTTONDOWN
  2. WM_LBUTTONUP
  3. WM_LBUTTONDBLCLK
  4. WM_LBUTTONUP

Mivel az ablakok mindig kapnak egy gombról lefelé irányuló üzenetet, mielőtt dupla kattintást kapnak, az alkalmazások általában dupla kattintással terjesztik ki a gombról lefelé irányuló üzenet során megkezdett feladatokat. Ha például a felhasználó a Microsoft Paint színpalettájában egy színre kattint, a Paint megjeleníti a kiválasztott színt a paletta mellett. Amikor a felhasználó duplán kattint egy színre, a Paint megjeleníti a színt, és megnyitja a Színek szerkesztése párbeszédpanelt.

Nem aktív terület egérüzenetei

Az ablak nem megfelelő területű egérüzenetet kap, ha az egéresemény az ügyfélterület kivételével az ablak bármely részén bekövetkezik. Az ablak nem megfelelő területe a szegélyből, a menüsávból, a címsorból, a görgetősávból, az ablakmenüből, a kis méret gombból és a teljes méret gombból áll.

A rendszer elsősorban saját használatra hoz létre nem megfelelő területüzeneteket. A rendszer például nem aktív területüzeneteket használ, hogy a kurzort kétirányú nyíllá változtassa, amikor a kurzor gyakori irányú pontja egy ablak szegélyébe kerül. Az ablaknak át kell adnia a nem aktív terület egérüzenetét a DefWindowProc függvénynek, hogy kihasználhassa a beépített egérfelület előnyeit.

Minden egyes ügyfélterületi egérüzenethez tartozik egy megfelelő, nemclient területű egérüzenet. Ezeknek az üzeneteknek a neve hasonló azzal a kivétellel, hogy a nemclient területű üzenetek nevesített állandói közé tartoznak az NC betűk. Ha például a kurzort a nemclient területen mozgatja, WM_NCMOUSEMOVE üzenet jön létre, és a bal egérgomb lenyomásával, miközben a kurzor a nemclient területen van, WM_NCLBUTTONDOWN üzenetet generál.

A lParam paramétere egy nemclient terület egérüzenete egy struktúra, amely tartalmazza a kurzor gyakori elérésű pontjának x- és y koordinátáit. Az ügyfélterületi egérüzenetek koordinátáitól eltérően a koordináták nem ügyfélkoordinátákban, hanem képernyőkoordinátákban vannak megadva. A képernyőkoordináta-rendszerben a képernyő minden pontja a képernyő bal felső sarkának koordinátáihoz (0,0) viszonyítva van.

A wParam paraméter tartalmaz egy hit-test értéket, egy értéket, amely azt jelzi, hogy hol történt az egéresemény a nemclient területen. Az alábbi szakasz ismerteti a találattesztek célját.

Az WM_NCHITTEST üzenet

Amikor egéresemény történik, a rendszer WM_NCHITTEST üzenetet küld a kurzort tartalmazó gyakori elérésű ablaknak vagy az egér rögzítésére használt ablaknak. A rendszer ezt az üzenetet használja annak meghatározására, hogy küld-e ügyfélterületet vagy nemclient területről szóló egérüzenetet. Az egérmozgatást és egérgomb-üzeneteket fogadó alkalmazásnak át kell adnia a WM_NCHITTEST üzenetet a DefWindowProc függvénynek.

Az WM_NCHITTEST üzenet lParam paramétere tartalmazza a kurzor gyakori elérésű pontjának képernyőkoordinátáit. A DefWindowProc függvény megvizsgálja a koordinátákat, és a gyakori elérésű hely helyét jelző találatteszt-értéket ad vissza. A hit-test érték az alábbi értékek egyike lehet.

Érték A gyakori elérésű hely helye
HTBORDER Olyan ablak szegélyén, amely nem rendelkezik méretezési szegélyrel.
HTBOTTOM Az ablak alsó vízszintes szegélyén.
HTBOTTOMLEFT Az ablakszegély bal alsó sarkában.
HTBOTTOMRIGHT Az ablakszegély jobb alsó sarkában.
HTCAPTION Címsorban.
HTCLIENT Ügyfélterületen.
HTCLOSE Egy Zárja be gombot.
HTERROR A képernyő hátterében vagy az ablakok közötti választóvonalon (ugyanaz, mint a HTNOWHERE, azzal a különbségtel, hogy a DefWindowProc függvény hibát jelez a rendszer hangjelzésével).
HTGROWBOX Egy méret mezőben (ugyanaz, mint HTSIZE).
HTHELP Egy Súgó gombon.
HTHSCROLL Vízszintes görgetősávon.
HTLEFT Egy ablak bal szegélyén.
HTMENU Egy menüben.
HTMAXBUTTON Egy Teljes méret gombon.
HTMINBUTTON Egy Kis méretű gombon.
HTNOWHERE A képernyő hátterében vagy az ablakok közötti választóvonalon.
HTREDUCE Egy Kis méretű gombon.
HTRIGHT Egy ablak jobb szegélyén.
HTSIZE Egy méret mezőben (ugyanaz, mint HTGROWBOX).
HTSYSMENU Egy System menüben vagy egy A bezárása gomb egy gyermekablakban.
HTTOP Egy ablak felső vízszintes szegélyén.
HTTOPLEFT Az ablakszegély bal felső sarkában.
HTTOPRIGHT Az ablakszegély jobb felső sarkában.
HTTRANSPARENT Egy olyan ablakban, amelyet jelenleg egy másik ablak fed ugyanabban a szálban.
HTVSCROLL A függőleges görgetősávon.
HTZOOM Egy Teljes méret gombon.

 

Ha a kurzor egy ablak ügyfélterületén van, DefWindowProc visszaadja a HTCLIENT találatteszt értékét az ablak eljárásának. Amikor az ablak eljárás visszaadja ezt a kódot a rendszernek, a rendszer a kurzor gyakori elérésű pontjának képernyőkoordinátáit ügyfélkoordinátává alakítja, majd közzéteszi a megfelelő ügyfélterületi egérüzenetet.

A DefWindowProc függvény a többi találatteszt egyikét adja vissza, ha a kurzor gyakori elérésű pontja egy ablak nem aktív területén található. Amikor az ablakművelet egy ilyen találatteszt-értéket ad vissza, a rendszer egy nemclient területről szóló egérüzenetet tesz közzé, amelyben elhelyezi a hit-test értéket az üzenet wParam paraméterében, és a kurzor koordinátáit az lParam paraméterben.

Egérszonár

Az Egérszonár akadálymentességi funkciója röviden több koncentrikus kört mutat a mutató körül, amikor a felhasználó lenyomja és felengedi a CTRL billentyűt. Ez a funkció segít a felhasználónak megtalálni az egérmutatót egy zsúfolt vagy magas felbontású képernyőn, rossz minőségű monitoron vagy látássérült felhasználók számára. További információ: SystemParametersInfo:

SPI_GETMOUSESONAR

SPI_SETMOUSESONAR

Egér eltűnik

Az Egér eltűnése akadálymentesség funkció elrejti az egérmutatót, amikor a felhasználó gépel. Az egérmutató újra megjelenik, amikor a felhasználó áthelyezi az egeret. Ez a funkció megakadályozza, hogy az egérmutató eltakarja a beírt szöveget, például egy e-mailben vagy más dokumentumban. További információ: SystemParametersInfo:

SPI_GETMOUSEVANISH

SPI_SETMOUSEVANISH

Az egérkerék

Az egérkerék egyesíti a kerék és az egérgomb funkcióit. A kerék különálló, egyenletesen elterített rovátkákkal rendelkezik. Amikor elforgatja a kereket, a rendszer egy keréküzenetet küld az alkalmazásnak az egyes kivágások észlelésekor. A kerékgomb normál Windows középső (harmadik) gombként is működik. Az egérkerék lenyomásával és felengedésével szabványos WM_MBUTTONUP és WM_MBUTTONDOWN üzeneteket küld. A harmadik gombra duplán kattintva a szokásos WM_MBUTTONDBLCLK üzenet jelenik meg.

Az egérmutatót az WM_MOUSEWHEEL üzenet támogatja.

Az egér elforgatásával a WM_MOUSEWHEEL üzenet a fókuszablakba kerül. A DefWindowProc függvény propagálja az üzenetet az ablak szülőjének. Az üzenetnek nem szabad belső továbbítást létrehoznia, mivel DefWindowProc propagálja a szülőláncon, amíg meg nem talál egy olyan ablakot, amely feldolgozza azt.

A görgetővonalak számának meghatározása

Az alkalmazásoknak a SystemParametersInfo függvénnyel kell lekérni az egyes görgetési műveletekhez (kerékvágáshoz) tartozó sorok számát. A sorok számának lekéréséhez egy alkalmazás a következő hívást kezdeményezi:

SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)

A "pulScrollLines" változó egy aláíratlan egész számra mutat, amely megkapja a javasolt számú görgethető sort, amikor az egérkerék módosítóbillentyűk nélkül forog:

  • Ha ez a szám 0, nincs görgetés.
  • Ha ez a szám WHEEL_PAGESCROLL, akkor a görgetősáv oldalának lefelé vagy felfelé lévő régióiban egyszer kattintásként kell értelmezni a kerekes görgetést.
  • Ha a görgetni kívánt sorok száma nagyobb, mint a megjeleníthető sorok száma, akkor a görgetési műveletet lapról lefelé vagy oldal felfelé irányuló műveletként is kell értelmezni.

A görgetővonalak számának alapértelmezett értéke 3 lesz. Ha egy felhasználó módosítja a görgetővonalak számát a Vezérlőpult Egértulajdonságok lapján, az operációs rendszer egy WM_SETTINGCHANGE üzenetet küld az összes felső szintű, SPI_SETWHEELSCROLLLINES megadott ablakra. Amikor egy alkalmazás megkapja a WM_SETTINGCHANGE üzenetet, a következő hívással lekérheti az új görgetővonalak számát:

SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)

Görgető vezérlők

Az alábbi táblázat felsorolja a görgetési funkcióval rendelkező vezérlőket (beleértve a felhasználó által beállított görgetővonalakat is).

Vezérlő Görgetés
Vezérlő szerkesztése Függőleges és vízszintes.
Listamező vezérlőelem Függőleges és vízszintes.
Kombinált lista Ha nem dobott le, minden görgetés lekéri a következő vagy az előző elemet. Ha le van dobva, minden görgetés a listamezőbe továbbítja az üzenetet, amely ennek megfelelően görget.
CMD (parancssor) Függőleges.
Fa nézet Függőleges és vízszintes.
Listanézet Függőleges és vízszintes.
Fel-le görgetések Egyszerre egy elem.
Sávgörgők Egyszerre egy elem.
Microsoft Rich Edit 1.0 Függőleges. Vegye figyelembe, hogy az Exchange-ügyfél a listanézet és a fanézet vezérlőinek saját verzióival rendelkezik, amelyek nem rendelkeznek keréktámogatással.
Microsoft Rich Edit 2.0 Függőleges.

 

Egér észlelése kerékkel

Annak megállapításához, hogy egy kerékkel rendelkező egér csatlakoztatva van-e, hívja GetSystemMetricsSM_MOUSEWHEELPRESENT. A TRUE visszatérési értéke azt jelzi, hogy az egér csatlakoztatva van.

A következő példa egy többsoros szerkesztési vezérlő ablakos eljárásából származik:

BOOL ScrollLines(
     PWNDDATA pwndData,   //scrolls the window indicated
     int cLinesToScroll); //number of times

short gcWheelDelta; //wheel delta from roll
PWNDDATA pWndData; //pointer to structure containing info about the window
UINT gucWheelScrollLines=0;//number of lines to scroll on a wheel rotation

gucWheelScrollLines = SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 
                             0, 
                             pulScrollLines, 
                             0);

case WM_MOUSEWHEEL:
    /*
     * Do not handle zoom and datazoom.
     */
    if (wParam & (MK_SHIFT | MK_CONTROL)) {
        goto PassToDefaultWindowProc;
    }

    gcWheelDelta -= (short) HIWORD(wParam);
    if (abs(gcWheelDelta) >= WHEEL_DELTA && gucWheelScrollLines > 0) 
    {
        int cLineScroll;

        /*
         * Limit a roll of one (1) WHEEL_DELTA to
         * scroll one (1) page.
         */
        cLineScroll = (int) min(
                (UINT) pWndData->ichLinesOnScreen - 1,
                gucWheelScrollLines);

        if (cLineScroll == 0) {
            cLineScroll++;
        }

        cLineScroll *= (gcWheelDelta / WHEEL_DELTA);
        assert(cLineScroll != 0);

        gcWheelDelta = gcWheelDelta % WHEEL_DELTA;
        return ScrollLines(pWndData, cLineScroll);
    }

    break;

Ablak aktiválása

Amikor a felhasználó egy inaktív legfelső szintű ablakra vagy egy inaktív felső szintű ablak gyermekablakára kattint, a rendszer elküldi a WM_MOUSEACTIVATE üzenetet (többek között) a felső vagy a gyermekablakba. A rendszer ezt az üzenetet azután küldi el, hogy közzétette a WM_NCHITTEST üzenetet az ablakba, de mielőtt közzétennénk a gombostűt. Amikor a WM_MOUSEACTIVATE a DefWindowProc függvénynek továbbítja, a rendszer aktiválja a felső szintű ablakot, majd közzéteszi a gombról lefelé szóló üzenetet a felső vagy a gyermekablakban.

A WM_MOUSEACTIVATEfeldolgozásával az ablak szabályozhatja, hogy a felső szintű ablak aktív ablak legyen-e az egérkattintás eredményeként, és hogy a kattintott ablak megkapja-e a következő gombról lefelé mutató üzenetet. Ehhez az alábbi értékek egyikét adja vissza a WM_MOUSEACTIVATEfeldolgozása után.

Érték Jelentés
MA_ACTIVATE Aktiválja az ablakot, és nem veti el az egérüzenetet.
MA_NOACTIVATE Nem aktiválja az ablakot, és nem veti el az egérüzenetet.
MA_ACTIVATEANDEAT Aktiválja az ablakot, és elveti az egérüzenetet.
MA_NOACTIVATEANDEAT Nem aktiválja az ablakot, de elveti az egérüzenetet.

Lásd még:

High-Definition egérmozgatási előnyeinek kihasználása