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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Discovert
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 5
#1

Как вывести фигуру в окне? - C++

18.08.2014, 20:19. Просмотров 435. Ответов 9
Метки нет (Все метки)

Всем доброго дня.
Я знаком с C++ довольно поверхностно, но на уровне консольного приложения знаю, возможно, все. Начал изучать DirectX по книгам Горнакова С.Г., для пущего реализма поставил VC++6.0 и DX9 под WinXP - все, как у него. И все же постоянно приходится адаптировать код, чтобы избавиться от ошибок. До сего момента справлялся, однако теперь в тупике. Следующий код собирается/компилируется и якобы исполняется - в диспетчере приложений имя своего творения в списке процессов наблюдаю, однако никакого визуального эффекта кроме этого нет. Собственно, код:

Кликните здесь для просмотра всего текста
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#include <windows.h> 
#include <Winerror.h> 
#include <d3d9.h>
#pragma comment(lib, "d3d9.lib")
 
/*****************************Инициализация Direct3D************************************/
 
        /**---------------Глобальные переменные--------------**/
        /**/   LPDIRECT3D9 pDirect3D = NULL;                /**/
        /**/   LPDIRECT3DDEVICE9 pDirect3DDevice = NULL;    /**/
        /**/        struct CUSTOMVERTEX                     /**/
        /**/        {                                       /**/
        /**/        FLOAT X, Y, Z, rhw;                     /**/
        /**/        DWORD COLOR;                            /**/
        /**/        };                                      /**/
        /**/ LPDIRECT3DVERTEXBUFFER9 pBufferVershin = NULL; /**/
        /**--------------------------------------------------**/
 
#define D3DFVF_CUSTOMVERTEX D3DFVF_XYZRHW | D3DFVF_DIFFUSE  //Директива описывает формат хранения данных о вершинах полигона. Используемый вариант - FVF.
                
/*--------------------Функция инициализации Direct3D----------------------*/
 
    HRESULT InitialDirect3D(HWND hWnd)
    {
        if (NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)))
        return E_FAIL;
        D3DDISPLAYMODE Display;
        if (FAILED(pDirect3D -> 
                   GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))
        return E_FAIL;
        D3DPRESENT_PARAMETERS Direct3DParametr;
        ZeroMemory(&Direct3DParametr, sizeof(Direct3DParametr));
        Direct3DParametr.Windowed = TRUE;
        Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;
        Direct3DParametr.BackBufferFormat = Display.Format;
 
        if (FAILED(pDirect3D -> 
                   CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, 
                   hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, 
                   &Direct3DParametr, &pDirect3DDevice)))
        return E_FAIL;
        return S_OK;
    }
 
            /*Функция создания буфера для хранения данных о вершинах полигона*/
                        HRESULT InitialBufferVershin()
                        {
                            CUSTOMVERTEX Vershin[] = 
                            {
                                {300.0f, 300.0f, 0.5f, 1.0f, 0x00000ff}, //Вершина A
                                {150.0f, 300.0f, 0.5f, 1.0f, 0x00000ff}, //Вершина B
                                {150.0f, 150.0f, 0.5f, 1.0f, 0x00000ff}, //Вершина C
                                /* X       Y      Z     rhw     цвет */
                            };
                        if (FAILED(pDirect3DDevice -> CreateVertexBuffer(
                            3*sizeof(CUSTOMVERTEX),
                            0, D3DFVF_CUSTOMVERTEX,
                            D3DPOOL_DEFAULT,
                            &pBufferVershin, NULL)))
                            return E_FAIL;
                        VOID* pBV;
                        if (FAILED(pBufferVershin ->
                            Lock(0, sizeof(Vershin), (void**)&pBV, 0)))
                            return E_FAIL;
                        memcpy(pBV, Vershin, sizeof(Vershin)); //Копирование в буффер в случае неудачной проверки
                        pBufferVershin -> Unlock();            //Разблокирование
                        return S_OK;
                        }
                /*---------------------------Функция рисования----------------------------*/
 
                VOID RenderingDirect3D()
                {
                if (pDirect3DDevice == NULL) //Если ошибки не обнаружены
                    return;
                pDirect3DDevice -> Clear(0, NULL, D3DCLEAR_TARGET, 
                                        D3DCOLOR_XRGB(0, 255, 0), 1.0f, 0);
                pDirect3DDevice -> BeginScene();  //Начало сцены
 
                /*------------Вывод сцены на экран------------*/
pDirect3DDevice -> SetStreamSource(0, pBufferVershin, 0, sizeof(CUSTOMVERTEX));
pDirect3DDevice -> SetFVF(D3DFVF_CUSTOMVERTEX);
pDirect3DDevice -> DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
 
                pDirect3DDevice -> EndScene();  //Функция, завершающая сцену
                pDirect3DDevice -> Present(NULL, NULL, NULL, NULL);
                }
