Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ и WinAPI

Войти
Регистрация
Восстановить пароль
 
77Bender77
18 / 18 / 0
Регистрация: 16.12.2010
Сообщений: 145
#1

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

14.10.2012, 23:35. Просмотров 818. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перемещать не все фигуры разом, а только одну (C++ WinAPI):

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

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

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

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

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

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

2
castaway
Эксперт С++
4919 / 3027 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
15.10.2012, 00:17 #2
Слишком много непонятного текста, и слишком много вопросов.., что плохо совместимо.
0
77Bender77
18 / 18 / 0
Регистрация: 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? - C# WPF
Добрый день как можно перемещать фигуры синхронно, если они нарисованны на двух разных Canvas? Например я рисую на одной канве, а далее...

Разом уничтожить все потоки - C++ Builder
Всем привет! Создаю несколько потоков таким образом: int i = 0; for (Form3-&gt;ADOQuery1-&gt;First(); !Form3-&gt;ADOQuery1-&gt;Eof;...

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

Отметить все элементы разом (CheckListBox) - Delphi
В общем, нужно программно поставить галочки (или убрать их) на всех элементах CheckListBox сделал так: for i := 0 to...


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

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

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