Первый практикум по C++
C++ - Это очень сложный язык программирования. Дело в том, что это язык так называемых “Чёрных ящиков”.
Ряд процессов протекает ” за кадром”, и вы можете никогда о них не узнать и не обнаружить сделанные вами ошибки в коде.
То, чему нужно научиться первым делом.
Как вы знаете, ЛЮБОЕ приложение работает в окне. Так вот сейчас это самое окно мы и попробуем сделать:
HWND hwnd; //Собственно дескриптор окна
if(!(hwnd = CreateWindowEx(NULL,
"WINCLASS1",
"Имя окна",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
0,0,350,350, //Координаты и размер окна
NULL,NULL,
hinstance,NULL)))
return(0);
Как вы уже наверное заметили это окно имеет фиксированный размер: 400x400 пикселей, поэтому
функциональность этого окна оставляет желать лучшего.Если вам не лень, то можно сделать более "хорошее"
окно со всеми "прибамбасами": Определение класса, возможность изменения размера окна, присвоение окну иконки - "значка",
и многое другое... Это уже не просто окно, это уже целая программа. Вот код этого "окна":
// Подключаемые файлы
#define WIN32_LEAN_AND_MEAN
#include <windows.h> // Главный заголовочный файл
#include <windowsx.h> // Набор макросов
#include <stdio.h>
#include <math.h>
// Определения ////////////////////////////////////////////////
// Определения для окон
#define WINDOW_CLASS_NAME "WINCLASS1"
// Глобальные переменные ////////////////////////////////////////////////
// Функции //////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd,
UINT msg,
WPARAM wparam,
LPARAM lparam)
{
// Главный обработчик сообщений в системе
PAINTSTRUCT ps;
HDC hdc; // Дескриптор контекста устройства
// Полученное сообщение
switch(msg)
{
case WM_CREATE:
{
// Успешное завершение
return(0);
} break;
case WM_PAINT:
{
// Объявление окна действительным
hdc = BeginPaint(hwnd,&ps);
// Здесь выполняются все действия по выводу изображения
EndPaint(hwnd,&ps);
// Успешное завершение
return(0);
} break;
case WM_DESTROY:
{
// Завершение работы приложения
PostQuitMessage(0);
// Успешное завершение
return(0);
} break;
default:break;
}
// Обработка оставшихся сообщений
return (DefWindowProc(hwnd, msg, wparam, lparam));
}
// Начало WinMain ////////////////////////////////////////////////
int WINAPI WinMain( HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
WNDCLASSEX winclass; // Класс создаваемого окна
HWND hwnd; // Дескриптор окна
MSG msg; // Структура сообщения
// Заполнение структуры класса
winclass.cbSize = sizeof(WNDCLASSEX);
winclass.style = CS_DBLCLKS | CS_OWNDC |
CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc = WindowProc;
winclass.cbClsExtra = 0;
winclass.cbWndExtra = 0;
winclass.hInstance = hinstance;
winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName = NULL;
winclass.lpszClassName = WINDOW_CLASS_NAME;
winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); //Ваша иконка (значок)
// Регистрация класса
if (!RegisterClassEx(&winclass))
return(0);
// Создание окна
if (!(hwnd = CreateWindowEx(NULL,
WINDOW_CLASS_NAME,
"Название окна",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
0,0,
400,400,
NULL,
NULL,
hinstance,
NULL)))
return(0);
// Главный цикл событий
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// Возврат в Windows
return(msg.wParam);
} //WinMain
Остальное допишу потом!!!