/*----------------Функция освобождения захваченных ресурсов-------------------*/
 
VOID DeleteDirect3D()
{
if (pBufferVershin != NULL) 
pBufferVershin -> Release();
if (pDirect3DDevice != NULL)  
pDirect3DDevice -> Release();
if (pDirect3D != NULL)        
pDirect3D -> Release();
}
 
/*-----------------------Функция обработки сообщений---------------------------*/
LRESULT CALLBACK MainWinProc (HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    switch(msg)
        {
        case WM_DESTROY:
            {
                DeleteDirect3D();
                PostQuitMessage(0);
                        return 0;
            }
        } //Конец switch-конструкции
    return DefWindowProc(hWnd, msg, wparam, lparam);
}
    /*----------------Функция входной точки приложения------------------*/
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,int iCmdShow)
    {
    HWND         hWnd;      //создаем дескриптор окна
    MSG          msg;       //создаем идентификатор сообщения
    WNDCLASSEX   wndclass;  //создаем класс окна
 
        wndclass.cbSize        = sizeof(WNDCLASSEX);
        wndclass.style         = CS_DBLCLKS|CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
        wndclass.lpfnWndProc   = MainWinProc;
        wndclass.cbClsExtra    = 0;
        wndclass.cbWndExtra    = 0;
        wndclass.hInstance     = hInstance;
        wndclass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
        wndclass.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH);
        wndclass.lpszMenuName  = NULL;
        wndclass.lpszClassName = "Window Class"; 
        wndclass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
 
        /*Активация функции рисования в главной функции программы*/
        while (msg.message != WM_QUIT)
        {
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    else
        RenderingDirect3D();
        }
    RenderingDirect3D();
        /*-------------Регистрация класса окна------------*/
        if(RegisterClassEx(&wndclass) == 0)
        return 0;
        /*-------------Создание окна приложения-----------*/
        if (!(hWnd = CreateWindowEx(
            NULL, "WINDOWSCLASS", "Рисуем треугольник", 
            WS_OVERLAPPEDWINDOW|WS_VISIBLE, 300, 150, 
            500, 400, NULL, NULL, hInstance, NULL)))
            return 0;
        if (SUCCEEDED(InitialDirect3D(hWnd)))
        {
            if (SUCCEEDED(InitialBufferVershin()))
            {
                ShowWindow(hWnd, SW_SHOWDEFAULT);
                UpdateWindow(hWnd);
                ZeroMemory(&msg, sizeof(msg));
                while(msg.message != WM_QUIT)
                {
                    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
                    {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                    }
                    else
                        RenderingDirect3D();
                }
            }
        }
        return 0;
    }


Комментарии сочинял сам и для себя, некоторые, вполне возможно, не точны или ошибочны - в DX я чайник.
Имеются у кого-нибудь идеи, что я делаю неправильно? Буду очень признателен, если поделитесь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2014, 20:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вывести фигуру в окне? (C++):

Как дополнить код Windows программы, чтобы она отобразила в окне геометрическую фигуру? - C++
Здравствуйте. У меня есть программа, которая выводит пустое Windows окно, что нужно добавить, чтобы в этом окне появилась геометрическая...

Вывести на экран фигуру из * - C++
Нужно нарисовать на экране вот такую фигуру (как на скриншоте). Нужно использовать for и if_else. Вот пример (шахматная доска): ...

