(実際の画面例)

ウィンドウプロシージャのWM_LBUTTONDOWNというメッセージは、マウスの左ボタンがクリックされた時の
処理ですが、
hcur=SetCursor(LoadCursor(NULL, IDC_NO));
としています。
これでカーソルの形に禁止マークを設定しています。
Setcursorはuser32.dllにある関数で、マウスノカーソルに形状を設定します。
引数にはカーソルのハンドルを指定します。
LoadCursor(NULL, IDC_NO) は禁止マークの形のカーソルのハンドルをロードします。
同様にWM_RBUTTONDOWNというメッセージの処理では、
クロスの形のカーソルを設定しています。
#include "windows.h"
// 関数のプロトタイプ宣言
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
// エントリポイント
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
WNDCLASSEX wcex; // ウインドウクラス構造体
HWND hWnd; // ウインドウハンドル
MSG msg; // メッセージ構造体
// ウィンドウクラス構造体を設定します。
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "ModelApp";
wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// ウインドウクラスを登録します。
RegisterClassEx(&wcex);
// ウインドウを作成します。
hWnd = CreateWindow(wcex.lpszClassName, // ウインドウクラス名
"Cursor", // キャプション文字列
WS_OVERLAPPEDWINDOW, // ウインドウのスタイル
CW_USEDEFAULT, // 水平位置
CW_USEDEFAULT, // 垂直位置
CW_USEDEFAULT, // 幅
CW_USEDEFAULT, // 高さ
NULL, // 親ウインドウ
NULL, // ウインドウメニュー
hInstance, // インスタンスハンドル
NULL); // WM_CREATE情報
// ウインドウを表示します。
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// メッセージループ
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 戻り値を返します。
return msg.wParam;
}
// ウインドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
// メッセージの種類に応じて処理を分岐します。
switch (message)
{
HCURSOR hcur;
case WM_LBUTTONDOWN:
// ShowCursor(false);
hcur=SetCursor(LoadCursor(NULL, IDC_NO));
ShowCursor(true);
return 0;
case WM_RBUTTONDOWN:
// ShowCursor(false);
hcur=SetCursor(LoadCursor(NULL, IDC_CROSS));
ShowCursor(true);
return 0;
case WM_DESTROY:
// ウインドウが破棄されたときの処理
PostQuitMessage(0);
return 0;
default:
// デフォルトの処理
return DefWindowProc(hWnd, message, wParam, lParam);
}
(実際の画面例)

プロシージャウインドウの部分だけ説明します。
宣言部分に以下を宣言します。
PAINTSTRUCT構造体として 構造体変数psを宣言
表示する文字として、*txtに"X"を宣言
マウスの座標位置を入れる変数として、x,y
WM_LBUTTONDOWNメッセージの処理
マウスを左クリックしたときの処理になります。
マウスのクリック位置はlParamに保存されているので、取り出してx,yに代入します。
x=LOWORD(lParam);
y=HIWORD(lParam);
sprintfで文字列に変換して、MessageBoxで表示します。
sprintf(txt, "X:%d,Y:%d",x,y);
MessageBox(NULL,txt,"x,y",MB_OK);
WM_RBUTTONUPメッセージの処理
PostMessage関数でWM_DESTROYをメッセージを送ります。これによりプログラムは終了処理に移行します。
PostMessage(hWnd,(UINT)WM_DESTROY, 0,0)
#include "windows.h"
#include <stdio.h>
// 関数のプロトタイプ宣言
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
// エントリポイント
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
WNDCLASSEX wcex; // ウインドウクラス構造体
HWND hWnd; // ウインドウハンドル
MSG msg; // メッセージ構造体
// ウィンドウクラス構造体を設定します。
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "ModelApp";
wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
// ウインドウクラスを登録します。
RegisterClassEx(&wcex);
// ウインドウを作成します。
hWnd = CreateWindow(wcex.lpszClassName, // ウインドウクラス名
"Cursor0", // キャプション文字列
WS_OVERLAPPEDWINDOW, // ウインドウのスタイル
CW_USEDEFAULT, // 水平位置
CW_USEDEFAULT, // 垂直位置
CW_USEDEFAULT, // 幅
CW_USEDEFAULT, // 高さ
NULL, // 親ウインドウ
NULL, // ウインドウメニュー
hInstance, // インスタンスハンドル
NULL); // WM_CREATE情報
// ウインドウを表示します。
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// メッセージループ
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// 戻り値を返します。
return msg.wParam;
}
// ウインドウプロシージャ
LRESULT CALLBACK WndProc(HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
PAINTSTRUCT ps;
char txt[20];
static int x=0;
static int y=0;
// メッセージの種類に応じて処理を分岐します。
switch (message)
{
HCURSOR hcur;
case WM_LBUTTONDOWN:
// ShowCursor(false);
x=LOWORD(lParam);
y=HIWORD(lParam);
sprintf(txt, "X:%d,Y:%d",x,y);
MessageBox(NULL,txt,"x,y",MB_OK);
return 0;
case WM_RBUTTONUP:
PostMessage(hWnd,(UINT)WM_DESTROY, 0,0);
return 0;
case WM_DESTROY:
// ウインドウが破棄されたときの処理
PostQuitMessage(0);
return 0;
default:
// デフォルトの処理
return DefWindowProc(hWnd, message, wParam, lParam);
}
}