Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Вывод текста с заданной точки




Для вывода текста мы воспользуемся методом OnDraw(). Начнем с создания текстового курсора, как это было сделано в предыдущем примере carets:

 void CMouserView::OnDraw(CDC* pDC)

 {

CMouserDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

           if(!CaretCreated){

        TEXTMETRIC textmetric;

   pDC->GetTextMetrics(&textmetric);

     CreateSolidCaret(textmetric.tmAveCharWidth/8,

       textmetric.tmHeight);

    CaretPosition.x = CaretPosition.y = 0;

   SetCaretPos(CaretPosition);

   ShowCaret();

    CaretCreated = true;

}

}

Затем мы выводим содержимое строкового объекта StringData. Координаты щелчка были сохранены в переменных х и у, поэтому начало строки окажется в этой точке:

void CMouserView::OnDraw(CDC* pDC)

{

CMouserDoc* pDoc == GetDocument();

 ASSERT_VALID(pDoc);

if(!CaretCreated){

 pDC->TextOut(x, y, pDoc->StringData);

}   

Курсор должен находиться в конце выведенной строки. Сначала мы определяем, где кончается строка, и скрываем курсор:

void CMouserView::OnDraw(CDC* pDC)

{

CMouserDoc* pDoc = GetDocument();

        ASSERT.VALID(pDoc);

         if(!CaretCreated){

                         pDC->TextOut(x, y, pDoc->StringData);

        CSize size =pDC->GetTextExtent(pDoc->StringData);

        HideCaret();

}

Затем переводим курсор в конец строки и снова отображаем его:

void CMouserView::OnDraw(CDC* pDC)

{

CMouserDoc* pDoc == GetDocument();

         ASSERT_VALID(pDoc);

        if(!CaretCreated){  

        pDC->TextOut(x, y, pDoc->StringData);

        CSize size = pDC->GetTextExtent(pDoc->StringData);

        HideCaret();

        CaretPosition.x = x + size.ex;

        CaretPosition.y = y;

        SetCaretPos(CaretPosition);

        ShowCaret();

}

}

На этом изучение примера mouser завершается. Запустите программу, щелкните мышью в любой точке клиентской области и наберите на клавиатуре какой-нибудь текст. Как видно, текст появляется в месте щелчка, а мерцающий курсор отмечает положение следующего символа. Программа mouser успешно работает. 

Пример программы с меню

В настоящий момент мы начнем работать с меню Visual С++. Удобство меню заключается в том, что вы можете получить от пользователя выбранную команду а затем спрятав меню до тех пор, пока оно снова не понадобится (в отличие от панели инструментов, где каждая команда представлена отдельной кнопкой, которая постоянно присутствует на экране, даже если в этом нет нужды, и загромождает рабочее пространство).

Мы научимся включать в меню новые команды, а также создавать новые меню. Кроме того, здесь рассматриваются все стандартные "фокусы", встречающиеся в меню, — пометки-галочки, выделение недоступных команд серым цветом, клавиши ускоренного вызова команд, акселераторы и подсказки в строке состояния. Мы увидим, как создавать и использовать подменю (то есть меню нижнего уровня, которые открываются при выборе команды меню). попутно вы узнаете, как поместить новую кнопку на панель инструментов.

Первая программа будет очень простой и поможет нам освоить азы работы с меню. Мы добавим в меню Fileновую команду Print Welcome.

Когда пользователь выполнит ее, в клиентской области окна должен появиться текст "Добро пожаловать в меню!" (см. далее). На примере программы menus мы научимся работать с меню. Воспользуйтесь AppWizard и создайте программу с однодокументным интерфейсом (SDI). Давайте начнем с редактора меню Visual С++ и включим с его помощью новую команду в меню File нашей программы.

Использование редактора меню

Редактор меню — один из самых полезных инструментов Visual C++. Он значительно упрощает создание меню в программе. Чтобы запустить редактор меню, перейдите на вкладку ResourceView в окне просмотра Visual C++ (крайнее левое окнo) — дело в том, что меню в программах для Windows обычно считается ресурсом(описание ресурсов программы хранится в файле проекта с расширением .гс). Откроется перечень ресурсов программы menus.

Найдите в списке строку Menusи откройте ее. Дважды щелкните на строкеIDR_MAINFRAME— это приведет к запуску редактора меню.

ПРИМЕЧАНИЕ: Обратите внимание на то, что ресурс меню имеет идентификатор IDR_MAINFRAME (идентификатором ресурса называется числовое значение, по которому ресурс можно отличить от других ресурсов). Как нетрудно догадаться по идентификатору, меню принадлежит объекту главного окна.

Добавление новой команды в меню

Мы собираемся добавить в меню новую командуPrint Welcome. Щелкните на меню File— оно раскрывается в редакторе меню. Новая команда должна оказаться между существующими Printи Print Preview, поэтому щелкните на Print Preview и нажмите клавишу Insert— в меню появится новая команда (она окружена толстой пунктирной рамкой).

Дважды щелкните на ней — откроется диалоговое окно Menu Item Properties, содержащее свойства команды. Занесите в поле Captionстроку Добро пожаловать в меню и закройте окно. Новой команде меню необходимо присвоить идентификатор ID_FILE_PRINTWELCOME(FILEприсутствует в имени идентификатора, потому что новая команда находится в меню File).

Новая команда внесена в меню. Закройте редактор меню. Следующим шагом станет подключение команды к коду программы, чтобы мы смогли обработать ее вызов из меню.










Последнее изменение этой страницы: 2018-04-12; просмотров: 371.

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