戻る 第7章 マウスを使う。 次へ

ソース 実行ファイル
sdk07.cpp sdk07.exe

次はマウスを使って入力を受け取らせましょう。

前回と同じようにメッセージをつかいますが
結構種類が多いです。
WM_LBUTTONDBLCLK 左ダブルクリック
WM_LBUTTONDOWN 左クリック
WM_LBUTTONUP 左アップ
WM_RBUTTONDBLCLK 右ダブルクリック
WM_RBUTTONDOWN 右クリック
WM_RBUTTONUP 右アップ
WM_MOUSEMOVE マウスが動いた時
#include <windows.h> LRESULT CALLBACK WinProc(HWND hwnd, UINT msg,WPARAM wP, LPARAM lP) { HDC hdc; PAINTSTRUCT ps; char str[40]; switch(msg){ case WM_LBUTTONDBLCLK://左ダブルクリック hdc = GetDC(hwnd); wsprintf(str,"%s","左ダブルクリック"); TextOut(hdc,16,16,str,strlen(str)); ReleaseDC(hwnd,hdc); break; case WM_LBUTTONDOWN: break;//左クリック case WM_LBUTTONUP: break;//左アップ case WM_RBUTTONDBLCLK: break;//右ダブルクリック case WM_RBUTTONDOWN://右クリック hdc = GetDC(hwnd); wsprintf(str,"%s","右クリック    "); TextOut(hdc,16,16,str,strlen(str)); ReleaseDC(hwnd,hdc); break; case WM_RBUTTONUP: break;//右アップ case WM_MOUSEMOVE://マウスが動いた時 hdc = GetDC(hwnd); wsprintf(str,"X:%03d Y:%03d",LOWORD(lP),HIWORD(lP)); TextOut(hdc,16,48,str,strlen(str)); ReleaseDC(hwnd,hdc); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wP, lP); } return 0; } 最初にマウスに関するメッセージの一覧を表示しましたね。 それぞれクリック,ダブルクリックの取得や移動の取得です。 あと真中のクリックに対応するメッセージというのもありますが 実際に真中のボタンがあるマウスが少ないので今回は説明しません。 興味がある方はHelp等をご覧ください。 (ホイールマウスは又別です。これについては後述します。) 注意: ダブルクリックを受け取る場合はWindowクラスの設定で 受け取り許可のフラグを設定しなければいけません。 WNDCLASSEX wcl; char szWinName[] = "new_win"; wcl.cbSize = sizeof(WNDCLASSEX); wcl.hInstance = hThisInst; wcl.lpszClassName = szWinName; wcl.lpfnWndProc = WinProc; wcl.style = CS_DBLCLKS;//ダブルクリックの受け取り許可 wcl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wcl.hIconSm = LoadIcon(NULL, IDI_WINLOGO); wcl.hCursor = LoadCursor(NULL, IDC_ARROW); wcl.lpszMenuName = NULL; wcl.cbClsExtra = 0; wcl.cbWndExtra = 0; wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); 復習問題: 1.マウスのX座標が100以上ならメッセージを表示させてみましょう。 2.右クリック時にマウスの座標に文字を表示させましょう。