lparam・とは?初心者が知っておくべきWindowsメッセージの秘密と使い方ガイド共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
lparam・とは?初心者が知っておくべきWindowsメッセージの秘密と使い方ガイド共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)


lparam・とは?基本の意味と役割

このページでは lparam・とは? について、初心者にも理解しやすいように丁寧に解説します。lparam は Windows のメッセージにおいて、イベントが発生したときにアプリへデータを渡す仕組みの一部です。Windows API には文字列や座標、ハンドルなどさまざまなデータが渡されます。これらのデータは LPARAM として 32bit の値で表現され、送信元と受信側で解釈されます。

実際には WM_xxx というメッセージが送られるときに、wParamlParam のふたつのパラメータが渡されます。wParam は小さな値やハンドルを表すことが多くlParam はポインタや大きなデータを渡すことが多い、と覚えておくと混同を防げます。

「wParam」と「lParam」の違い

先ほどの説明をまとめると、wParam は主に数値やウィンドウの識別子、ハンドルを表すことが多いlParam はポインタや長いデータ、構造体の参照を表すことが多い、という点です。アプリ側でデータを取り出すときには、対象のメッセージに応じて適切に解釈します。

よく使われるメッセージの例と lParam の受け取り方

ここでは Windows の代表的なメッセージと、lParam がどのように使われるかを取り上げます。

メッセージlParam の中身使い方の例
WM_LBUTTONDOWNX座標とY座標を同じ値にまとめた「座標情報」GET_X_LPARAM(lParam) と GET_Y_LPARAM(lParam) を使ってマウスの位置を取得
WM_NOTIFYNMHDR* hdr = (NMHDR*)lParam; hdr->code などで通知コードを確認
WM_COPYDATACOPYDATASTRUCT* cds = (COPYDATASTRUCT*)lParam; cds->lpData でデータ参照
WM_COMMANDハンドルを含むことがあるHWND hwndCtl = (HWND)lParam; コントロールのハンドルを取得

上の例のように lParam はメッセージごとに「何が格納されているか」が大きく異なります。ポインタとして渡される場合はデータの寿命(どのくらい有効か)を確認することデータの整合性を確保することが重要です。特に 64bit 環境ではポインタのサイズが変わるため、キャストの際に型を間違えないようにしましょう。

使い方のポイントと注意点

lParam のデータを安全に扱うコツとして、以下の点を覚えておくと良いです。

1) lParam が指すデータの lifetime を確認する。呼び出し元がデータを解放してしまわないように注意。
2) ポインタを受け取る場合は適切なキャストを行う。例えば NMHDR*COPYDATASTRUCT* など、型を正しく変換する。
3) 64bit 環境では LONG_PTR/LPARAM のサイズが 64bit になる点を忘れずに。

実務での例として、あるアプリがマウスのドラッグでアイコンを動かす場合には、lParam の座標情報を使い現在の座標と目的の座標の差分を算出してドラッグ処理を行います。このように lParam はイベントの「現場データ」を渡す窓口です

まとめとして、lParam は Windows の各種メッセージでデータを渡す「窓口」です。扱いを誤るとデータの読み取りが壊れたり、プログラムが不安定になったりします。正しく理解して使いこなすことが、安定したアプリ開発の第一歩です。

簡易まとめ表

項目内容
LPARAM の意味さやポインタを表す値。64bit 環境では長さ・サイズが大きくなる。
よく使われる例WM_LBUTTONDOWN の座標、WM_NOTIFY の NMHDR など
注意点データのライフタイムと適切なキャストを意識すること

この説明が lparam の基本像をつかむ手助けになれば幸いです。分からない点があれば、実際のコードで試してみると理解が深まります。


lparamの同意語

LPARAM
Windows API のメッセージ処理で使われるパラメータの1つ。LONG_PTR 型の値を格納する引数で、WM_ 系メッセージの lParam(ケースによる表記)として使われます。
lParam
lParam は LPARAM の表記ゆれ。同じ意のパラメータを指し、ケースの違いだけです。
Long Pointer
LPARAM の英語表現の一部。長いポインタを意味する言い換えとして使われます。
ポインタ
日本語訳の表現。ポインタ型の値を格納する引数という意味です。
LONG_PTR
Windows API で使われる型名。符号付きのポインタ長整数で、ポインタの長さと同じ長さを表します。
長整数ポインタ値
LONG_PTR 型のポインタ値を指す表現。lParam の実体として解釈されることが多い値です。
ポインタ型引数
ポインタ型のデータを受け渡す引数のこと。lParam はそのような引数として解釈されます。
Windowsメッセージのパラメータ
Windows のウィンドウメッセージで使われる 2 つのパラメータのうちの1つ。
ウィンドウメッセージの引数
WM_ 系メッセージで使われる引数の一つ。lParam に相当する値です。
ポインタ値を表すパラメータ
ポインタの値を格納するパラメータという意味で使われます。

lparamの対義語・反対語

WPARAM
Windowsのメッセージで使われる第2パラメータ。符号なし整数型で、LPARAMの符号付き長整数/ポインタとは対になる役割を持つことが多い。実務では、値そのものを格納する用途に使われることが一般的です。
UINT_PTR
符号なしのポインタサイズ整数型。WPARAMの実体として用いられることが多く、ポインタサイズに合わせた符号なし整数を表現します。
ULONG_PTR
符号なし長整数。ポインタサイズに対応した符号なし整数型で、LPARAMの対になる unsigned 相当として使われることがあります。
LONG_PTR
符号付き長整数。LPARAM の型として使われることが多く、対になる unsigned 相当は UINT_PTR/ULONG_PTR です。
符号付き整数
LPARAM が符号付きの整数として使われるケースを指す一般概念。負の値を取り得る特徴がある。
符号なし整数
LPARAM の対義語として考えられる一般概念。負の値を取らず、0以上の値だけを扱います。

