Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

СообЧа. Программирование на С++


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

СообЧа. Программирование на С++
Выпуск 5: программу для Windows, да поживее

Всем привет, сегодня не хочу много рассуждать, поэтому сразу перейдем к обзору результатов голосования и теоретической части.

Итак, по итогам голосования победили:
  • Изучение WinAPI
  • Изучение в виде отдельных лекций

Поэтому с сегодняшнего выпуска мы начинаеи изучение WinAPI. Однако те, кто голосовал за изучение азов C++, обиженными себя не почувствуют: в каждом выпуске они смогут найти тексты полезных программ, демонстрирующих те или другие аспекты программирования, а также ссылки на литературу для начинающих.

Что же касается изучения материала в виде отдельных лекций, то здесь я тоже решил внести коррективы, о которых вы прочитаете в теоретической части.

Теоретическая часть
"Программу для Windows, да поживее"

Итак, наконец-то мы приступаем к изучению WinAPI. Большинство из вас проголосовало за изучение WinAPI в виде отдельных лекций. Причем, судя по всему, вы предполагаете отдельные примеры для каждой лекции. А я тем не менее хочу предложить вам нацелиться на создание какого-нибудь полезного приложения. Ведь те программы, которые будут иллюстрировать приемы программирования WinAPI ни в коем случае не будут законченными приложениями. Спрашивается, на кой черт вам нужна программа, которая создаст окно с меню вида:

  • Пункт А
  • Пункт Б

и все. А я советую вам создавать какой-нибудь программный продукт, который бы вам пригодился в будущем. Поэтому я и предлагаю вам создать текстовый редактор. Сначала это будет простенький редактор, позволяющий лишь создавать, редактировать, сохранять текстовые файлы (*.TXT), т.е. нечто наподобие Блокнота. В будущем мы добавим парочку мастеров для быстрого создания документов на основе шаблонов, возможность сохранения документов в формате HTML, подсветку синтаксиса для языка C++, да мало ли еще чего можно добавить. Главное - уверенно начать. Что мы и сделаем.

Итак, мы беремся за создание текстового редактора. Я решил назвать его SimpleText™, вы можете назвать так, как вам заблогароссудится. Итак, с чего начнем. Во-первых, нам надо выяснить, какие файлы понадобятся для будущего редактора. Кстати, я надеюсь, у вас у всех есть IDE. Если нет, срочно находите! Для нашего редактора, как и для любого другого приложения под Windows потребуются следующие файлы:

  • SimpleText.h - заголовочный файл, содержащий прототипы функций, глобальные переменные, макроопределения. Кроме того, будет разумно все остальные заголовочные файлы поключить через этот: так будет гораздо проще.

  • SimpleText.cpp - это то самое злачное место, где мы будем писать код, определяющий поведение нашего редатора, иными словами, здесь и будет располагаться весь основной исходный код.

  • SimpleText.rc - файл ресурсов. Здесь будут находиться описания диалоговых окон, меню, панелей инструментов и пр.

  • SimpleText.txt - этот файл не обязателен, но я все же рекомендую его создать. В нем вы будете фиксировать основные моменты процесса разработки. Вот, например, выдержка из этого файла:
    ...4.11.2000 - сегодня попробовал добавить меню - в результате пришлось переустановить Windows...
    Ну, вы поняли, в чем назначение этого файла.

  • SimpleText.mac или SimpleText.dsw или SimpleText.ide или SimpleText.prj - все это файл проекта, просто у разных IDE расширения различаются. У Borland C++ - это *.IDE, у Microsoft Visual C++ - *.DSW. Этот файл нужен для того, чтобы объяснить компилятору, как ему следует компилировать и связывать данные файлы. Вот глупость: объяснять компилятору, как надо компилировать...

Ну вот, это основные файлы, которые требуется для того, чтобы разработать программу под Windows с использованием WinAPI. А теперь запускайте свою любимую IDE и переходите к практической части, где вы увидите, что же внутри этих файлов.


Практическая часть

Итак, для начала вам надо создать файл проекта. Этот файл создается автоматически практически всеми IDE. Поэтому, если ваша IDE не может создать проект, выкиньте ее на свалку и обзаведитесь новой. Итак, что надо помнить при создании проекта? Прежде всего, следует создать пустой проект, т.е. проект, в который еще не включены никакие файлы. Все файлы мы добавим позднее вручную. Кроме того, IDE позволяет создать проекты как для DOS, так и для Windows. Вам следует выбрать Windows. Итак, создали проект. Что дальше? А дальше надо создать SimpleText.h.

Создайте пустой файл и добавьте в него следующие строки:

