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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
nanshakov
Студент :)
891 / 324 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
#1

Как сделать такое окно - C++

25.06.2012, 21:26. Просмотров 1463. Ответов 10
Метки нет (Все метки)

Всем доброго времени суток!У меня есть вопрос.Как можно сделать такое окно(смотртите прикрепление)?
Есть достоверная информация,что это приложение написано на Microsoft Visual C++ 6.0.Хочу в своем проекте использовать аналогичное окно.
UPD:Красная рамка - неподвижная область,зеленая - можно прокручивать вверх,вниз.
Если ошибся разделом,прошу перенести тему.
Миниатюры
Как сделать такое окно  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2012, 21:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать такое окно (C++):

Как сделать окно (окно домика) в пространстве, как на изображении? - C++
Здравствуйте, как сделать окно в пространстве, как на изображении? сделал крышу и "фундамент": for (int i = 0, x = 9; i < 21;...

как такое сделать ... - C++
Используя рекурсию, ввести группу данных и вывести их в обратном порядке, не объявляя массива.

Как сделать виндоусовское окно? - C++
как можно в си сделать виндоусовское окно? и можно какую-нибудь программу, например а + б, только в окне

Как можно сделать такое? (Автоматическое нажатие клавиш и все что с этим связанно) - C++
У меня возник вопрос как можно сделать чтоб программа автоматически нажимала на определенные клавиши? Например в игре GTA SAMP: Чтоб...

Как сделать, чтобы модальное окно закрылось по условию? - C++
Предполагается модальное диалоговое окно ProgressSave с прогресс баром и кнопкой ОК. Надо чтобы по завершении прогресса окно само...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nanshakov
Студент :)
891 / 324 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
26.06.2012, 00:37  [ТС] #2
т.е я понимаю,что нужно через API.Но по виду то оно консольное.И как там цвет "цветной" выведен,итп.?
T2skler
50 / 50 / 1
Регистрация: 16.05.2012
Сообщений: 231
26.06.2012, 00:40 #3
Цитата Сообщение от nanshakov Посмотреть сообщение
Всем доброго времени суток!У меня есть вопрос.Как можно сделать такое окно(смотртите прикрепление)?
Есть достоверная информация,что это приложение написано на Microsoft Visual C++ 6.0.Хочу в своем проекте использовать аналогичное окно.
UPD:Красная рамка - неподвижная область,зеленая - можно прокручивать вверх,вниз.
Если ошибся разделом,прошу перенести тему.
Создаёте консольное приложение, осваиваете Console API http://vsokovikov.narod.ru/New_MSDN_...ole/con_fn.htm и вперёд
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
26.06.2012, 06:16 #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Это не консольное приложение, а имитация консоли в чистом окне, то есть консоль, написанная с нуля. Видите, где выведено Server port , на скриншоте шрифт обрезан. Структура TEXTMETRIC задает параметры шрифта. CreateFont создает шрифт. Если установить параметры TEXTMETRIC некоторым образом, то шрифт будет обрезан таким образом.

Приложение создается с помощью WinMain. В программе он обернут в класс Game. Структура WNDCLASS предназначена для заполнения информации о классе, причем в окне скриншота заливка черной кистью (объект BRUSH). Затем регистрируется класс функцией RegisterClass. Создается окно функцией CreateWindow. Запуск оконной процедуры ( WNDPROC) и очереди сообщений GetMessage, TranslateMessage, PeekMessage.
Получение HDC окна функцией GetDC или BeginPaint. В окне рисуется текст таким образом, что имитируется консоль. Окно делится на 2 части. Первая часть обводится линиями: функции MoveToEx, LineTo. Цвет линии описывается переменной типа COLORREF, представляющую из себя DWORD значения. Для преобразования есть макрос RGB( R, G, B). Вывод с помощью TextOut. Для хранения строк можно использовать структуру в виде двусвязного списка. Один из параметров управляет цветом шрифта. При исполнении программы создается лог и выводится на экран. Скорее всего сделан специальный класс, имитирующий консоль.
Сделан специальный класс для работы с файловой системой ( Initializing File System), который занимается считыванием и записью файлов из архивов. Создан специальный формат файлов ltx. Сделан редактор файлов ltx.
Сделан класс 3д движка ( Initializing Engine), причем используется Direct3D
Сделан класс работы с сетью.
Сделан класс работы с устройствами ввода ( Starting Input Device)
Функции движка прописаны в динамических библиотеках: xRender_R2, xRender_R3, xRender_R1
Сделан класс обертка над WINAPI под названием Game - в ней располагается функции работы с оконом и его создания. Есть методы для чтения реестра: RegCreateKey, RegEnumKey, RegEnumValue, RegQueryValueEx и др.
Сделан класс для управления памятью, который выводит информацию об использовании памяти и ее выделении из кучи ( heap).

