C言語・Windows RECTが渡せない
C言語のWindowsプログラムで、左クリック後に四角形の描画をしたいのですがうまくいきません。
WM_LBUTTONDOWNイベントで定義したRECT構造体を、別の関数に渡しRectangleで描画したいのですが、その関数内でRECTの値を調べるととんでもない値になっています。
何度やってもどうして値がおかしくなるのかわかりません。
WM_LBUTTONDOWNもWM_PAINTも正常に反応していると思います。
どうか知恵をお貸しくださいm(_ _)m
以下ソースコードのメッセージ処理部分です。
ウィンドウ生成のひな型はサイトの物を丸写しし、正常に動作することを確認しています。
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rcPos;
switch (msg){
case WM_LBUTTONDOWN:
rcPos.top =0;
rcPos.left =0;
rcPos.bottom =100;
rcPos.right =100;
InvalidateRect(hWnd, &rcPos, FALSE);
break;
//ウィンドウの描画
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
DrawGr(hWnd, hdc, &rcPos);
EndPaint(hWnd, &ps);
break;
//ウィンドウの削除
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd, msg, wParam, lParam));
}
return (0L);
}
//描画
int DrawGr(HWND hWnd, HDC hdc, RECT *rcPos)
{
int i;
HBRUSH hBrush, hOldBrush;
char *str_org = "rc.top=%d rc.left=%d rc.bottom=%d rc.right=%d";
char strx[256];
//四角形
hBrush = CreateSolidBrush(RGB(100, 100, 255));
hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);
//デバッグ用
wsprintf((LPSTR)strx, (LPCSTR)str_org, rcPos->top, rcPos->left, rcPos->bottom, rcPos->right);
MessageBox(hWnd, (LPCSTR)strx,
(LPCSTR)"終了確認", MB_OKCANCEL | MB_ICONQUESTION);
Rectangle(hdc, rcPos->left, rcPos->top, rcPos->right, rcPos->bottom);
SelectObject(hdc, hOldBrush);
DeleteObject(hBrush);
return 0;
}
お礼
回答ありがとうございます参考にします