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
| #include <iostream>
#include <windows.h> //Два файла с определениями, макросами
#include <windowsx.h> //и прототипами функций Windows
#include <process.h>
#define IDC_EDIT1 101
#pragma comment (lib, "user32.lib")
#pragma comment (lib, "kernel32.lib")
#pragma comment (lib, "gdi32.lib")
HWND hwnd;
//глобальные переменные для рисования окна
HINSTANCE hInstance; HINSTANCE hPrevInst;
LPSTR lpszArgs; int nWinMode;
/*Прототип используемой в программе оконной функции */
LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);
/*Произвольный класс*/
class exemple
{
public:
/*Главная функция приложения WinMain*/
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInst,
LPSTR lpszArgs, int nWinMode) {
char szWinName[ ]="MyWindow"; //Произвольное имя класса главного окна
char szTitle[ ]="Программа"; //Произвольный заголовок окна
MSG msg; //Структура msg типа MSG для получения сообщений Windows
WNDCLASS wc; //Структура wc типа WNDCLASS для задания
//характеристик окна
/*Заполнение структуры wc типа WNDCLASS для описания класса главного окна*/
ZeroMemory(&wc,sizeof(wc)); //Обнуление всех членов структуры wc
wc.hInstance= hInstance; // Дескриптор приложения
wc.lpszClassName=szWinName; // Имя класса окна
wc.lpfnWndProc=WindowFunc; // Определение оконной функции
wc.style=0; // Стиль по умолчанию
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION); //Стандартная пиктограмма
wc.hCursor=LoadCursor(NULL,IDC_ARROW); //Стандартный курсор мыши
wc.hbrBackground=GetStockBrush(WHITE_BRUSH); // Белый фон окна
wc.lpszMenuName=NULL; // Без меню
wc.cbClsExtra=0; // Без дополнительной информации
wc.cbWndExtra=0; // Без дополнительной информации
/*Регистрация класса главного окна*/
if(!RegisterClass (&wc)) //Если класс окна не регистрируется
{ // выводим сообщение и заканчиваем выполнение программы
MessageBox (NULL,"Окно нерегестрируется","Ошибка",MB_OK);
return 1;} // возвращаем код ошибки
/*Создание главного окна и отображение его на мониторе*/
hwnd = CreateWindow ( //Вызов функции API для создания ок-на
szWinName, // имя класса главного окна
szTitle, // заголовок окна
WS_OVERLAPPEDWINDOW, // Стиль окна
100, // x-координата левого угла окна
100, // y-координата левого угла окна
500, // Ширина окна
100, // Высота окна
HWND_DESKTOP, // Без родительского окна
NULL, // Без меню
hInstance, // Дескриптор приложения
NULL); // Без дополнительных аргументов
ShowWindow (hwnd, SW_SHOW); // Вызов функции API
// для отображения окна
/*Организация цикла обнаружения сообщений*/
while(GetMessage(&msg,NULL,0,0)) // Если есть сообщение, передать его
// нашему приложению
{
TranslateMessage(&msg); //и вызвать оконную функцию WindowFunc
DispatchMessage(&msg);
}
return 0; //После выхода из цикла вернуться в Windows
} //Конец функции WinMain
};
/*Оконная функция WindowFunc главного окна, вызываемая Windows и получающая в качестве параметра сообщение из очереди сообщений данного приложения */
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam) {
HWND hwnd2;
switch(message) {
case WM_CREATE:
hwnd2 = CreateWindow ( //
"EDIT", // имя класса
NULL, // заголовок окна
WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|ES_LEFT |ES_MULTILINE| ES_AUTOVSCROLL, // Стиль окна
10, // x-координата левого угла окна
10, // y-координата левого угла окна
390, // Ширина окна
50, // Высота окна
hwnd, // Без родительского окна
(HMENU) IDC_EDIT1, // Без меню
(HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), // Дескриптор приложения
NULL); // Без дополнительных аргументов
ShowWindow (hwnd2, SW_SHOW);
return 0;
case WM_SETFOCUS:
SetFocus(hwnd2);
return 0;
// выбор по значению сообщения (message)
case WM_DESTROY: //При завершении приложения пользователем
PostQuitMessage (0); //вызвать функцию API завершения приложения
break;
default: // Все сообщения, не обрабатываемые данной функцией,
// направляются на обработку по умолчанию
return DefWindowProc (hwnd,message,wParam,lParam);
} //Конец оператора switch
return 0;
}
//главная функция консольного приложения
int main(void)
{
class exemple val;
val.WinMain( hInstance, hPrevInst, lpszArgs, nWinMode);
} |