PDA

Просмотр полной версии : HELP Новичку в АПИ:изм-ние положения RECT-a при наж мышки



vadimiron
25.10.2004, 00:26
Я хотел сделать, чтобы надпись в окне сдвигалась на определённую велечину при нажатии на левую кнопку мыши в любом месте окна
Надпись я записываю в RECT. При нажатии на мышку вызываю InvalidateRect, чтобы перерисовать окно, а в WM_PAINT находятся смещения, на которые надпись должна переместиться
Короче вот мой код функции WndProc


LRESULT CALLBACK WinProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
char text[]="Blood Mary";
RECT rect;
SIZE size;
static int i=0;
if (i==0)
{
rect.left=100;
rect.top=50;
}


// Main SWITCH------------------------------------------------------------------
switch (Message)
{
case WM_LBUTTONDOWN:
{
i=1;
InvalidateRect(hwnd,NULL,TRUE);
return 0;
}
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
hdc=BeginPaint(hwnd,&ps);
GetTextExtentPoint32(hdc,text,strlen(text),&size);
rect.left+=20;
rect.top+=10;
rect.right=rect.left+size.cx;
rect.bottom=rect.top+size.cy;
DrawText(hdc,text,strlen(text),&rect,DT_CENTER|DT_VCENTER);
EndPaint(hwnd, &ps);
return 0;
}
case WM_DESTROY:
{
PostQuitMessage(0);
return 0;
}
default:
return DefWindowProc(hwnd, Message, wparam, lparam);
}
// END of Main SWITCH------------------------------------------------------------
return 0;
}


При запуске программы надпись отрисовывается, а вот при нажатии мышки исчезает и не появляется
Подскажите, что у меня неправильно, либо скажите как это можно осуществить :?:

vadimiron
25.10.2004, 00:47
Всё, сам проблему решил
Как всегда виновата невнимательность :(
rect надо было как static объявлять, то есть
static RECT rect;