Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей
|
В качестве шаблона для основной программы на С + + .NET выберем классический
вариант процедурно-ориентированного Windows-приложения. После
генерации каркаса Мастером приложений сделаем некоторые изменения
и дополнения в исходном тексте и добавим в меню" пункт
Return Part of string. Свяжем с ним идентификатор iD_Partstr. При
выборе этого пункта меню в окне работающего приложения будут отображаться
исходная строка, подстрока и смещение в исходной строке.
В разделе объявлений основной программы winMain сделаем ссылку на
внешнюю процедуру:
extern "С" char* _stdcall strpart(char *ps, int off);
Интерфейс с языками высокого уровня 193
В качестве параметров процедура strpart принимает адрес исходной строки
и смещение от ее начала.
Определим также переменные, которые используются нашим приложением:
char src[] = "STRING1 STRING2 STRING3 STRING4 STRING5";
char *dst;
int off, ioff;
char buf[4];
где:
• строка src — исходная строка для обработки;
• строка dst — строка-получатель;
• целочисленная переменная off определяет смещение от начала исходной
строки;
• строка buf и целое ioff используются функцией sprintf для форматирования
вывода.
В функции обратного вызова wndProc напишем обработчик выбора пункта
МеНЮ ID_PartStr (листинг 3.52).
Листинг 3.52. Обработчик выбора пункта меню
case ID_PartStr:
hdc = GetDC(hWnd);
GetciientRect(hWnd, &rect);
off = 10;
dst = strpart(src, off);
ioff = sprintf(buf,"%d",off);
TextOut(hdc,(rect.right - rect.left)/4, (rect.bottom - rect.top)/4,
"Source:", 7 ) ;
TextOut(hdc, (rect.right - rect.left)/3, (rect.bottom - rect.top)/4,
src, strlen(src));
TextOut(hdc, (rect.right - rect.left)/4, (rect.bottom - rect.top)/3,
"Dest:", 5 ) ;
TextOut(hdc, (rect.right - rect.left)/3, (rect.bottom - rect.top)/3,
dst, strlen(dst));
TextOut(hdc, (rect.right - rect.left)/4,
(rect.bottom - rect.top)/3 + 30, "Offset:", 7);
TextOut(hdc, (rect.right - rect.left)/3,
(rect.bottom - rect.top)/3 + 30, buf, ioff);
ReleaseDC(hWnd, hdc);
break;
Для вывода текста в клиентскую область окна мы используем, как и в других
примерах, функцию TextOut. В качестве первого параметра она получает
дескриптор контекста устройства отображения для рисования на экране
дисплея. Дескриптор контекста возвращается функцией GetDC.
Поскольку нам нужно, чтобы выводимый текст попадал в рабочую область
окна, то желательно получить координаты этой области с помощью функции
GetClientRect. Можно обойтись и без нее, но тогда придется повозиться
с расположением текста в окне приложения.
Для форматирования вывода целочисленной переменной off на экран мы
используем функцию sprintf. Так как прототип этой функции описан в
файле stdio.h, то необходимо в раздел деклараций функции winMain включить
запись:
#include
<< Назад В начало Далее >> |
|