Server Name это параметр типа char*
Map это параметр типа char*
Players это два параметра типа int
Game Version это параметр типа int
nanshakov
Студент :)
891 / 324 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
26.06.2012, 09:42  [ТС] #5
Огромное списибо всем,кто ответил.Здесь даже больше информации,чем нужно!
-=ЮрА=-
Заблокирован
Автор FAQ
26.06.2012, 12:55 #6
nanshakov, помотри сюда,
Форматирование текста и изменение цвета текста в консоли цветной шрифт
Как рисовать элементарные геометрические фигуры? рисование графических примитивов

Да по наличию системного меню можно с уверенностью сказать приложение либо Win32Api либо MFC (SDI либо dialog based), но в консольке это всё даже проще написать
nanshakov
Студент :)
891 / 324 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
26.06.2012, 22:23  [ТС] #7
Только сейчас увидел,что в дисскусию закралась ошибка.На оригинальном окне нет красной\зеленой рамки.Это я их обвел,что бы показать,что верхняя часть статична,а нижняя(ограниченная рамкой)Двигается кнопками PGUP и PGDN.Разобрался с созданием она ,и выводом сообщений.Но
хотел узнать,что значит это
C++
1
2
// Forward declarations of functions included in this code module:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
и
C++
1
2
3
4
5
6
7
case WM_DESTROY:
        PostQuitMessage(0);
        break;
[B]    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;[/B]
    }
Добавлено через 2 часа 29 минут:Исправил,т.к в вопросе сам разобрался,чуть подправил пост.
nanshakov
Студент :)
891 / 324 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
27.06.2012, 19:34  [ТС] #8
Так,дело идет.Получилось сделать вывод текста.Но есть вопросы по коду.Может где то можно улучшить.оптимизировать,переписать?
Как лучше резервировать сообщения?Сейчас это просто
C++
1
2
3
4
5
6
7
//Описание сообщений
        TCHAR test[] = _T("Тестовое сообщение.");
        TCHAR Error[] = _T("Ошибка!");
        TCHAR VersionCore[] = _T("Версия ядра :");
        TCHAR VersionLua[] = _T("Версия Lua :");
        TCHAR FuncNotFound[] = _T("Функция не найдена!");
        TCHAR NotFound[] = _T("NotFound!");
Вывод на экран осуществляется через TextOut.Для вывода 3х сообщений приходиться городить достаточно много кода.Можно ли сделать так.что бы 1 строка - 1 вывод сообщения,сразу с цветом и смещением(которое приходиться прописывать руками?)Что сейчас:
C++
1
2
3
4
5
6
7
SetBkMode(hdc,TRANSPARENT);
        SetTextColor(hdc,RGB(0, 255, 0));
        TextOut(hdc, X, Y, test, _tcslen(test));
        SetTextColor(hdc,RGB(255, 0, 0));
        TextOut(hdc, X, Y+15, Error, _tcslen(Error));
        SetTextColor(hdc,RGB(0, 0, 255));
        TextOut(hdc, X, Y+15+15, VersionCore, _tcslen(VersionCore));
И весь код.
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
// Console.cpp
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include "Console.h"
#define COLOR_WINDOWTEXT        8
#define COLOR_BACKGROUND        1
#define COLOR_WINDOW            5
#define COLOR_WINDOWFRAME       6
#define X            5
#define Y            5
#ifndef WM_MOUSEWHEEL
#define WM_MOUSEWHEEL 0x020A
#endif
// Глобальные переменные
 
// Имя класса окна.
static TCHAR szWindowClass[] = _T("ConsoleAPI");
 
// Строка, которая появляется в строке заголовка приложения.
static TCHAR szTitle[] = _T("Console");
 
HINSTANCE hInst;
 
// Forward declarations of functions included in this code module:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    // адрес ф-ции обработки сообщений
    wcex.lpfnWndProc    = WndProc;
    // стиль окна
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    // стиль окна
    wcex.hInstance      = hInstance;
    //пиктограмма приложения
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    // загрузка курсора
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    // загрузка цвета окон
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+2);
    wcex.lpszMenuName   = NULL;
    // название класса
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL,
            _T("Ошибка регестрации окна!"),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    hInst = hInstance;
    HWND hWnd = CreateWindow(
        szWindowClass,
        szTitle,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        800, 600,
        NULL,
        NULL,
        hInstance,
        NULL
    );
 
    if (!hWnd)
    {
        MessageBox(NULL,
            _T("Ошибка вызова CreateWindow."),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    // Параметры ShowWindow обьяснение:
    // hWnd: Значение, возвращаемое CreateWindow
    // nCmdShow: Четвертый параметр из WinMain
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
 
    // Главный цикл обработки сообщений:
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return (int) msg.wParam;
}
 
//
//  ФУНКЦИИ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  ЦЕЛИ:  Processes messages for the main window.
//
//  WM_PAINT    - Отрисовка в окне
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    //Параметры шрифта.
    LOGFONT font;
    font.lfHeight =  15 ;// Устанавливает высоту шрифта или символа
    font.lfWidth =  0;// Устанавливает среднюю ширину символов в шрифте
    font.lfEscapement = 0;// Устанавливает угол, между вектором наклона и осью X устройства
    font.lfOrientation = 0;// Устанавливает угол, между основной линией каждого символа и осью X устройства
    font.lfWeight = 300;// Устанавливает толщину шрифта в диапазоне от 0 до 1000
    font.lfItalic = 0;// Устанавливает курсивный шрифт
    font.lfUnderline = 0;// Устанавливает подчеркнутый шрифт
    font.lfStrikeOut = 0;// Устанавливает зачеркнутый шрифт
    font.lfCharSet = RUSSIAN_CHARSET;// Устанавливает набор символов
    font.lfOutPrecision = 0;// Устанавливает точность вывода
    font.lfClipPrecision = 0;// Устанавливает точность отсечения
    font.lfQuality = 0;// Устанавливает качество вывода
    font.lfPitchAndFamily = 0;// Устанавливает ширину символов и семейство шрифта
    //strcpy(font.lfFaceName , "VERDANA");//  устанавливает название шрифта
    //Отключил.
 
    HFONT hfont;
    hfont = ::CreateFontIndirect(&font);
    HDC hdc; /* ссылка на контекст устройства
   Будьте внимательны! Этот контекст устройства мы получаем только на момент вызовов
   BeginPaint и EndPaint, после чего он освобождается (после обработки WM_PAINT).
   Контекст устройства в WinMain освобождается только перед завершением программы.
   Обе переменные ссылаются на один и тот же контекст устройства окна и носят одинаковое
   имя, но фактически это разные контексты устройства.*/
   static HPEN pen = NULL;
   static HBRUSH brush = NULL;
   static RECT rect = {0L};
   SCROLLINFO sinfo;
   PAINTSTRUCT paint;
   HGDIOBJ old1, old2;
   int off, tmp;
    //Описание сообщений
        TCHAR test[] = _T("Тестовое сообщение.");
        TCHAR Error[] = _T("Ошибка!");
        TCHAR VersionCore[] = _T("Версия ядра :");
        TCHAR VersionLua[] = _T("Версия Lua :");
        TCHAR FuncNotFound[] = _T("Функция не найдена!");
        TCHAR NotFound[] = _T("NotFound!");
    
    
    // обрабатываем сообщения
         // выборка и обработка сообщений
    switch (message)
    {
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        old1 = SelectObject(hdc, pen);
        old2 = SelectObject(hdc, brush);
        SelectObject(ps.hdc,hfont);
        SetBkMode(hdc,TRANSPARENT);
        SetTextColor(hdc,RGB(0, 255, 0));
        TextOut(hdc, X, Y, test, _tcslen(test));
        SetTextColor(hdc,RGB(255, 0, 0));
        TextOut(hdc, X, Y+15, Error, _tcslen(Error));
        SetTextColor(hdc,RGB(0, 0, 255));
        TextOut(hdc, X, Y+15+15, VersionCore, _tcslen(VersionCore));
        EndPaint(hWnd, &ps);
        break;
        off = GetScrollPos(hWnd, SB_VERT);
           // вот этот примитив будет подчинятся верт-скроллу
           RoundRect(hdc, rect.left, rect.top - off, rect.right, rect.bottom - off, 180, 180);
 
           SelectObject(hdc, old1);
           SelectObject(hdc, old2);
           EndPaint(hWnd, &paint);
           break;
      case WM_VSCROLL:
           sinfo.cbSize = sizeof(SCROLLINFO);
           sinfo.fMask = SIF_ALL;
           GetScrollInfo(hWnd, SB_VERT, &sinfo);
           off = sinfo.nPos;
           sinfo.fMask = SIF_POS;
 
           switch(LOWORD(wParam)) {
                case SB_THUMBTRACK:
                    sinfo.nPos = sinfo.nTrackPos;
                    break;
                case SB_LINEUP:
                    sinfo.nPos -= 2;
                    break;
                case SB_LINEDOWN:
                    sinfo.nPos += 2;
                    break;
           }
           SetScrollInfo(hWnd, SB_VERT, &sinfo, TRUE);
           tmp = GetScrollPos(hWnd, SB_VERT);
           if(off != tmp) {
                ScrollWindow(hWnd, 0, off - tmp, NULL, NULL);
                UpdateWindow(hWnd);
           }
           break;
      case WM_MOUSEWHEEL: // прокручивание-скролла колёсиком-мышки
           tmp = off = GetScrollPos(hWnd, SB_VERT);
           off = (HIWORD(wParam) == 0x78) ? off-8 : off+8;
           SetScrollPos(hWnd, SB_VERT, off, TRUE);
           off = GetScrollPos(hWnd, SB_VERT);
           if(tmp != off) {
                ScrollWindow(hWnd, 0, tmp - off, NULL, NULL);
                UpdateWindow(hWnd);
           }
           break;
      case WM_SIZE: 
           sinfo.cbSize = sizeof(SCROLLINFO); 
           sinfo.fMask = SIF_RANGE | SIF_PAGE; 
           sinfo.nMin = 0; 
           sinfo.nMax = rect.bottom;
           sinfo.nPage = HIWORD(lParam); 
           SetScrollInfo(hWnd, SB_VERT, &sinfo, TRUE); 
           break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        // обработка сообщений "по умолчанию"
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
    return 0;
}
Миниатюры
Как сделать такое окно  
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
27.06.2012, 21:19 #9
Все эти потуги с WinAPI имеют смысл только если цель - поковырятся в этом API. Если же цель написать что-нибудь работающее, то лучше воспользоватся гуевыми библиотеками.
nanshakov
Студент :)
891 / 324 / 10
Регистрация: 29.01.2011
Сообщений: 1,680
27.06.2012, 22:42  [ТС] #10
DU, Цель - покопаться.А какие GUI библиотеки вы посоветуйте?
asidorchenko
379 / 205 / 25
Регистрация: 09.04.2012
Сообщений: 635
27.06.2012, 23:50 #11
Можно ли сделать так.что бы 1 строка - 1 вывод сообщения,сразу с цветом и смещением(которое приходиться прописывать руками?)
Для этого нужно использовать ООП, обернув строку в класс.

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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
// Console.cpp
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#define COLOR_WINDOWTEXT        8
#define COLOR_BACKGROUND        1
#define COLOR_WINDOW            5
#define COLOR_WINDOWFRAME       6
#define X            5
#define Y            5
#ifndef WM_MOUSEWHEEL
#define WM_MOUSEWHEEL 0x020A
#endif
 
class SText
{
public:
TCHAR* str;
 
SText(HDC hdc, DWORD rgb, int x, int y, TCHAR* a)
{
str = a;
Draw(hdc, rgb, x, y);
}
 
void Draw(HDC hdc, DWORD rgb, int x, int y)
{
SetBkMode(hdc,TRANSPARENT);
SetTextColor(hdc,rgb);
TextOut(hdc, x, y, str, _tcslen(str));
}
};
 
// Глобальные переменные
 
 
// Имя класса окна.
static TCHAR szWindowClass[] = _T("ConsoleAPI");
 
// Строка, которая появляется в строке заголовка приложения.
static TCHAR szTitle[] = _T("Console");
 
HINSTANCE hInst;
 
// Forward declarations of functions included in this code module:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    // адрес ф-ции обработки сообщений
    wcex.lpfnWndProc    = WndProc;
    // стиль окна
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    // стиль окна
    wcex.hInstance      = hInstance;
    //пиктограмма приложения
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE
 
(IDI_APPLICATION));
    // загрузка курсора
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    // загрузка цвета окон
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+2);
    wcex.lpszMenuName   = NULL;
    // название класса
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE
 
(IDI_APPLICATION));
    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL,
            _T("Ошибка регестрации окна!"),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    hInst = hInstance;
    HWND hWnd = CreateWindow(
        szWindowClass,
        szTitle,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        800, 600,
        NULL,
        NULL,
        hInstance,
        NULL
    );
 
    if (!hWnd)
    {
        MessageBox(NULL,
            _T("Ошибка вызова CreateWindow."),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    // Параметры ShowWindow обьяснение:
    // hWnd: Значение, возвращаемое CreateWindow
    // nCmdShow: Четвертый параметр из WinMain
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
 
    // Главный цикл обработки сообщений:
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return (int) msg.wParam;
}
 
//
//  ФУНКЦИИ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  ЦЕЛИ:  Processes messages for the main window.
//
//  WM_PAINT    - Отрисовка в окне
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM 
 
lParam)
{
    PAINTSTRUCT ps;
    //Параметры шрифта.
    LOGFONT font;
    font.lfHeight =  15 ;// Устанавливает высоту шрифта или символа
    font.lfWidth =  0;// Устанавливает среднюю ширину символов в шрифте
    font.lfEscapement = 0;// Устанавливает угол, между вектором наклона 
 
и осью X устройства
    font.lfOrientation = 0;// Устанавливает угол, между основной линией 
 
каждого символа и осью X устройства
    font.lfWeight = 300;// Устанавливает толщину шрифта в диапазоне от 
 
0 до 1000
    font.lfItalic = 0;// Устанавливает курсивный шрифт
    font.lfUnderline = 0;// Устанавливает подчеркнутый шрифт
    font.lfStrikeOut = 0;// Устанавливает зачеркнутый шрифт
    font.lfCharSet = RUSSIAN_CHARSET;// Устанавливает набор символов
    font.lfOutPrecision = 0;// Устанавливает точность вывода
    font.lfClipPrecision = 0;// Устанавливает точность отсечения
    font.lfQuality = 0;// Устанавливает качество вывода
    font.lfPitchAndFamily = 0;// Устанавливает ширину символов и 
 
семейство шрифта
    //strcpy(font.lfFaceName , "VERDANA");//  устанавливает название 
 
шрифта
    //Отключил.
 
    HFONT hfont;
    hfont = ::CreateFontIndirect(&font);
    HDC hdc; /* ссылка на контекст устройства
   Будьте внимательны! Этот контекст устройства мы получаем только на 
 
момент вызовов
   BeginPaint и EndPaint, после чего он освобождается (после обработки 
 
WM_PAINT).
   Контекст устройства в WinMain освобождается только перед завершением 
 
программы.
   Обе переменные ссылаются на один и тот же контекст устройства окна и 
 
носят одинаковое
   имя, но фактически это разные контексты устройства.*/
   static HPEN pen = NULL;
   static HBRUSH brush = NULL;
   static RECT rect = {0L};
   SCROLLINFO sinfo;
   PAINTSTRUCT paint;
   HGDIOBJ old1, old2;
   int off, tmp;
    //Описание сообщений
        TCHAR test[] = _T("Тестовое сообщение.");
        TCHAR Error[] = _T("Ошибка!");
        TCHAR VersionCore[] = _T("Версия ядра :");
        TCHAR VersionLua[] = _T("Версия Lua :");
        TCHAR FuncNotFound[] = _T("Функция не найдена!");
        TCHAR NotFound[] = _T("NotFound!");
    
    
    // обрабатываем сообщения
         // выборка и обработка сообщений
    switch (message)
    {
    case WM_PAINT:
 
        hdc = BeginPaint(hWnd, &ps);
        old1 = SelectObject(hdc, pen);
        old2 = SelectObject(hdc, brush);
        SelectObject(ps.hdc,hfont);
    {
        SText a(hdc, RGB(0, 255, 0), X, Y+200, "SText test");
    }
        SetBkMode(hdc,TRANSPARENT);
        SetTextColor(hdc,RGB(0, 255, 0));
        TextOut(hdc, X, Y, test, _tcslen(test));
        SetTextColor(hdc,RGB(255, 0, 0));
        TextOut(hdc, X, Y+15, Error, _tcslen(Error));
        SetTextColor(hdc,RGB(0, 0, 255));
        TextOut(hdc, X, Y+15+15, VersionCore, _tcslen(VersionCore));
        EndPaint(hWnd, &ps);
        break;
        off = GetScrollPos(hWnd, SB_VERT);
           // вот этот примитив будет подчинятся верт-скроллу
           RoundRect(hdc, rect.left, rect.top - off, rect.right, 
 
rect.bottom - off, 180, 180);
 
           SelectObject(hdc, old1);
           SelectObject(hdc, old2);
           EndPaint(hWnd, &paint);
           break;
      case WM_VSCROLL:
           sinfo.cbSize = sizeof(SCROLLINFO);
           sinfo.fMask = SIF_ALL;
           GetScrollInfo(hWnd, SB_VERT, &sinfo);
           off = sinfo.nPos;
           sinfo.fMask = SIF_POS;
 
           switch(LOWORD(wParam)) {
                case SB_THUMBTRACK:
                    sinfo.nPos = sinfo.nTrackPos;
                    break;
                case SB_LINEUP:
                    sinfo.nPos -= 2;
                    break;
                case SB_LINEDOWN:
                    sinfo.nPos += 2;
                    break;
           }
           SetScrollInfo(hWnd, SB_VERT, &sinfo, TRUE);
           tmp = GetScrollPos(hWnd, SB_VERT);
           if(off != tmp) {
                ScrollWindow(hWnd, 0, off - tmp, NULL, NULL);
                UpdateWindow(hWnd);
           }
           break;
      case WM_MOUSEWHEEL: // прокручивание-скролла колёсиком-мышки
           tmp = off = GetScrollPos(hWnd, SB_VERT);
           off = (HIWORD(wParam) == 0x78) ? off-8 : off+8;
           SetScrollPos(hWnd, SB_VERT, off, TRUE);
           off = GetScrollPos(hWnd, SB_VERT);
           if(tmp != off) {
                ScrollWindow(hWnd, 0, tmp - off, NULL, NULL);
                UpdateWindow(hWnd);
           }
           break;
      case WM_SIZE: 
           sinfo.cbSize = sizeof(SCROLLINFO); 
           sinfo.fMask = SIF_RANGE | SIF_PAGE; 
           sinfo.nMin = 0; 
           sinfo.nMax = rect.bottom;
           sinfo.nPage = HIWORD(lParam); 
           SetScrollInfo(hWnd, SB_VERT, &sinfo, TRUE); 
           break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        // обработка сообщений "по умолчанию"
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2012, 23:50
Привет! Вот еще темы с ответами:

Как сделать, чтобы не закрывалось окно командной строки? - C++
после исполнения оно закрывается. Не посмотреть результат(((

как сделать консольное окно поверх всех окон - C++
сабж было бы очень удобно дебагить если можно было бы это сделать заранее спасибо

Как сделать что бы не показывало консольное окно, а сразу графическое? - C++
Добрый день, как сделать что бы не показывало консольное окно, а сразу графическое? #include &lt;graphics.h&gt; void Mov(int st) { int...

Как сделать так, чтобы окно консоли не сразу закрывалось - C++
подскажите пожалуйста, как сделать так чтобы окошко программы не сразу закрывалось, чтобы я мог просмотреть результат?


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

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

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