Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
77Bender77
18 / 18 / 2
Регистрация: 16.12.2010
Сообщений: 145
#1

Перемещать не все фигуры разом, а только одну

14.10.2012, 23:35. Просмотров 872. Ответов 2
Метки нет (Все метки)

всем доброго времени суток! пытаюсь сделать следующее: в окне создать фигуру квадрат и перемещать его с клавы. это получилось, при условии что фигура уже созданна. начал переделывать - все пошло по одному месту, т.к. нужно чтобы при создании нескольких фигур и при перемещении активной остальные оставались на своих местах
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class myRectangle
{
    public:
        int X1,Y1,X2,Y2;
        int numbRect; // кол-во фигур
        int color;
        HDC hdc;
        HWND hWnd;
        int focus;
    myRectangle ()
    {
        X1=150;
        Y1=300;
        X2=250;
        Y2=400;
        numbRect=0;
        focus=0;
    }
    void MoveLeft(myRectangle& mf)
    {
        mf.X1-=10;
        mf.X2-=10;
        Rectangle(hdc,mf.X1,mf.Y1,mf.X2,mf.Y2);
        InvalidateRect(hWnd, NULL, TRUE);
        ReleaseDC(hWnd, hdc);
    }
    void MoveRight(myRectangle& mf)
    {
        mf.X1+=10;
        mf.X2+=10;
        Rectangle(hdc,mf.X1,mf.Y1,mf.X2,mf.Y2);
        InvalidateRect(hWnd, NULL, TRUE);
        ReleaseDC(hWnd, hdc);
    }
    void MoveUp(myRectangle& mf)
    {
        mf.Y1-=10;
        mf.Y2-=10;
        Rectangle(hdc,mf.X1,mf.Y1,mf.X2,mf.Y2);
        InvalidateRect(hWnd, NULL, TRUE);
        ReleaseDC(hWnd, hdc);
    }
    void MoveDown(myRectangle& mf)
    {
        mf.Y1+=10;
        mf.Y2+=10;
        Rectangle(hdc,mf.X1,mf.Y1,mf.X2,mf.Y2);
        InvalidateRect(hWnd, NULL, TRUE);
        ReleaseDC(hWnd, hdc);
    }
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
LRESULT CALLBACK FiguresWndProc(HWND hWnd, UINT Message,UINT wParam,LONG lParam )
{
    static HBRUSH Brushes[6];
    static HPEN Pens[2];
    Brushes[0]=CreateSolidBrush(RGB(255,0,0));
    Brushes[1]=CreateSolidBrush(RGB(0,255,0));
    Brushes[2]=CreateSolidBrush(RGB(0,0,255));
    Brushes[3]=CreateSolidBrush(RGB(255,0,102));
    Brushes[4]=CreateSolidBrush(RGB(255,255,0));
    Brushes[5]=CreateSolidBrush(RGB(255,255,255));
    Pens[0]   =CreatePen(0,1,RGB(255,255,255));
    Pens[1]   =CreatePen(0,7,RGB(0,0,0));
    static myRectangle rect[numb];
    static myEllipse ellps[numb];
    static int color=0;
    static int i;
    HDC hdc;
    RECT Rect;
    PAINTSTRUCT PaintStruct;
 
GetClientRect(hWnd,&Rect);
    hdc=BeginPaint(hWnd,&PaintStruct);
    SelectObject(hdc,Brushes[color]);
    SelectObject(hdc,Pens[0]);
    Rectangle(hdc,rect[0].X1,rect[0].Y1,rect[0].X2,rect[0].Y2);
    rect[0].numbRect++;
    switch(Message)
    {
        case WM_DESTROY:
                PostQuitMessage(0);
            return 0;       
        case WM_KEYDOWN:
                switch (wParam) {
                    case VK_RIGHT:
                 rect[0].MoveLeft(rect[0]);
                 case VK_LEFT:
                            rect[0].MoveLeft(rect[0]);
                            break;
                    case VK_UP:
                            rect[0].MoveUp(rect[0]);
                            break;
                    case VK_DOWN:
                            rect[0].MoveDown(rect[0]);
                            break;
                    case VK_C:
                            hdc = GetDC(hWnd);
                            if (color!=4) color++;
                                else color=0;
                            SelectObject(hdc,Brushes[color]);
                            SelectObject(hdc,Pens[0]);
Rectangle(hdc,rect[rect[0].focus].X1,rect[rect[0].focus].Y1,rect[rect[0].focus].X2,rect[rect[0].focus].Y2);
                            DeleteObject(Brushes[color]);
                            DeleteObject(Pens[0]);
                            ReleaseDC(hWnd,hdc);
                            break;
                    case VK_1:                          
                            if (rect[0].numbRect<numb)
                            {
                                hdc = GetDC(hWnd);
                                                                SelectObject(hdc,Brushes[color]);
                                                                SelectObject(hdc,Pens[0]);
Rectangle(hdc,rect[rect[0].numbRect].X1,rect[rect[0].numbRect].Y1,rect[rect[0].numbRect].X2,rect[rect[0].numbRect].Y2);                             
                                rect[0].focus=rect[0].numbRect;
                                for (i=0; i<numb; i++) rect[i].focus=0;
                rect[rect[0].numbRect].focus=1;                             
                                DeleteObject(Brushes[color]);
                                DeleteObject(Pens[0]);
                                ReleaseDC(hWnd,hdc);
                            }
                            break;
}   
    DeleteDC(hdc);
    EndPaint(hWnd,&PaintStruct);
    return DefWindowProc(hWnd,Message,wParam,lParam);
}
VK_01 - создание фигуры
VK_C - изменить цвет
понимаю, что нужно создать два контекста hdc для моих целей, но вот как раз с ними у меня и выходит путаница ...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 23:35
Ответы с готовыми решениями:

Нужно разом влить данные в 4 таблицы и вывести в одну общую
Кто понимает в базах, помогите)) до меня дойти не может просто.. Вот создаём одну общую таблицу из...

