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

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
vadimiron
Сообщения: 5
Зарегистрирован: 25 окт 2004, 00:15

25 окт 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
Сообщения: 5
Зарегистрирован: 25 окт 2004, 00:15

25 окт 2004, 00:47

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