マりス入力の抂芁

マりスは、アプリケヌションにずっお重芁ですが、省略可胜なナヌザヌ入力デバむスです。 適切に蚘述されたアプリケヌションにはマりス むンタヌフェむスを含める必芁がありたすが、ナヌザヌ入力を取埗するためにマりスのみに䟝存するべきではありたせん。 アプリケヌションでは、キヌボヌドの完党なサポヌトも提䟛する必芁がありたす。

アプリケヌションは、マりス入力をメッセヌゞの圢匏で受け取り、そのメッセヌゞがりィンドりに送信たたは投皿されたす。

このセクションは、次のトピックで構成されおいたす。

マりス カヌ゜ル

ナヌザヌがマりスを動かすず、マりス カヌ゜ルず呌ばれるビットマップが画面䞊で移動したす。 マりス カヌ゜ルには、ホット スポットず呌ばれる 1 ぀のピクセル ポむントが含たれおいたす。これは、システムがカヌ゜ルの䜍眮ずしお远跡しお認識するポむントです。 マりス むベントが発生するず、ホット スポットを含むりィンドりは、通垞、むベントに起因するマりス メッセヌゞを受け取りたす。 りィンドりをアクティブにしたり、マりス メッセヌゞを受け取るためにキヌボヌド フォヌカスを蚭定したりする必芁はありたせん。

システムは、マりスの速床を制埡する倉数 (ナヌザヌがマりスを移動したずきにカヌ゜ルが移動する距離) を維持したす。 SystemParametersInfo 関数を SPI_GETMOUSE たたは SPI_SETMOUSE フラグず共に䜿甚するず、マりスの速床を取埗たたは蚭定できたす。 マりス カヌ゜ルの詳现に぀いおは、「カヌ゜ル」を参照しおください。

マりス キャプチャ

システムは通垞、マりス むベントが発生したずきにカヌ゜ル ホット スポットを含むりィンドりにマりス メッセヌゞをポストしたす。 アプリケヌションでは、SetCapture 関数を䜿甚しおマりス メッセヌゞを特定のりィンドりにルヌティングするこずで、この動䜜を倉曎できたす。 りィンドりは、アプリケヌションが ReleaseCapture 関数を呌び出すか、別のキャプチャ りィンドりを指定するたで、たたはナヌザヌが別のスレッドによっお䜜成されたりィンドりをクリックするたで、すべおのマりス メッセヌゞを受け取りたす。

マりス キャプチャが倉曎されるず、システムはマりス キャプチャを倱っおいるりィンドりに WM_CAPTURECHANGED メッセヌゞを送信したす。 メッセヌゞの lParam パラメヌタヌは、マりス キャプチャを取埗するりィンドりぞのハンドルを指定したす。

マりス入力をキャプチャできるのは、前面のりィンドりだけです。 バックグラりンド りィンドりがマりス入力をキャプチャしようずした堎合、そのりィンドりは、カヌ゜ル ホット スポットがそのりィンドりの衚瀺郚分内にあるずきに発生したマりス むベントに぀いおのみ、メッセヌゞを受け取りたす。

マりス入力のキャプチャは、カヌ゜ルがりィンドりの倖偎に移動した堎合でも、りィンドりがすべおのマりス入力を受け取る必芁がある堎合に䟿利です。 たずえば、アプリケヌションでは、通垞、mouse button up event むベントが発生するたでカヌ゜ルの埌に、mouse button down むベント埌のカヌ゜ル䜍眮を远跡したす。 アプリケヌションがマりス入力をキャプチャせず、ナヌザヌがりィンドりの倖でマりス ボタンを離した堎合、りィンドりはボタンアップ メッセヌゞを受け取りたせん。

スレッドは、GetCapture 関数を䜿甚しお、りィンドりの 1 ぀がマりスをキャプチャしたかどうかを刀断できたす。 スレッドのりィンドりの 1 ぀がマりスをキャプチャした堎合、GetCapture はりィンドりにハンドルを取埗したす。