Как перемещать фигуры?
Есть окно, в нем небольшой прямоугольник. Хочу чтобы при нажатии клавиш вправло, влево, вверх, вниз...

Как при нажатии правой кнопки мыши перемещать фигуры, нарисованные на PictureBox
Как при нажатии правой кнопки мыши перемещать фигуры, нарисованные на picturebox?

Перемещать круг по вертикали с заданным шагом и задержкой в одну секунду.
вариант 4 :Перемещать круг по вертикали с заданным шагом и задержкой в одну секунду. Переделать...

Перемещать круг по вертикали с заданным шагом и задержкой в одну секунду
Программа должна состоять как минимум из двух частей – основной программы и модуля с описанием...

2
castaway
Эксперт С++
4930 / 3037 / 453
Регистрация: 10.11.2010
Сообщений: 11,116
Записей в блоге: 10
Завершенные тесты: 1
15.10.2012, 00:17 #2
Слишком много непонятного текста, и слишком много вопросов.., что плохо совместимо.
0
77Bender77
18 / 18 / 2
Регистрация: 16.12.2010
Сообщений: 145
15.10.2012, 12:34  [ТС] #3
я пытаюсь сделать создание + перемещение квадрата, при условии что квадратов может быть несколько на окне
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.10.2012, 12:34

Перемещать прямоугольник по вертикали с заданным шагом и задержкой в одну секунду
Составить программу на языке программирования Турбо-Паскаль, выполняющую действия, описываемые в...

Как можно перемещать фигуры синхронно, если они нарисованны на двух разных Canvas?
Добрый день как можно перемещать фигуры синхронно, если они нарисованны на двух разных Canvas?...

Перемещать треугольник по горизонтали с заданным шагом и задержкой в одну секунду (GraphABC)
Перемещать треугольник по горизонтали с заданным шагом и задержкой в одну секунду.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru