C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Дебетовая карта Home Credit [CPS] RU

 Урок API 1 - Простое окошко / Уроки / Win32 API

Visual C++. API-функции
Урок 1. Простое окошко

В этом уроке мы с вами посмотрим, как можно создать просто окошко голыми ручками - безо всяких там Wizard'ов и т. д. Создайте новый пустой проект типа Win32 Application:

Новый проект

Добавьте в него файл реализации (с расширением *.cpp). В файл внесите следующий код:

#include <windows.h>
LONG WINAPI WndProc(HWND, UINT, WPARAM,LPARAM);

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR     lpCmdLine,
                   int       nCmdShow)
{
    HWND hwnd;
    MSG msg;
    WNDCLASS w;
    memset(&w,0,sizeof(WNDCLASS));
    w.style = CS_HREDRAW | CS_VREDRAW;
    w.lpfnWndProc = WndProc;
    w.hInstance = hInstance;
    w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    w.lpszClassName = "My Class";
    RegisterClass(&w);
    hwnd = CreateWindow("My Class", "My title", WS_OVERLAPPEDWINDOW,
        300, 200, 200, 180, NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd,nCmdShow);
    UpdateWindow(hwnd);
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

LONG WINAPI WndProc(HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{
    switch (Message){
    case WM_DESTROY: 
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, Message, wparam, lparam);
    }
    return 0;
}

Отомпилируйте и запустите программу. На экране должно появится что-то вроде:

Окно

Приступаем к обсуждению текста программы.

Любая программа на C/C++ для Windows должна иметь функцию WinMain (аналог main для консольных приложений). Эта функция у нас есть. Кроме того, должна присутствовать ещё одна функция - это так называемая оконная процедура. Она может называться как угодно (в нашем примере мы назвали её WndProc). Их задачи приблизительно следующие: WinMain отвечает за главное окно приложения - его создание, регистрация класса окна и т. п. Эта функция более-менее одинаковая во всех Windows -приложениях. Вторая функция (WinProc у нас) отвечает за обработку сообщений Windows. Вот эта-та часть и есть самая содержательная. Всё усложнение нашей программы будет идти именно здесь. Если мы хотим, что бы наша программа обращало на что-нибудь внимание, то мы должны добавить ещё одну веточку case для оператора switch в оконную процедуру (а именно так и называется функция WinProc). Например, хотим, чтобы наше приложение обращало внимание, что мы щелкаем в окошке левой кнопкой мыши - прибавляем веточку case WM_LBUTTONDOWN:. Хотим, чтобы что-нибудь делалось по таймеру - пишем код для веточки case WM_TIMER:. Сейчас в нашей оконной процедуре происходит только обработка сообщения WM_DESTROY. Это сообщение посылается окну, которое должно разрушиться. Больше наше окно пока ничего делать и не умеет.

Заголовочный файл windows.h нужем для любой традиционной Windows-программы на C. Именно в нём, скажем, содержаться разные определения констант (WM_DESTROY и т. п.) и многие другие полезные вещи.




Дебетовая карта Home Credit [CPS] RU