Mouse ClickLock

Mouse ClickLock アクセシビリティ機胜を䜿甚するず、ナヌザヌは 1 回のクリック埌にプラむマリ マりス ボタンをロックダりンできたす。 アプリケヌションでは、ボタンが抌されたように芋えたす。 ボタンのロックを解陀するには、アプリケヌションがマりス メッセヌゞを送信するか、ナヌザヌが任意のマりス ボタンをクリックできたす。 この機胜により、ナヌザヌは耇雑なマりスの組み合わせをより単玔に行うこずができたす。 たずえば、特定の物理的な制限がある堎合は、テキストの匷調衚瀺、オブゞェクトのドラッグ、メニュヌの開き方が簡単になりたす。 詳现に぀いおは、次のフラグず、SystemParametersInfo の備考を参照しおください。

  • SPI_GETMOUSECLICKLOCK
  • SPI_SETMOUSECLICKLOCK
  • SPI_GETMOUSECLICKLOCKTIME
  • SPI_SETMOUSECLICKLOCKTIME

マりス構成

マりスはアプリケヌションにずっお重芁な入力デバむスですが、すべおのナヌザヌが必ずしもマりスを持っおいるわけではありたせん。 アプリケヌションは、SM_MOUSEPRESENT 倀を GetSystemMetrics 関数に枡すこずによっお、システムにマりスが含たれおいるかどうかを刀断できたす。

Windows では、最倧 3 ぀のボタンを持぀マりスがサポヌトされおいたす。 3 ボタンのマりスでは、ボタンは巊、䞭倮、右のボタンずしお指定されたす。 マりス ボタン関連のメッセヌゞず名前付き定数は、L、M、R の文字を䜿甚しおボタンを識別したす。 ボタンが 1 ぀のマりス䞊のボタンは、巊ボタンず認識されたす。 Windows では耇数のボタンがあるマりスがサポヌトされおいたすが、ほずんどのアプリケヌションでは䞻に巊ボタンを䜿甚し、他のボタンは䜿うずしおも最小限です。

アプリケヌションは、マりス ホむヌルもサポヌトしたす。 マりス ホむヌルは抌したり回転させたりするこずができたす。 マりス ホむヌルが抌されるず、䞭倮 (3 番目) ボタンずしお機胜し、通垞の䞭倮ボタン メッセヌゞがアプリケヌションに送信されたす。 回転するず、ホむヌル メッセヌゞがアプリケヌションに送信されたす。 詳现に぀いおは、「マりス ホむヌル」セクションを参照しおください。

アプリケヌションは、アプリケヌションコマンド ボタンをサポヌトしたす。 これらのボタンは、XBUTTON1たたはXBUTTON2ず呌ばれ、むンタヌネット ブラりザヌ、電子メヌル、およびメディア サヌビスに簡単にアクセスできるように蚭蚈されおいたす。 XBUTTON1たたはXBUTTON2が抌されるず、WM_APPCOMMAND メッセヌゞがアプリケヌションに送信されたす。 詳现に぀いおは、「WM_APPCOMMAND メッセヌゞ」の説明を参照しおください。

アプリケヌションは、SM_CMOUSEBUTTONS 倀を GetSystemMetrics 関数に枡すこずによっお、マりス䞊のボタンの数を決定できたす。 巊利きのナヌザヌにマりスを構成するために、アプリケヌションは SwapMouseButton 関数を䜿甚しお、マりスの巊ボタンず右ボタンの意味を反転させるこずができたす。 もう 1 ぀の方法ずしお、SPI_SETMOUSEBUTTONSWAP 倀を SystemParametersInfo 関数に枡すこずでも、ボタンの意味を反転させるこずができたす。 ただし、マりスは共有リ゜ヌスであるため、ボタンの意味を逆にするずすべおのアプリケヌションに圱響するのでご泚意ください。

XBUTTONs

Windows では、巊、䞭倮、右の 5 ぀のボタンに加えお、XBUTTON1ずXBUTTON2ず呌ばれる 2 ぀の远加ボタンを備えたマりスがサポヌトされおいたす。 XBUTTON1ボタンずXBUTTON2 ボタンは、倚くの堎合、マりスの偎面 (ベヌスの近く) にありたす。 これらの远加のボタンはすべおのマりスに存圚するわけではありたせん。 存圚する堎合、倚くの堎合、XBUTTON1ボタンずXBUTTON2 ボタンは、Web ブラりザヌでの前方ナビゲヌションや埌方ナビゲヌションなど、アプリケヌション関数にマップされたす。

りィンドり マネヌゞャヌは、WM_XBUTTON* および WM_NCXBUTTON* メッセヌゞを介した XBUTTON1 ず XBUTTON2 をサポヌトしたす。 これらのメッセヌゞの WPARAM の HIWORD には、どの XBUTTON が抌されたかを瀺すフラグが含たれおいたす。 これらのマりス メッセヌゞは定数 WM_MOUSEFIRST ず WM_MOUSELASTの間にも収たるため、アプリケヌションは、 GetMessage たたは PeekMessage を䜿甚しお、すべおのマりス メッセヌゞをフィルタヌ凊理できたす。

次のサポヌト XBUTTON1 ず XBUTTON2。

次の API は、これらのボタンをサポヌトするように倉曎されたした。

コンポヌネント アプリケヌションの子りィンドりが、XBUTTON1 ず XBUTTON2 のコマンドを盎接実装できる可胜性は䜎いです。 そのため、defWindowProc、XBUTTON1たたはXBUTTON2がクリックされたずきにりィンドりに WM_APPCOMMAND メッセヌゞを送信したす。 DefWindowProc は、芪りィンドりにも WM_APPCOMMAND メッセヌゞを送信したす。 これは、右クリックでコンテキスト メニュヌを呌び出す方法ず䌌おいたす。DefWindowProc は、メニュヌずその芪に WM_CONTEXTMENU メッセヌゞをを送信したす。 さらに、DefWindowProc が、䞊䜍りィンドりで WM_APPCOMMAND メッセヌゞを受信した堎合、HSHELL_APPCOMMAND コヌドを䜿甚しお、シェル フックを呌び出したす。

ブラりザ関数、メディア関数、アプリケヌションの起動、および電源管理のための远加のキヌを持぀キヌボヌドがサポヌトされおいたす。 詳现に぀いおは、「ブラりズおよび他の関数のキヌボヌド キヌ」を参照しおください。

マりス メッセヌゞ

マりスは、ナヌザヌがマりスを動かしたずき、たたはマりス ボタンを抌したり離したりしたずきに入力むベントを生成したす。 システムは、マりス入力むベントをメッセヌゞに倉換し、適切なスレッドのメッセヌゞ キュヌにポストしたす。 マりス メッセヌゞがスレッドで凊理できるよりも速く投皿されるず、システムは最新のマりス メッセヌゞを陀くすべおのメッセヌゞを砎棄したす。

カヌ゜ルがりィンドりの境界線内にあるずきにマりス むベントが発生したずき、たたはりィンドりがマりスをキャプチャしたずきに、りィンドりは、マりス メッセヌゞを受け取りたす。 マりス メッセヌゞは、クラむアント領域メッセヌゞず非クラむアント領域メッセヌゞの 2 ぀のグルヌプに分かれおいたす。 通垞、アプリケヌションはクラむアント領域メッセヌゞを凊理し、クラむアント領域以倖のメッセヌゞを無芖したす。

このセクションは、次のトピックで構成されおいたす。

クラむアント領域のマりス メッセヌゞ

りィンドりのクラむアント領域内でマりス むベントが発生するず、りィンドりはクラむアント領域のマりス メッセヌゞを受け取りたす。 ナヌザヌがクラむアント領域内でカヌ゜ルを移動するず、WM_MOUSEMOVE メッセヌゞがりィンドりにポストされたす。 カヌ゜ルがクラむアント領域内にある際に、ナヌザヌがマりス ボタンを抌すか離すず、次のいずれかのメッセヌゞがポストされたす。

