Обучающие курсы:

Обучение профессии "Разработчик C#" + стажировка в Mail.ru
Обучение профессии "Разработчик Python" + трудоустройство
Обучение профессии "Веб-разработчик" + стажировка в Mail.ru


Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для 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


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru