Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

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 и т. п.) и многие другие полезные вещи.



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS