Пользователь
Регистрация: 31.01.2009
Сообщений: 26
|
[C++] Работа с мышью
Доброго времени суток!
Помогите пожалуйста в написании программы:
При щелчке левой клавиши мыши внутри прямоугольника, дожно выводится сообщение:
"Вы попали в прямоугольник!". В любых других случаях щелчки на клавиши мыши должны выдавать сообщение
"Здравствуй мир!". Все сообщения выводить в левом верхнем углу окна.
Как это можно реализовать?
Пробовал так:
Код:
case WM_LBUTTONDOWN:
xPos = 50;
yPos = 50;
TextOut(hDC,30,30,"Вы попали в прямоугольник!",lstrlen("Вы попали в прямоугольник!"));
break;
Не получилось. Что я делаю не так?
Сама программа:
Код:
#include <windows.h>
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
void DrawMessageAndEllipse(HWND hwnd,int x,int y,char *msg);
char szWinName[] ="MyWin";
int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, LPSTR lpszArgs, int nWinMode )
{
HWND hwnd;
MSG msg;
WNDCLASSEX wcl;
wcl.hInstance=hThisInst;
wcl.lpszClassName=szWinName;
wcl.lpfnWndProc=WindowFunc;
wcl.style=0;
wcl.cbSize = sizeof(WNDCLASSEX);
wcl.hIcon = LoadIcon(NULL,IDI_WINLOGO);
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);
if(!RegisterClassEx(&wcl)) return 0;
hwnd = CreateWindow (
szWinName,
"Демонстрация рисования графических примитивов, работы с мышью и клавиатурой",
WS_CAPTION|WS_BORDER|WS_SYSMENU,
CW_USEDEFAULT,
CW_USEDEFAULT,
640,
480,
HWND_DESKTOP,
NULL,
hThisInst,
NULL
);
ShowWindow(hwnd,nWinMode);
UpdateWindow(hwnd);
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
int xPos,yPos;
char buf[40];
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
xPos = LOWORD(lParam);
yPos = HIWORD(lParam);
wsprintf(buf,"Координаты X=%d Y=%d ",xPos,yPos);
hDC=GetDC(hwnd);
TextOut(hDC,30,30,buf,lstrlen(buf));
ReleaseDC(hwnd,hDC);
break;
case WM_PAINT:
DrawMessageAndEllipse(hwnd,10,10,"Здравствуй мир!");
break;
default:
return DefWindowProc(hwnd, message,wParam,lParam);
case WM_KEYDOWN:
switch (wParam)
{
case VK_ESCAPE:
exit(0);
break;
}
}
return 0;
}
void DrawMessageAndEllipse(HWND hwnd,int x,int y,char *msg)
{
HDC hDC;
PAINTSTRUCT paintStruct;
RECT clientRect;
HBRUSH br1;
HBRUSH br2;
COLORREF color1,color2,color3,color4,color5;
HPEN pen1,pen2,pen3;
color1=0x00990000; /* цвет - красный */
color2=0x00000099; /* цвет - синий */
color3=0x00009900; /* цвет - зеленый */
color4=0x0000FFFF; /* цвет - желтый */
color5=0x00000000; /* цвет - черный */
br1=CreateSolidBrush(color1);
br2=CreateSolidBrush(color4);
pen1=CreatePen(PS_DASH,3,color2);
pen2=CreatePen(PS_DASH,5,color3);
pen3=CreatePen(PS_DASH,2,color5);
hDC = BeginPaint(hwnd, &paintStruct);
if (hDC != NULL)
{
GetClientRect(hwnd, &clientRect);
SelectObject(hDC,br1);
SelectObject(hDC,pen1);
Rectangle(hDC,50,50,150,100);
SelectObject(hDC,br2);
SelectObject(hDC,pen2);
Ellipse(hDC,450,350,550,400);
SetTextColor(hDC, RGB(255,0,0));
TextOut(hDC,x,y,msg,lstrlen(msg));
SelectObject(hDC, pen3);
MoveToEx(hDC,270,280,NULL);
LineTo(hDC,320,220);
LineTo(hDC,370,280);
LineTo(hDC,270,280);
DeleteObject(pen1);
DeleteObject(br1);
DeleteObject(br2);
EndPaint(hwnd, &paintStruct);
}
}
Заранее большое спасибо!
|