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

ВИДЕОКУРС ВЗЛОМ
выпущен 2 июля!


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

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



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.

Visual C++. API-функции
Урок 2. Функция WinMain

На этом уроке мы с вами обсудим, как устроена функция WinMain. Во-первых, её параметры:

int WINAPI WinMain(HINSTANCE hInstance,
 
                    HINSTANCE hPrevInstance,
 
                    LPSTR     lpCmdLine,
 
                    int       nCmdShow)

Первый параметр hInstance типа HINSTANCE указывает на экземпляр нашего приложения. Второй hPrevInstance тоже типа HINSTANCE указывал раньше (Windows 3.1) на предыдущий запущенный экземпляр нашего приложения. В современных версиях Windows он равен NULL. Третий (lpCmdLine) - это указатель на командную строку. И, наконец, последний параметр показывает, в каком виде должно запуститься наше приложение (в распахнутом или нормальном окне и т. п.).

Теперь переходим непосредственно к телу функции. Сначала мы заводим структуру для описания класса нашего окна:

WNDCLASS w;

Затем мы эту структуру заполняем:

    ...
 
     w.style = CS_HREDRAW | CS_VREDRAW;
 
     w.lpfnWndProc = WndProc;
 
     w.hInstance = hInstance;
 
     w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
 
     w.lpszClassName = "My Class";
 
     ...

Обратите внимание на строку

    w.lpfnWndProc = WndProc;

В ней мы указываем, что мы будем производить обработку сообщений для нашего окна в функции с именем WndProc (это имя второй функции в нашей программе - так называемой оконной процедуры).

Вообще-то у этой структуры полей значительно больше, но большинство из них можно поставить нулем. Это мы делаем строкой

memset(&w,0,sizeof(WNDCLASS));

Затем мы наш класс регистрируем:

RegisterClass(&w);

И создаем окно на его основе:

hwnd = CreateWindow("My Class","My title", WS_OVERLAPPEDWINDOW,
 
         300,200,200,180,NULL,NULL,hInstance,NULL);

То, что окно делается на основе нашего класса, ясно из первого параметра функции CreateWindow. Он совпадает с именем нашего зарегистрированного оконного класса (строка

w.lpszClassName = "My Class";

в тексте выше). Кстати говоря, класс здесь - это вовсе не класс в смысле ООП. Термин один, но смысла два. И исторически классы окон возникли раньше, чем классы ООП.

У функции CreateWindow параметров много. Второй - это заголовок окна, потом идут стили, местоположение и т. д. Подробности смотрите в MSDN.

Обратите внимание на возвращаемое функцией CreateWindow значение (переменная hwnd). Это указатель вновь созданного окна. Он нам понадобится ниже и в следующем уроке.

После того, как окно создано, его надо показать и обновить:

ShowWindow(hwnd,nCmdShow);
 
 UpdateWindow(hwnd);

После чего запускается цикл обработки сообщений:

while(GetMessage(&msg,NULL,0,0))
 
 {
 
     TranslateMessage(&msg);
 
     DispatchMessage(&msg);
 
 }

Цикл этот обрабатывает сообщения и вращается до тех пор, пока ваше окно не получит сообщения WM_DESTROY (только при получении этого сообщения наша функция GetMessage вернет FALSE и цикл закончится.



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

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




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



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


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