Вывести фигуру звездочками - C++
Ребята, задали задачу не могу докумекать Нужно составить програмку, которая выдает на экран такую фигуру Нули не нужны, только...

Вывести на экран фигуру из символов - C++
День добрый! Помогите, пожалуйста, вывести формулу. Суть задачи такова: с помощью вложенной конструкции нужно вывести на экран косой крест,...

Вывести фигуру в трехмерном массиве на экран - C++
Программа должна демонстрировать работу с классом объявленным и определённым, класс применяется для работы с трёхмерным массивом . Он...

Вывести на экран геометрическую фигуру, заполняя ее символом * - C++
помогите, пожалуйста. Разработать программу, которая выводит на экран геометрическую фигуру, заполняя ее символом *. размер фигуры...

9
Jewbacabra
18.08.2014, 20:30
  #2

Не по теме:

Цитата Сообщение от Discovert Посмотреть сообщение
Начал изучать DirectX по книгам Горнакова С.Г.
кошмарная книга, лучше изучай по книгам Франка Луна

0
Discovert
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 5
18.08.2014, 20:41  [ТС] #3
Спасибо, книгу обязательно посмотрю. Честно говоря, у Горнакова порадовал стиль изложения - русский кодер все же, а также идея постепенного дополнения в ходе изучения изначального кода различными нововведениями - этой особенностью напомнило "С++ для чайников" Стефана Р. Дэвиса, с которого когда-то начинал и чьим трудом остался весьма доволен.
0
Brendon
Заблокирован
18.08.2014, 22:07 #4
О_о ... давненько я такого гавнакода не видел Ты уж извини за прямоту.
P.S.: ты вообще не понимаешь что делаешь.
P.S.S.: Изучение DirectX начинай с DirectX11 как минимум.
Начни с: http://d3dbegin.narod.ru/
Продолжи: Beginning DirectX 11 Game Programming
И добро пожаловать на http://gamedev.ru/

Держи в общем своё уже рабочее барахло.
Кликните здесь для просмотра всего текста
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#include <windows.h> 
#include <Winerror.h> 
#include <d3d9.h>
#pragma comment(lib, "d3d9.lib")
 
/*****************************Инициализация Direct3D************************************/
 
/**---------------Глобальные переменные--------------**/
/**/   LPDIRECT3D9 pDirect3D = NULL;                /**/
/**/   LPDIRECT3DDEVICE9 pDirect3DDevice = NULL;    /**/
/**/        struct CUSTOMVERTEX                     /**/
    /**/        {                                       /**/
    /**/        FLOAT X, Y, Z, rhw;                     /**/
    /**/        DWORD COLOR;                            /**/
    /**/
};                                      /**/
/**/ LPDIRECT3DVERTEXBUFFER9 pBufferVershin = NULL; /**/
/**--------------------------------------------------**/
 
#define D3DFVF_CUSTOMVERTEX D3DFVF_XYZRHW | D3DFVF_DIFFUSE  //Директива описывает формат хранения данных о вершинах полигона. Используемый вариант - FVF.
 
/*--------------------Функция инициализации Direct3D----------------------*/
 
HRESULT InitialDirect3D(HWND hWnd)
{
    if (NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)))
        return E_FAIL;
    D3DDISPLAYMODE Display;
    if (FAILED(pDirect3D ->
        GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))
        return E_FAIL;
    D3DPRESENT_PARAMETERS Direct3DParametr;
    ZeroMemory(&Direct3DParametr, sizeof(Direct3DParametr));
    Direct3DParametr.Windowed = TRUE;
    Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;
    Direct3DParametr.BackBufferFormat = Display.Format;
 
    if (FAILED(pDirect3D ->
        CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
        hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
        &Direct3DParametr, &pDirect3DDevice)))
        return E_FAIL;
    return S_OK;
}
 
