Первый практикум по C++



  • Главная страница
  • Введение
  • DarkBasic
  • C++
  • Полезные SOFT'ины
  • Гостевая книга


  • C++ - Это очень сложный язык программирования. Дело в том, что это язык так называемых “Чёрных ящиков”. Ряд процессов протекает ” за кадром”, и вы можете никогда о них не узнать и не обнаружить сделанные вами ошибки в коде.
    Hosted by uCoz

    То, чему нужно научиться первым делом.

    Как вы знаете, ЛЮБОЕ приложение работает в окне. Так вот сейчас это самое окно мы и попробуем сделать:


    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


    Остальное допишу потом!!!