

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
lparam・とは?基本の意味と役割
このページでは lparam・とは? について、初心者にも理解しやすいように丁寧に解説します。lparam は Windows のメッセージにおいて、イベントが発生したときにアプリへデータを渡す仕組みの一部です。Windows API には文字列や座標、ハンドルなどさまざまなデータが渡されます。これらのデータは LPARAM として 32bit の値で表現され、送信元と受信側で解釈されます。
実際には WM_xxx というメッセージが送られるときに、wParam と lParam のふたつのパラメータが渡されます。wParam は小さな値やハンドルを表すことが多く、lParam はポインタや大きなデータを渡すことが多い、と覚えておくと混同を防げます。
「wParam」と「lParam」の違い
先ほどの説明をまとめると、wParam は主に数値やウィンドウの識別子、ハンドルを表すことが多い、lParam はポインタや長いデータ、構造体の参照を表すことが多い、という点です。アプリ側でデータを取り出すときには、対象のメッセージに応じて適切に解釈します。
よく使われるメッセージの例と lParam の受け取り方
ここでは Windows の代表的なメッセージと、lParam がどのように使われるかを取り上げます。
| メッセージ | lParam の中身 | 使い方の例 |
|---|---|---|
| WM_LBUTTONDOWN | X座標とY座標を同じ値にまとめた「座標情報」 | GET_X_LPARAM(lParam) と GET_Y_LPARAM(lParam) を使ってマウスの位置を取得 |
| WM_NOTIFY | NMHDR* hdr = (NMHDR*)lParam; hdr->code などで通知コードを確認 | |
| WM_COPYDATA | COPYDATASTRUCT* 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 にはポインタを格納する場合と、座標・状態などの値を格納する場合があり、メッセージによって意味が異なる点に注意してください。



