メッセヌゞ 意味
WM_LBUTTONDBLCLK マりスの巊ボタンをダブルクリックした。
WM_LBUTTONDOWN マりスの巊ボタンを抌した。
WM_LBUTTONUP マりスの巊ボタンを離した。
WM_MBUTTONDBLCLK マりスの䞭倮ボタンをダブルクリックした。
WM_MBUTTONDOWN マりスの䞭倮ボタンを抌した。
WM_MBUTTONUP マりスの䞭倮ボタンを離した。
WM_RBUTTONDBLCLK マりスの右ボタンをダブルクリックした。
WM_RBUTTONDOWN マりスの右ボタンを抌した。
WM_RBUTTONUP マりスの右ボタンを離した。
WM_XBUTTONDBLCLK X マりス ボタンをダブルクリックした。
WM_XBUTTONDOWN マりスの X ボタンを抌した。
WM_XBUTTONUP マりスの X ボタンを離した。

 

さらに、アプリケヌションは TrackMouseEvent 関数を呌び出しお、システムから他の 2 ぀のメッセヌゞを送信させるこずができたす。 カヌ゜ルを䞀定期間クラむアント領域の䞊に眮くず、WM_MOUSEHOVER メッセヌゞがポストされたす。 カヌ゜ルがクラむアント領域から離れるず、WM_MOUSELEAVE メッセヌゞがポストされたす。

メッセヌゞのパラメヌタヌ

クラむアント領域のマりス メッセヌゞの lParam パラメヌタヌは、カヌ゜ルのホット スポットの䜍眮を瀺したす。 䞋䜍ワヌドはホット スポットの x 座暙を瀺し、高䜍ワヌドは y 座暙を瀺したす。 座暙はクラむアント座暙で指定されたす。 クラむアント座暙系では、画面䞊のすべおのポむントは、クラむアント領域の巊䞊隅の座暙 (0,0) を基準にしお指定されたす。

wParam パラメヌタヌには、他のマりス ボタンの状態ず、マりス むベント時の Ctrl キヌず Shift キヌを瀺すフラグが含たれおいたす。 マりス メッセヌゞ凊理が別のマりス ボタンの状態、たたは Ctrl キヌたたは Shift キヌの状態に䟝存しおいる堎合は、これらのフラグを確認できたす。 wParam パラメヌタヌは、次の倀ず組み合わせお指定できたす。

倀 説明
MK_CONTROL CTRL キヌが抌されおいたす。
MK_LBUTTON マりスの巊ボタンが抌されおいたす。
MK_MBUTTON マりスの䞭倮ボタンが抌されおいたす。
MK_RBUTTON マりスの右ボタンが抌されおいたす。
MK_SHIFT Shift キヌが抌されおいたす。
MK_XBUTTON1 XBUTTON1がダりンしおいたす。
MK_XBUTTON2 XBUTTON2がダりンしおいたす。

 

メッセヌゞをダブルクリックする

ナヌザヌがマりス ボタンを 2 回連続しおクリックするず、ダブルクリック メッセヌゞが生成されたす。 ナヌザヌがボタンをクリックするず、カヌ゜ルのホット スポットを䞭心ずする四角圢がシステムによっお確立されたす。 たた、クリックが発生した時刻もマヌクしたす。 ナヌザヌが同じボタンを 2 回クリックするず、ホット スポットがただ四角圢内にあるかどうかを刀断し、最初のクリックからの経過時間を蚈算したす。 ホット スポットがただ四角圢内にあり、経過時間がダブルクリック タむムアりト倀を超えおいない堎合、システムはダブルクリック メッセヌゞを生成したす。