/*Функция создания буфера для хранения данных о вершинах полигона*/
HRESULT InitialBufferVershin()
{
    CUSTOMVERTEX Vershin[] =
    {
        { 300.0f, 300.0f, 0.5f, 1.0f, 0x00000ff }, //Вершина A
        { 150.0f, 300.0f, 0.5f, 1.0f, 0x00000ff }, //Вершина B
        { 150.0f, 150.0f, 0.5f, 1.0f, 0x00000ff }, //Вершина C
        /* X       Y      Z     rhw     цвет */
    };
    if (FAILED(pDirect3DDevice->CreateVertexBuffer(
        3 * sizeof(CUSTOMVERTEX),
        0, D3DFVF_CUSTOMVERTEX,
        D3DPOOL_DEFAULT,
        &pBufferVershin, NULL)))
        return E_FAIL;
    VOID* pBV;
    if (FAILED(pBufferVershin ->
        Lock(0, sizeof(Vershin), (void**)&pBV, 0)))
        return E_FAIL;
    memcpy(pBV, Vershin, sizeof(Vershin)); //Копирование в буффер в случае неудачной проверки
    pBufferVershin->Unlock();            //Разблокирование
    return S_OK;
}
/*---------------------------Функция рисования----------------------------*/
 
VOID RenderingDirect3D()
{
    if (pDirect3DDevice == NULL) //Если ошибки не обнаружены
        return;
    pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET,
        D3DCOLOR_XRGB(0, 255, 0), 1.0f, 0);
    pDirect3DDevice->BeginScene();  //Начало сцены
 
    /*------------Вывод сцены на экран------------*/
    pDirect3DDevice->SetStreamSource(0, pBufferVershin, 0, sizeof(CUSTOMVERTEX));
    pDirect3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
    pDirect3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
 
    pDirect3DDevice->EndScene();  //Функция, завершающая сцену
    pDirect3DDevice->Present(NULL, NULL, NULL, NULL);
}
/*----------------Функция освобождения захваченных ресурсов-------------------*/
 
VOID DeleteDirect3D()
{
    if (pBufferVershin != NULL)
        pBufferVershin->Release();
    if (pDirect3DDevice != NULL)
        pDirect3DDevice->Release();
    if (pDirect3D != NULL)
        pDirect3D->Release();
}
 
