Форум города Днепр (Днепропетровска)
Форум города Днепр

Вернуться   Форум города Днепр (Днепропетровска) > КОМПЬЮТЕРЫ и программы > Онлайн уроки > Уроки C++

Уроки C++ Уроки C++

 
 
Опции темы Опции просмотра
Старый 22.03.2011, 13:46   #1
Strelok
Бессмертный
 
Аватар для Strelok
 
Регистрация: 22.01.2009
Адрес: Ф жДуНгЛяХ
Сообщений: 1,388
Сказал(а) спасибо: 134
Поблагодарили 614 раз(а) в 333 сообщениях
Настроение: Angelic
Вес репутации: 373
Strelok репутация неоспоримаStrelok репутация неоспоримаStrelok репутация неоспоримаStrelok репутация неоспоримаStrelok репутация неоспоримаStrelok репутация неоспоримаStrelok репутация неоспоримаStrelok репутация неоспоримаStrelok репутация неоспоримаStrelok репутация неоспоримаStrelok репутация неоспорима
По умолчанию Уроки программирования на C/C++ под Windows

Эти уроки, как я надеюсь, помогут научить Вас тому, что считается классическим программированием для Windows. Для начала возьмем старый добрый C (а не C++) и используем напрямую базовый интерфейс программирования приложений (API), а не какую бы то ни было другую оболочку, скрывающую под упрощенным, на первый взгляд, интерфейсом все тот же API. Постепенно, по мере возрастания сложности примеров, будут добавляться тексты программ на C++.
Конечно, для программирующих, скажем на Delphi, написание программы на простом C с использованием только API покажется сложным, однако в любом случае Вы сможете более отчетливо представлять, как действует Windows и ее приложения. Такой подход даст Вам знания, о которых Вы никогда не пожалеете.
В дальнейшем Вы сможете пользоваться средствами, облегчающими программирование, такими как Microsoft Foundatoin Classes (MFC) или Object Windows Library (OWL), однако не советую делать это прежде, чем Вы научитесь программировать на обычном C.




Что Вам потребуется?


Компилятор C/C++
(Автор пользуется Microsoft Visual C++ 6.00). Настоятельно рекомендую пользоваться компилятором фирмы Microsoft, т.к. при использовании продуктов других фирм могут быть проблемы (в частности несоответствие библиотек). Если Вы послушались совета и используете Microsoft Visual C++, то Вам желательно также добавить в Ваш AUTOEXEC.BAT инструкцию:



CALL VCVARS32.BAT



Естественно, нужно указать правильный путь к файлу VCVARS32.BAT. Этот файл, включенный в VC++, устанавливает переменные среды DOS для компиляции программ с помощью командной строки DOS. Кроме того, желательно вставить в AUTOEXEC.BAT и вторую инструкцию CALL:

CALL MSC.BAT

и поместить файл MSC.BAT в удобный для вас каталог. Файл MSC.BAT
SET CC=cl
SET CFLAGS=-c -DSTRICT -G3 -Ow -W3 -Zp -Tp
SET CFLAGSMT=-c -DSTRICT -G3 -MT -Ow -W3 -Zp -Tp
SET LINKER=link
SET GUIFLAGS=-SUBSYSTEM:windows
SET DLLFLAGS=-SUBSYSTEM:windows -DLL
SET GUILIBS=-DEFAULTLIB:user32.lib gdi32.lib winmm.lib
comdlg32.lib comctl32.lib
SET RC=rc
SET RCVARS=-r -DWIN32



Ну а теперь...


Урок №1

Hello, World!


Не могу удержаться, чтобы не привести простейшую программу всех времен...

#include <stdio.h>
void main(void)
{
printf("Hello, world!\n");
}

Если Вы думаете, что эта программа не будет работать под Windows, то глубоко ошибаетесь! Под Windows можно писать так называемые консольные приложения. Пример популярной консольной программы - Far manager. Для консольной программы в момент ее запуска операционной системой автоматически создается окно сеанса DOS, как и для обычной DOS-программы. На первый взгляд разницы между обычной DOS-программой и консольной программой нет. Однако это не так. Консольная программа может использовать всю мощь API (например работа с огромными блоками памяти, файлами, проецируемыми в память и т.д.), и даже создавать обычные Windows-окна.
Для запуска приведенной выше программы создайте в MS Visual C++ проект с типом Console Application, добавьте в проект файл (с любым именем и расширением .c или .cpp) с текстом программы и затем откомпилируйте проект.




Hello, Windows!
(1)

Однако наша задача - научиться писать полноценные программы под Windows (консольные приложения все же трудно назвать полноценными, хотя некоторые могут и не согласиться).
Вот простейшая программа из серии Hello, Windows:



//файл winmain.cpp
#include <windows.h> //этот файл всегда включается
//в Windows-программу

//Это главная функция программы.
int WINAPI WinMain(HINSTANCE hInst, //пусть Вас не смущает то,
HINSTANCE hPrevInst, //что здесь написано.
PSTR szCmdLine, //Мы разберем
int iCmdShow) //это позже.
{
//Вывести сообщение на экран.
MessageBox( //функция вывода сообщения
NULL, //окно сообщения не имеет родителя
"Hello, Windows!", //текст сообщения
"Наша первая программа", //заголовок окна
MB_ICONINFORMATION); //иконка, которая будет
//выведена левее сообщения
return 0;
}

Чтобы запустить эту программу, создайте проект с типом Win32 Application, добавьте в него файл с текстом программы и откомпилируйте.
Конечно, эта программа - не более, чем учебный пример. Ничего полезного она делать не может.





Hello, Windows!
(2)

Давайте теперь создадим скелет программы, который мы будем использовать в дальнейшем. Эта программа уже имеет нормальную структуру (т.е. примерно такую, какую имеют все Windows-программы).



//файл hellowin.cpp
#include <windows.h>

//описание оконной процедуры
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

//Это главная функция программы.
int WINAPI WinMain(HINSTANCE hInst,
HINSTANCE hPrevInst,
PSTR szCmdLine,
int iCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASSEX w;
static CHAR *szAppName={"HelloWin"};

w.cbSize=sizeof(w);
w.style=CS_HREDRAW|CS_VREDRAW;
w.lpfnWndProc=WndProc;
w.cbClsExtra=0;
w.cbWndExtra=0;
w.hInstance=hInst;
w.hIcon=LoadIcon(NULL,IDI_APPLICATION);
w.hCursor=LoadCursor(NULL,IDC_ARROW);
w.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH );
w.lpszMenuName=NULL;
w.lpszClassName=szAppName;
w.hIconSm=w.hIcon;
RegisterClassEx(&w);

hwnd=CreateWindow(
szAppName,
"Hello, Windows",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInst,
NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);

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

//Оконная процедура
LRESULT CALLBACK WndProc(HWND hwnd, UINT imsg,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT r;

switch(imsg)
{
case WM_CREATE:
return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&r);
DrawText(hdc,"Hello, Windows!!!",-1,&r,
DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}

return DefWindowProc(hwnd,imsg,wParam,lParam);
}


Эта программа уже имеет все свойства обычной Windows-программы. Вы можете изменять размер окна, при этом текст всегда будет выводиться в его центре. Вы можете свернуть окно или развернуть его на весь экран. Конечно, сложность исходного текста поначалу может пугать, но это только в начале. На следующем уроке Вам предлагается изучить весь исходный текст этой программы строчка за строчкой.
__________________
Strelok вне форума   Ответить с цитированием
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 06:45. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.7.0
Copyright ©2000 - 2024, vBulletin Solutions Inc. Перевод: zCarot