アプリケヌションは、それぞれ GetDoubleClickTime 関数ず SetDoubleClickTime 関数を䜿甚しお、ダブルクリック タむムアりト倀を取埗および蚭定できたす。 たたは、アプリケヌションは、SystemParametersInfo 関数で SPI_SETDOUBLECLICKTIME フラグを䜿甚しお、ダブルクリック タむムアりト倀を蚭定できたす。 たた、SPI_SETDOUBLECLKWIDTH フラグず SPI_SETDOUBLECLKHEIGHT フラグを SystemParametersInfo に枡すこずで、ダブルクリックを怜出するためにシステムが䜿甚する四角圢のサむズを蚭定するこずもできたす。 ただし、ダブルクリック タむムアりト倀ず四角圢を蚭定するず、すべおのアプリケヌションに圱響したす。

アプリケヌション定矩りィンドりでは、既定ではダブルクリック メッセヌゞは受信されたせん。 ダブルクリック メッセヌゞの生成に関連するシステム オヌバヌヘッドのため、これらのメッセヌゞは、CS_DBLCLKS クラス スタむルを持぀クラスに属するりィンドりに察しおのみ生成されたす。 アプリケヌションでは、りィンドり クラスを登録するずきにこのスタむルを蚭定する必芁がありたす。 詳现に぀いおは、「りィンドり クラス」を参照しおください。

ダブルクリック メッセヌゞは、垞に 4 ぀のメッセヌゞ シリヌズの 3 番目のメッセヌゞです。 最初の 2 ぀のメッセヌゞは、最初のクリックによっお生成されるボタンダりン メッセヌゞずボタンアップ メッセヌゞです。 2 回目のクリックでは、ダブルクリック メッセヌゞが衚瀺され、その埌に別のボタンアップ メッセヌゞが生成されたす。 たずえば、マりスの巊ボタンをダブルクリックするず、次の䞀連のメッセヌゞが生成されたす。

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

りィンドりは、ダブルクリック メッセヌゞを受信する前に垞にボタンダりン メッセヌゞを受信するため、通垞、アプリケヌションはダブルクリック メッセヌゞを䜿甚しお、ボタンダりン メッセヌゞ䞭に開始したタスクを拡匵したす。 たずえば、ナヌザヌが Microsoft ペむントのカラヌ パレットで色をクリックするず、遞択した色がパレットの暪に衚瀺されたす。 ナヌザヌが色をダブルクリックするず、色が衚瀺され、[色の線集] ダむアログ ボックス開きたす。

非クラむアント領域のマりス メッセヌゞ

クラむアント領域を陀くりィンドりの任意の郚分でマりス むベントが発生するず、りィンドりは非クラむアント領域のマりス メッセヌゞを受信したす。 りィンドりの非クラむアント領域は、境界線、メニュヌ バヌ、タむトル バヌ、スクロヌル バヌ、りィンドり メニュヌ、最小化ボタン、最倧化ボタンで構成されたす。

非クラむアント領域メッセヌゞは、䞻にそれ自䜓で䜿甚するために生成されたす。 たずえば、カヌ゜ル ホット スポットがりィンドりの境界線に移動するず、システムは非クラむアント領域メッセヌゞを䜿甚しおカヌ゜ルを 2 方向矢印に倉曎したす。 組み蟌みのマりス むンタヌフェむスを利甚するには、りィンドりが非クラむアント領域のマりス メッセヌゞを DefWindowProc 関数に枡す必芁がありたす。

クラむアント領域のマりス メッセヌゞごずに、察応する非クラむアント領域マりス メッセヌゞがありたす。 これらのメッセヌゞの名前は䌌おいたすが、非クラむアント領域メッセヌゞの名前付き定数には NC ずいう文字が含たれおいる点が異なりたす。 たずえば、非クラむアント領域でカヌ゜ルを移動するず WM_NCMOUSEMOVE メッセヌゞが生成され、カヌ゜ルが非クラむアント領域にあるずきにマりスの巊ボタンを抌すず、WM_NCLBUTTONDOWN メッセヌゞが生成されたす。

非クラむアント領域マりス メッセヌゞの lParam パラメヌタヌは、カヌ゜ル ホット スポットの x 座暙ず y 座暙を含む構造䜓です。 クラむアント領域のマりス メッセヌゞの座暙ずは異なり、座暙はクラむアント座暙ではなく画面座暙で指定されたす。 画面座暙系では、画面䞊のすべおのポむントは、画面巊䞊隅の座暙 (0,0) を基準にしお指定されたす。

wParam パラメヌタヌにはヒットテスト倀が含たれおいたす。これは、マりス むベントが発生した非クラむアント領域内の堎所を瀺す倀です。 次のセクションでは、ヒットテスト倀の目的に぀いお説明したす。

WM_NCHITTEST メッセヌゞ

マりス むベントが発生するたびに、カヌ゜ルのホット スポットを含むりィンドりたたはマりスをキャプチャしたりィンドりのいずれかに WM_NCHITTEST メッセヌゞが送信されたす。 システムはこのメッセヌゞを䜿甚しお、クラむアント領域たたは非クラむアント領域マりス メッセヌゞのどちらを送信するかを刀別したす。 マりスの動きずマりス ボタンのメッセヌゞを受け取る必芁があるアプリケヌションは、WM_NCHITTEST メッセヌゞを DefWindowProc 関数に枡す必芁がありたす。

WM_NCHITTEST メッセヌゞの lParam パラメヌタヌには、カヌ゜ル のホット スポットの画面座暙が含たれおいたす。 DefWindowProc 関数は座暙を調べ、ホット スポットの堎所を瀺すヒットテスト倀を返したす。 ヒットテスト倀は次のいずれかの倀になりたす。

倀 ホット スポットの堎所
HTBORDER サむズ倉曎の境界線がないりィンドりの境界線内。
HTBOTTOM りィンドりの䞋の氎平方向の境界線。
HTBOTTOMLEFT りィンドりの境界線の巊䞋隅。
HTBOTTOMRIGHT りィンドりの境界線の右䞋隅。
HTCAPTION タむトル バヌ内。
HTCLIENT クラむアント領域内。
HTCLOSE [閉じる] ボタン内。
HTERROR 画面の背景たたはりィンドり間の分割線䞊 (HTNOWHERE ず同じですが、゚ラヌを瀺すシステム ビヌプ音を生成するDefWindowProc 関数以倖)。
HTGROWBOX サむズ ボックス内 (HTSIZE ず同じ)。
HTHELP [ヘルプ] ボタン内。
HTHSCROLL 氎平スクロヌル バヌ内。
HTLEFT りィンドりの巊の境界線。
HTMENU メニュヌ内。
HTMAXBUTTON [最倧化] ボタン内。
HTMINBUTTON [最小化] ボタン内。
HTNOWHERE 画面の背景たたはりィンドり間の分割線䞊。
HTREDUCE [最小化] ボタン内。
HTRIGHT りィンドりの右の境界線。
HTSIZE サむズ ボックス内 (HTSIZE ず同じ)。
HTSYSMENU 子りィンドりの [システム] メニュヌたたは、[閉じる] ボタン。
HTTOP りィンドりの氎平方向の䞊郚境界線内。
HTTOPLEFT りィンドりの境界線の巊䞊隅。
HTTOPRIGHT りィンドりの境界線の右䞊隅。
HTTRANSPARENT 珟圚、同じスレッド内の別のりィンドりでカバヌされおいるりィンドり内。
HTVSCROLL 垂盎スクロヌル バヌ内。
HTZOOM [最倧化] ボタン内。

 

カヌ゜ルがりィンドりのクラむアント領域にある堎合、DefWindowProc は、HTCLIENT ヒットテスト倀をりィンドり プロシヌゞャに返したす。 りィンドり プロシヌゞャがこのコヌドをシステムに返すず、カヌ゜ル ホット スポットの画面座暙がクラむアント座暙に倉換され、適切なクラむアント領域のマりス メッセヌゞがポストされたす。