/*-----------------------Функция обработки сообщений---------------------------*/
LRESULT CALLBACK MainWinProc(HWND hWnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
    switch (msg)
    {
    case WM_DESTROY:
    {
                       DeleteDirect3D();
                       PostQuitMessage(0);
                       return 0;
    }
    } //Конец switch-конструкции
    return DefWindowProc(hWnd, msg, wparam, lparam);
}
/*----------------Функция входной точки приложения------------------*/
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
    HWND         hWnd;      //создаем дескриптор окна
    MSG          msg = { 0 };       //создаем идентификатор сообщения
    WNDCLASSEX   wndclass;  //создаем класс окна
 
    wndclass.cbSize = sizeof(WNDCLASSEX);
    wndclass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
    wndclass.lpfnWndProc = MainWinProc;
    wndclass.cbClsExtra = 0;
    wndclass.cbWndExtra = 0;
    wndclass.hInstance = hInstance;
    wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
    wndclass.lpszMenuName = NULL;
    wndclass.lpszClassName = "WINDOWSCLASS";
    wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
 
    /*-------------Регистрация класса окна------------*/
    if (RegisterClassEx(&wndclass) == 0)
        return 0;
    /*-------------Создание окна приложения-----------*/
    if (!(hWnd = CreateWindowEx(
        NULL, "WINDOWSCLASS", "Рисуем треугольник",
        WS_OVERLAPPEDWINDOW | WS_VISIBLE, 300, 150,
        500, 400, NULL, NULL, hInstance, NULL)))
        return 0;
    if (SUCCEEDED(InitialDirect3D(hWnd)))
    {
        if (SUCCEEDED(InitialBufferVershin()))
        {
            ShowWindow(hWnd, SW_SHOWDEFAULT);
            UpdateWindow(hWnd);
            ZeroMemory(&msg, sizeof(msg));
            while (msg.message != WM_QUIT)
            {
                if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
                {
                    TranslateMessage(&msg);
                    DispatchMessage(&msg);
                }
                else
                    RenderingDirect3D();
            }
        }
    }
    return 0;
}
1
Discovert
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 5
18.08.2014, 22:17  [ТС] #5
Brendon,да, ты 100 % прав - я не ведаю, что творю )
"Изучение DirectX начинай с DirectX11 как минимум" - это как понимать? А максимум че, DirectX15 ?
Короче, от души, ты реально помог, в особенности ссылками. Действительно бесит, когда "не втыкаешь" в какие-то моменты с самого начала, а все эти книги говорят о них как об "очевидных вещах, любой дурак, мол, знает". А мне бы сначала все, в стиле "...вот эту кнопочку нажимаем для того-то, а эту буковку пишем затем-то..."
0
Brendon
Заблокирован
18.08.2014, 22:27 #6
Цитата Сообщение от Discovert Посмотреть сообщение
это как понимать? А максимум че, DirectX15 ?
После DirectX11 есть уже DirectX11.1 и DirectX11.2 (Window8.1). Скоро выходит DirectX12.
Ну вообще AMD собирается скоро Mantle запускать, который по их словам, порвёт DirectX, а Microsoft говорит, что DirectX12 порвёт Mantle
0
Ведущий
Заблокирован
19.08.2014, 04:01 #7
Как вывести фигуру в окне?
Начал изучать DirectX
А зачем для таких простых вещей нужен DirectX?
Фигура трехмерная? Или Вы планируете писать игры, а не приложения с окошками со стандартными кнопочками и пр.?
0
Discovert
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 5
19.08.2014, 07:24  [ТС] #8
Ведущий, Вы знаете, и то, и другое, вероятно. Но для приложений с окошками я привык обходиться с помощью Delphi, да и в C++ для этого вовсе не обязателен DirectX, я в курсе. Так что в случае с cpp меня интересуют именно игры Я знаю также, что существуют различные конструкторы игр, но это не то - я хочу четко понимать, что и когда я делаю, а DirectX, а не, скажем, OpenGL - по двум причинам: во-первых, я уверен, что в ближайшие десятилетия с Windows ничего не случится (с DX, соответственно, тоже), а во-вторых - DirectX сложнее, на мой взгляд, и это своеобразный вызов - не люблю начинать с простого, если от него позже все равно придется отказываться в пользу чего-то более сложного, тем более что от этого простого (например, OpenGL) не будет пользы в дальнейшем - лишняя трата драгоценного времени, получается.

З.Ы. Извините, "поумничаю" - фигура априори двумерна, трехмерный объект принято называть телом
Мой треугольник в этом, как его назвали "гавнакоде" (псевдо-)трехмерен лишь потому, что этого требует функция, но координата Z тут не используется.
0
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 2,004
19.08.2014, 11:59 #9
Цитата Сообщение от Discovert Посмотреть сообщение
DirectX сложнее
я думал наоборот)
0
Discovert
0 / 0 / 0
Регистрация: 18.08.2014
Сообщений: 5
19.08.2014, 12:16  [ТС] #10
dzrkot, Ну, азы OpenGL я понял примерно через час после того, как начал о нем читать, а вот в DirectX я ничего не могу понять уже неделю Может быть, это субъективно, конечно...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2014, 12:16
Привет! Вот еще темы с ответами:

Вывести в окне фигуры: домик, человечек, солнце - C++
Используя различные фигуры (точка, линия, эллипс, круг, прямоугольник и др.) вывести в окне фигуры: домик, человечек, солнце. Фигуры должны...

Вывести на экран геометричесую фигуру, которая состоит из символов "*" - C++
Помогите составить програму которая выводит на экран геометричесую фигуру которая состоит из символов &quot;*&quot; . Буду очень благодарен за...

При помощи функции вывести на экран фигуру в виде буквы "Н". - C++
Помогите! Решить задачу, которая при помощи функции выводит на экран фигуру в виде буквы &quot;Н&quot;.

Вывести текст по словам в окне с определенными интервалами времени - C++
не получается вывести текст по словам в окне с определенными интервалами времени


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
19.08.2014, 12:16
Ответ Создать тему
Опции темы

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