// ФАЙЛ: SimpleText.h
// Подключаем заголовочные файлы
#include <windows.h>

// Глобальные переменные
LPCSTR szClassName = "SimpleText"; // Имя класса
LPCSTR szTitle = "SimpleText 1.0"; // Заголовок окна

// Прототипы функций
BOOL InitApplication(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE hInstance, int nCmdShow);

LRESULT CALLBACK WndProc(HWND hWnd, UINT message,
  WPARAM wParam, LPARAM lParam);

Сохраните эту ерунду. Теперь самое время создать SimpleText.cpp. Вот исходный код, который необходимо поместить в этот файл:

// ФАЙЛ: SimpleText.h
// Подключаем заголовочные файлы
#include "SimpleText.h"

// Функция WinMain
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  LPSTR lpCmdLine, int nCmdShow)
{
  MSG msg;

  if(!hPrevInstance)
  {
    // Инициализация приложения
    if(!InitApplication(hInstance))
      return FALSE;
  }

  // Создание главного окна
  if(!InitInstance(hInstance, nCmdShow))
    return FALSE;

  // Цикл обработки сообщений
  while(GetMessage(&msg, NULL, 0, 0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }

  return msg.wParam;
}

// Инициализация приложения
BOOL InitApplication(HINSTANCE hInstance)
{
  WNDCLASS wc;

  wc.style="CS_HREDRAW" | CS_VREDRAW;
  wc.lpfnWndProc = (WNDPROC)WndProc;
  wc.cbClsExtra = 0;
  wc.cbWndExtra = 0;
  wc.hInstance = hInstance;
  wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  wc.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE + 1);
  wc.lpszMenuName = NULL;   wc.lpszClassName = szClassName;

  return RegisterClass(&wc);
}

// Создание главного окна
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
  HWND hWnd;

  hWnd = CreateWindow(szClassName, szTitle, WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    NULL, NULL, hInstance, NULL);

  if(!hWnd)
    return FALSE;

  ShowWindow(hWnd, nCmdShow);
  UpdateWindow(hWnd);

  return TRUE;
}

// Обработчик событий главного окна
LRESULT CALLBACK 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;
}

Это минимальная программа для Windows: она выводит окно и...все. Единственное, что вы можете сделать, это изменить размер окна, свернуть его или закрыть. Но эта программа будет так называемой "рыбой" для нашего редактора: в дальнейшем я уже не буду полностью писать исходный код, я лишь буду указывать, какие куски кода в "рыбе" надо заменить, чтобы добавить некоторые возможности к нашей программе.

Ну вот и все на сегодня. В следующем выпуске я объясню, что значит вся эта чертовщина. А пока, если вы чувствуете, как в вас просыпается гений, то можете сами попробовать понять, как действует минимальная программа для Windows. Счастливо оставаться.

Ох, чуть было не забыл. Ведь у меня еще есть программа из серии "C++ для чайников". Она охарактеризует вас в зависимости от вашего возраста:

// Ваша характеристика в зависимости от возраста
#include <iostream.h>
int main()
{
  int age; // Возраст

  cout << "Введите ваш возраст: ";
  cin >> age;

  if((age > 0) && (age < 10))
    cout << "Молокосос\n";
  if((age >= 10) && (age < 20))
    cout << "Все равно молокосос\n";
  if((age >= 20) && (age < 40))
    cout << "В самом расцвете сил\n";
  if(age >= 40)
    cout << "Старикан\n";

  return 0;
}

Эта программа демонстрирует ввод/вывод с помощью cin/cout, а также использование оператора if для проверки условий. Хочу отметить, что эту программу следует компилировать в IDE под DOS, т.к. откомпилированная в IDE для Windows эта программа будет отображать все, что угодно, но только не русские символы. А почему так? Предлагаю вам самостоятельно подумать над этим.

Вот теперь уже точно все. Пока. Пишите письма.


Рассылки Subscribe.Ru
СообЧа. Программирование на С++
О рассылке "СообЧа. Программирование на C++".
Ведущий: Павел Незамаев pnezamaev@hotmail.com

Темы писем:
Мои спонсоры и начальники

Рассылка СообЧа: http://subscribe.ru/catalog/comp.soft.prog.soobcha
Сайт СообЧа: http://www.soobcha.boom.ru и его авторы
Егор Гостев: evrica@nytva.permnet.ru?subject=Soobcha
Алексей: mreset@mail.ru
Авторское право (C) 2000 Павел Незамаев pnezamaev@hotmail.com

http://subscribe.ru/
E-mail: ask@subscribe.ru

В избранное