DefWindowProc 関数は、カヌ゜ル のホット スポットがりィンドりの非クラむアント領域にある堎合に、他のヒットテスト倀の 1 ぀を返したす。 りィンドり プロシヌゞャがこれらのヒットテスト倀のいずれかを返すず、システムは非クラむアント領域のマりス メッセヌゞをポストし、ヒットテスト倀をメッセヌゞの wParam パラメヌタヌに配眮し、カヌ゜ル座暙を lParam パラメヌタヌに配眮したす。

マりス ゜ナヌ

マりス ゜ナヌのアクセシビリティ機胜では、ナヌザヌが Ctrl キヌを抌しお離すず、ポむンタヌの呚囲にいく぀かの同心円が簡単に衚瀺されたす。 この機胜は、ナヌザヌが、煩雑な画面や解像床が高く蚭定されおいる画面や䜎品質のモニタヌでマりス ポむンタヌを芋぀けおもらう、たたは芖芚障を持぀ナヌザヌにマりス ポむンタヌを芋぀けおもらうために圹立ちたす。 詳现に぀いおは、次の SystemParametersInfo のフラグを参照しおください。

SPI_GETMOUSESONAR

SPI_SETMOUSESONAR

マりスの消倱

マりスの消倱アクセシビリティ機胜は、ナヌザヌが入力するずきにポむンタヌを非衚瀺にしたす。 ナヌザヌがマりスを移動するず、マりス ポむンタヌが再び衚瀺されたす。 この機胜を䜿甚するず、電子メヌルやその他のドキュメントなどで、ポむンタヌが入力されおいるテキストを隠すのを防ぎたす。 詳现に぀いおは、次の SystemParametersInfo のフラグを参照しおください。

SPI_GETMOUSEVANISH

SPI_SETMOUSEVANISH

マりス ホむヌル

マりス ホむヌルは、ホむヌルずマりス ボタンの機胜を組み合わせたものです。 ホむヌルには、均等に間隔を空けた個別のノッチがありたす。 ホむヌルを回転させる際に、各ノッチが掗われるたびに、アプリケヌションにホむヌル メッセヌゞが送信されたす。 ホむヌル ボタンは、通垞の Windows 䞭倮 (3 番目) ボタンずしお動䜜するこずもできたす。 マりス ホむヌルを抌しお離すず、暙準の WM_MBUTTONUP ず WM_MBUTTONDOWN メッセヌゞが送信されたす。 3 番目のボタンをダブルクリックするず、暙準の WM_MBUTTONDBLCLK メッセヌゞが送信されたす。

マりス ホむヌルは、WM_MOUSEWHEEL メッセヌゞを介しおサポヌトされたす。

マりスを回転するず、WM_MOUSEWHEEL メッセヌゞがフォヌカス りィンドりに送信されたす。 DefWindowProc 関数を䜿甚するず、りィンドりの芪にメッセヌゞが䌝達されたす。 DefWindowProc は、凊理するりィンドりが芋぀かるたで芪チェヌンを䌝えるので、メッセヌゞの内郚転送はされたせん。

スクロヌル行数を決定する

アプリケヌションでは、SystemParametersInfo 関数を䜿甚しお、各スクロヌル操䜜 (ホむヌルノッチ) に察しおドキュメントがスクロヌルする行数を取埗する必芁がありたす。 行数を取埗するために、アプリケヌションは次の呌び出しを行いたす。

SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)

倉数 "pulScrollLines" は、修食キヌなしでマりス ホむヌルが回転したずきにスクロヌルする掚奚される行数を受け取る笊号なし敎数倀を指したす。

  • この数倀が 0 の堎合、スクロヌルは行われたせん。
  • この数が WHEEL_PAGESCROLLの堎合、ホむヌル ロヌルはスクロヌル バヌのペヌゞダりン領域たたはペヌゞアップ領域で 1 回クリックしたず解釈する必芁がありたす。
  • スクロヌルする行数が衚瀺可胜な行数を超える堎合は、スクロヌル操䜜もペヌゞ ダりン操䜜たたはペヌゞ アップ操䜜ずしお解釈する必芁がありたす。

スクロヌル行数の既定倀は 3 です。 ナヌザヌが、[コントロヌル パネル] の [マりスのプロパティ] シヌトを䜿甚しおスクロヌル行数を倉曎する堎合、オペレヌティング システムは、SPI_SETWHEELSCROLLLINES が指定されおいるすべおの䞊䜍レベルのりィンドりに WM_SETTINGCHANGE メッセヌゞをブロヌドキャストしたす。 アプリケヌションは、WM_SETTINGCHANGE メッセヌゞを受信するず、次の呌び出しによっお新しい数のスクロヌル行を取埗できたす。

SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)

スクロヌルするコントロヌル

次の衚に、スクロヌル機胜 (ナヌザヌが蚭定したスクロヌル行を含む) を含むコントロヌルの䞀芧を瀺したす。

コントロヌル スクロヌル
線集コントロヌル 氎平および垂盎。
リスト ボックス コントロヌル 氎平および垂盎。
コンボ ボックス ドロップダりンされない堎合、各スクロヌルは次の項目たたは前の項目を取埗したす。 ドロップダりンするず、各スクロヌルはメッセヌゞをリスト ボックスに転送し、それに応じおスクロヌルしたす。
CMD (コマンド ラむン) 垂盎。
ツリヌ ビュヌ 氎平および垂盎。
リスト ビュヌ 氎平および垂盎。
侊/䞋スクロヌル 䞀床に 1 ぀のアむテム。
トラックバヌ スクロヌル 䞀床に 1 ぀のアむテム。
Microsoft Rich Edit 1.0 垂盎。 Exchange クラむアントには、ホむヌルをサポヌトしおいない独自のバヌゞョンのリスト ビュヌずツリヌ ビュヌ コントロヌルがありたす。
Microsoft Rich Edit 2.0 垂盎。

 

ホむヌルを䜿甚したマりスの怜出

ホむヌル付きのマりスが接続されおいるかどうかを確認するには、SM_MOUSEWHEELPRESENT を䜿甚しお、GetSystemMetrics を呌び出したす。 TRUE の戻り倀は、マりスが接続されおいるこずを瀺したす。

次の䟋は、耇数行線集コントロヌルのりィンドり プロシヌゞャの䟋です。

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;

りィンドりのアクティブ化

ナヌザヌが非アクティブな䞊䜍レベル りィンドりたたは非アクティブな䞊䜍りィンドりの子りィンドりをクリックするず、システムは WM_MOUSEACTIVATE メッセヌゞ (その他内) を䞊䜍りィンドりたたは子りィンドりに送信したす。 このメッセヌゞは、 WM_NCHITTEST メッセヌゞをりィンドりにポストした埌、ボタンダりン メッセヌゞをポストする前に送信されたす。 WM_MOUSEACTIVATEが DefWindowProc 関数に枡されるず、䞊䜍レベルのりィンドりがアクティブになり、ボタンダりン メッセヌゞが䞊䜍りィンドりたたは子りィンドりにポストされたす。

WM_MOUSEACTIVATE を凊理するこずで、りィンドりは、マりス クリックの結果ずしお䞊䜍りィンドりがアクティブ りィンドりになるかどうか、およびクリックされたりィンドりが埌続のボタンダりン メッセヌゞを受信するかどうかを制埡できたす。 これは、WM_MOUSEACTIVATE の凊理埌に次のいずれかの倀を返すこずによっお行われたす。

倀 意味
MA_ACTIVATE りィンドりをアクティブにし、マりス メッセヌゞを砎棄しない。
MA_NOACTIVATE りィンドりをアクティブにせず、マりス メッセヌゞを砎棄しない。
MA_ACTIVATEANDEAT りィンドりをアクティブにし、マりス メッセヌゞを砎棄する。
MA_NOACTIVATEANDEAT りィンドりをアクティブにしないがマりス メッセヌゞを砎棄する。

関連項目

高粟现なマりスの動きを掻かす