lparamの共起語

WPARAM
Windows API のメッセージ処理で使われる第2引数。値はメッセージごとに意味が変わり、ボタン状態や仮想キーコードなどが入ることが多い。
LPARAM
Windows API のメッセージパラメータの型。WndProc の第4引数として渡され、メッセージごとに意味が変わる。
HWND
ウィンドウを一意に識別するハンドル。多くの API で対象のウィンドウを指定する。
WNDPROC
ウィンドウプロシージャと呼ばれる、メッセージを処理するコールバック関数の型。
WM_LBUTTONDOWN
左クリックが発生したときのメッセージ。lParam にマウス座標が格納される(X,Y はクライアント座標)。
WM_LBUTTONUP
左ボタンが離されたときのメッセージ。lParam に座標が格納される。
WM_MOUSEMOVE
マウスが動いたときのメッセージ。lParam に現在の座標が含まれる。
WM_KEYDOWN
キーが押されたときのメッセージ。wParam に仮想キーコードが入る。
WM_PAINT
ウィンドウの再描画が必要なときのメッセージ。InvalidateRect などの操作の後に来ることが多い。
GetMessage
スレッドのメッセージキューから次のメッセージを取得する API。
DispatchMessage
取得したメッセージを適切なウィンドウプロシージャへ送る。
TranslateMessage
キーボード入力をキャラクターメッセージへ翻訳する補助 API。
SendMessage
対象ウィンドウに対してメッセージを同期的に送る API。
PostMessage
メッセージをキューに追加して後で処理されるように送る API。
MessageLoop
GetMessage/TranslateMessage/DispatchMessage のループ。アプリのメッセージ処理の中心。
GET_X_LPARAM
lParam から X 座標を取り出すマクロ(64bit 対応版)。
GET_Y_LPARAM
lParam から Y 座標を取り出すマクロ
LOWORD
32bit の下位 16bit を取り出すマクロ。座標や状態値の分解に使う。
HIWORD
32bit の上位 16bit を取り出すマクロ。

lparamの関連用語

lparam
Windows APIのメッセージ処理で使われる第4引数。メッセージごとに意味が異なり、ポインタ値や座標、状態情報などを格納します。
wparam
Windows APIの第3引数。ポインタ幅に合わせた符号なし整数(UINT_PTR 相当)で、メッセージの追加情報を格納します。
LPARAM
LPARAMは長さポインター幅の符号付き整数型。WndProcの第4引数として受け取り、メッセージごとに意味が変わります。
WPARAM
WPARAMはポインタ幅に合わせた符号なし整数型。WndProcの第3引数として使われ、メッセージの追加情報を渡します。
LRESULT
WndProcの戻り値の型。ポインタ幅の符号付き整数で、処理結果を返します。
WndProc
Window Procedureの略。ウィンドウが受けるイベント(メッセージ)を処理する関数。典型的には LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM) の形。
MSG
Windowsで使われるメッセージを1つ表す構造体。hwnd, message, wParam, lParam などの情報を1つの塊として渡します。
GetMessage
メッセージキューから次のメッセージを取得する関数。ループ内でイベントを待ち受ける際に使われます。
TranslateMessage
取得したキーボード入力に対する追加情報を生成する補助機能。主に文字入力の変換を助けます。
DispatchMessage
取得した MSG を対応するウィンドウの WndProc に渡して処理させる関数。
SendMessage
指定したウィンドウへ、同期的にメッセージを送信して処理を待つ関数。
PostMessage
指定したウィンドウへ、非同期的にメッセージをキューへ投入する関数。すぐには処理されません。
WM_LBUTTONDOWN
左ボタンが押されたことを知らせるメッセージ。クリック処理の起点として使われることが多いです。
WM_MOUSEMOVE
マウスがウィンドウ内を動いたときに発生するメッセージ。lParamに座標情報が格納されています。
WM_MOUSEWHEEL
マウスのホイールが動いたことを知らせるメッセージ。wParam や lParam に関連情報が含まれます。
GET_X_LPARAM
lParam から X 座標を取り出すマクロ。座標は通常、lParam の下位ワードに格納されています。
GET_Y_LPARAM
lParam から Y 座標を取り出すマクロ。座標は通常、lParam の上位ワードに格納されています。
GET_WHEEL_DELTA_WPARAM
wParam からホイールの回転量(デルタ)を取り出すマクロ。WM_MOUSEWHEEL で使われます。
LONG_PTR
ポインタ幅の符号付き整数型。LPARAM や LRESULT の基底型として使われることが多いです。
UINT_PTR
ポインタ幅の符号なし整数型。WPARAM の基底型として使われることが多いです。
ポインタと値の使い分け
lParam にはポインタを格納する場合と、座標・状態などの値を格納する場合があり、メッセージによって意味が異なる点に注意してください。

lparamのおすすめ参考サイト


インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14222viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2367viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1047viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
892viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
878viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
752viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
720viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
710viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
705viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
644viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
600viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
590viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
542viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
532viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
492viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
462viws
xlsmとは?初心者でも分かるExcelのマクロ付きファイルの基本共起語・同意語・対義語も併せて解説!
401viws
select句・とは?初心者でも分かるSQLの基本と使い方共起語・同意語・対義語も併せて解説!
383viws
wi-fiとは?初心者向けにわかりやすく解説する基礎ガイド共起語・同意語・対義語も併せて解説!
374viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
372viws

新着記事

インターネット・コンピュータの関連記事