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

C++ и WinAPI

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

Переключение между фигурами, исправить ошибку - C++ WinAPI

18.10.2012, 21:45. Просмотров 311. Ответов 0
Метки нет (Все метки)

всем доброго времени суток! работа с фигурами: перемещение, создание, переключение между ними и т.д. Вот как раз переключение (фокус) и не работает.
код:
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
class myRectangle
{
    public:
        int X1,Y1,X2,Y2;
        int numbRect;
        int color;
        HDC hdc;
        HWND hWnd;
        int focus;
        HBRUSH Brushes[6];
        HPEN Pens[2];
    myRectangle ()
    {
        X1=150;
        Y1=300;
        X2=250;
        Y2=400;
        numbRect=-1;
        color=0;
        focus=-1;
        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));
    }
    void MoveRight(myRectangle& mf)
    {
        mf.X1+=10;
        mf.X2+=10;
        InvalidateRect(hWnd, NULL, TRUE);
    }
    int CreateRect(myRectangle& mf, int n)
    {
        if((n+1)<numb)
        {
        n++;
        InvalidateRect(hWnd, NULL, TRUE);       
        }
        return n;
    }
};
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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 int numR=rect[0].numbRect; //кол-во квадратов
    static myEllipse ellps[numb];
    static int numE=ellps[0].numbEllps; //кол-во эллипсов
    static int countFocus=-1; //кол-во фигур
    static int nowFocus=-1; //сейчас в фокусе
 
    static int i=0;
    HDC hdc;
    RECT Rect;
    PAINTSTRUCT PaintStruct;
 
    switch(Message)
    {
        case WM_PAINT:
                GetClientRect(hWnd,&Rect);
                hdc=BeginPaint(hWnd,&PaintStruct);
 
                for (i=0; i<=numR; i++) 
                    {
                        if (nowFocus==rect[i].focus)
                        {
                            SelectObject(hdc,Brushes[rect[i].color]);
                            SelectObject(hdc,Pens[1]);
                            Rectangle(hdc,rect[i].X1,rect[i].Y1,rect[i].X2,rect[i].Y2);
                            DeleteObject(Pens[1]);
                            DeleteObject(Brushes[rect[i].color]);                           
                        }
                        else 
                        {
                            SelectObject(hdc,Brushes[rect[i].color]);
                            SelectObject(hdc,Pens[0]);
                            Rectangle(hdc,rect[i].X1,rect[i].Y1,rect[i].X2,rect[i].Y2);
                            DeleteObject(Pens[0]);
                            DeleteObject(Brushes[rect[i].color]);
                        }
                    }
                for (i=0; i<=numE; i++) 
                    {
                        if (nowFocus==ellps[i].focus)
                        {
                            SelectObject(hdc,Brushes[ellps[i].color]);
                            SelectObject(hdc,Pens[1]);
                            Ellipse(hdc,ellps[i].X1,ellps[i].Y1,ellps[i].X2,ellps[i].Y2);
                            DeleteObject(Pens[1]);
                            DeleteObject(Brushes[ellps[i].color]);
                        }
                        else
                        {
                            SelectObject(hdc,Brushes[ellps[i].color]);
                            SelectObject(hdc,Pens[0]);
                            Ellipse(hdc,ellps[i].X1,ellps[i].Y1,ellps[i].X2,ellps[i].Y2);
                            DeleteObject(Pens[0]);
                            DeleteObject(Brushes[ellps[i].color]);
                        }
                    }
 
                DeleteDC(hdc);
                EndPaint(hWnd,&PaintStruct);
                return 0;
        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;       
        case WM_KEYDOWN:
                switch (wParam) {
                    case VK_RIGHT:
                            for (i=0; i<=numR; i++)
                                if (nowFocus==rect[i].focus) 
                                    {
                                        rect[0].MoveRight(rect[numR]);
                                    }
                            for (i=0; i<=numE; i++)
                                if (nowFocus==ellps[i].focus) 
                                    {
                                        ellps[0].MoveRight(ellps[numE]);
                                    }
                            break;
                    case VK_1:
                            numR=rect[0].CreateRect(rect[numR],numR);
                            rect[numR].focus=++countFocus;
                            nowFocus=countFocus;
                            break;
                    case VK_2:
                            numE=ellps[0].CreateEllps(ellps[numE],numE);
                            ellps[numE].focus=++countFocus;
                            nowFocus=countFocus;
                            break;
                    case VK_TAB:
                            if(countFocus!=-1)
                            {
                                if(countFocus==nowFocus) nowFocus=0;
                                    else nowFocus++;
                                InvalidateRect(hWnd, NULL, TRUE);
                            }
                            break;
                }                   
    }   
    return DefWindowProc(hWnd,Message,wParam,lParam);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2012, 21:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переключение между фигурами, исправить ошибку (C++ WinAPI):

Переключение между CheckBox - C++ WinAPI
#define ID_CHBOX1 1 #define ID_CHBOX2 2 CreateWindow(L&quot;button&quot;,L&quot;Чек1&quot;,WS_CHILD|BS_AUTOCHECKBOX|WS_VISIBLE,5,5,50,10,hw, ...

Как сделать переключение между Edit'ами через Tab - C++ WinAPI
Задачка такова, есть программа на главном окне 2 button, 3 edit, 1 list, 5 static. Как сделать переключение по нажатию Tab между button,...

Как исправить ошибку? - C++ WinAPI
Поиск файлов в каталоге (к примеру в Temp) Выдаёт ошибку - невозможно преобразовать параметр 1 из 'const char ' в 'LPCWSTR' в строке -...

Как исправить ошибку в коде? - C++ WinAPI
Всем привет может кто подсказать что это за ошибка! Я вообще новичок в WinApi и начинающий Си Си++ ! Вот начал по книжке переписывать и...

Нужно исправить ошибку в программе - C++ WinAPI
#include&lt;windows.h&gt; using namespace std; LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); HWND hwnd, hwnd2; char...

Не могу понять как исправить ошибку - C++
#include &lt;vcl.h&gt; #pragma hdrstop #include &quot;Unit1.h&quot; //--------------------------------------------------------------------------- ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2012, 21:45
Привет! Вот еще темы с ответами:

Нужно исправить ошибку(Метод Хорд) - C++
Здравствуйте,помогите пожалуйста исправить ошибку в проге для нахождения корня методом хорд,две недели маюсь - ничего не выходит,заранее...

Оператор delete[]. Как исправить ошибку: Error HEAP CORRUPTED. Откуда утечка памяти? - C++ WinAPI
Код функции: void SeeAllTimesAllProcs() { HANDLE SnapHNDL = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32...

Исправить ошибку "error C2065: handle: необъявленый идентификатор" - C++ WinAPI
ShellExecute(handle,&quot;open&quot;,&quot;glava_15.htm&quot;,NULL,path.c_str(),SW_RESTORE); error C2065: handle: необъявленный идентификатор Функция...

Исправить ошибку "cannot convert 'char*' to 'LPWSTR" в QtCreator. - C++ WinAPI
Здравствуйте, в чём может быть причина? QString getWindowApplication(HWND Wnd) { QString appFileName; DWORD pid; ...


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

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

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