Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Просмотр HTML-файлов в диалоговом окне

7.8K
09 февраля 2007 года
simplemortal
62 / / 09.02.2007
Коллеги, я недавно перешёл с Borland C++ Builder на Visual C++.
Прошу помочь в следующих вопросах:
1. Как и через что просматривать HTML-файлы в диалоговых окнах?
2. Можно ли изменить программно текст в Static, чтобы получить нечто
вроде Label в Borland C++?

Если у кого есть полезная литература или справочники по функциям
в электронном виде, то буду очень признателен если Вы отправите мне
на почту: [EMAIL="simplemortal@list.ru"]simplemortal@list.ru[/EMAIL]
320
10 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
Установить текст в Static можно ф-ией
 
Код:
m_static.SetWindowText(str);

где m_static - переменная CStatic, а str - переменная CString.
Смотри MSDN - там все ф-ии описаны и примеры есть.
А по поводу HTML-файлов что смотреть надо HTML-код или
саму страницу.Если страницу,то чем не подходит ShellExecute?
 
Код:
HINSTANCE ShellExecute(HWND hwnd,
    LPCTSTR lpOperation,
    LPCTSTR lpFile,
    LPCTSTR lpParameters,
    LPCTSTR lpDirectory,
    INT nShowCmd
);
355
10 февраля 2007 года
<SCORP>
786 / / 21.10.2006
только переменную m_static предварительно надо связать с контролом. для этого в методе диалога DoDataExchange надо прописать что-то вроде DDX_CONTROL(IDC_STATIC1, m_static)
или как-то так. в общем, посмотри ещё что-то насчёт DDX и обмена данными в диалогах
320
10 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
2<SCORP>Да,если из Toolboxa вытаскивать - то обязательно,но я имел ввиду просто создать static
 
Код:
m_static.Create("text",WS_VISIBLE|WS_CHILD,CRect(10,10,100,100),this,NULL);

а потом переустановить текст SetWindowText.
7.8K
10 февраля 2007 года
simplemortal
62 / / 09.02.2007
Я немного перефразирую вопрос и уточню его.

Мне необходимо в диалоговом окне разместить некоторое поле с текстом и управляющими элементами типа Radio Button. При этом текст редактировать невозможно, пользователь может лишь выбирать нужный Radio Button.
Я подумал, что оптимальным вариантом будет весь текст и Radio Button'ы написать на HTML и открывать его в окне. Но при этом нужно чтобы программа могла реагировать на щелчки по Radio Button'ам.
Может Вы посоветуете мне кокой-то другой вариант решения этой прпроблемы.

PS: Если Вы видели программу "СОЛО на клавиатуре", то будет легче понять, что я имею ввиду. Нужно добить такого же эффекта как в данной программе между выполнениями заданий, т.е. текст, среди которого встречаются Radio Button'ы.

А по поводу Static я не понял, как создать переменную m_static, если в Class Wizard в закладке Member Variables не отображаются IDC_STATIC.

Буду очень признателен за помощь.
320
10 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата:
А по поводу Static я не понял, как создать переменную m_static, если в Class Wizard в закладке Member Variables не отображаются IDC_STATIC.


Так там много чего не отображается.:) Еще раз о создании Static:
Есть 2 простых варианта.
1.Выбираешь View -> Class View(Ctrl+Shift+C).Выбираешь класс твоего диалога и правой кнопкой мышки по нему,появляется контектное меню.Находишь Add->Add Variable , появляется Add Member Variable
Wizard .В поле Variable type пишешь CStatic, в поле Variable name - m_static.Жмешь Finish.Переменная CStatic m_static - будет добавлена.Дальше в ф-ии OnInitDialog

 
Код:
m_static.Create("любой текст",WS_VISIBLE|WS_CHILD,CRect(10,10,100,100),this,NULL);

Все.:)
2.Вытаскиваешь на форму из Toolboxa Static Text и располагаешь где нравится.Для того чтобы вытащить из Toolboxa надо выбрать View -> Resource View,найти свой диалог (что то типа IDD_MYDIALOG_DIALOG),
щелкнуть 2 раза появится твой диалог.Можешь вытаскивать Static Text.Вытащил.Дальше как писал <SCORP>
Цитата:
Мне необходимо в диалоговом окне разместить некоторое поле с текстом и управляющими элементами
типа Radio Button. При этом текст редактировать невозможно, пользователь может лишь выбирать нужный
Radio Button.
Я подумал, что оптимальным вариантом будет весь текст и Radio Button'ы написать на HTML и открывать
его в окне. Но при этом нужно чтобы программа могла реагировать на щелчки по Radio Button'ам.
Может Вы посоветуете мне кокой-то другой вариант решения этой прпроблемы.


Это будет совсем не оптимальный вариант.Это ты что то непонятное придумал.:D У тебя есть Visual Studio,есть MFC тебе не нужен HTML для того чтобы улучшать их.HTML -"то другое",это язык разметки.Я так понял
что из-за того что ты не можешь поменять текст при нажатии Radio Button ты решил применить HTML?
Опять же создай Static по 1 варианту , вытащи из Toolboxa радиокнопки .Кликаешь на них по 2 раза -будет автоматически добавлены ф-ии ::OnBnClickedRadio1() и такая же для тех по которым
кликнешь.В ф-ии пишешь

 
Код:
m_edit.GetWindowText(str);
    m_static.SetWindowText(str);

m_edit - это я ввел Control переменную CEdit(его тоже вытащи из Toolboxa чтобы там вводить текст,который ты хочешь установить для Static.Все просто.Хотя конечно так на форуме это обьяснить и
понять совсем даже не просто - это лучше 1 раз увидеть своими глазами,чем 100 раз услышать.:)
7.8K
11 февраля 2007 года
simplemortal
62 / / 09.02.2007
По поводу Static благодарю! Я разобрался. Если честно, даже немного стыдно за вопрос, там всё так посто оказалось.

А вот насчёт Radio Button'ов я думаю, нужно ещё уточнить проблему.
Мне нужно сделать нечто вроде тестов.
Radio Button'ы будут вариантами ответов, а под каждым из них необходимо разместить достаточно длинные пояснение (в несколько строк) к каждому из вариантов ответов.
Вообще вполне можно было бы эти пояснения сделать Static'ами, но мне нужно, оставить пользователю возможность изменения размеров окна, а в этом случае нужно, чтобы появлялись полосы прокрутки и т.д. со всеми вытекающими последствиями. То есть текст с Radio Button'ами не должен быть зафиксирован на одном месте, нужно, чтобы его можно было прокручивать, сжимать при уменьшении ширины окна и т.д.
В общем Radio Button'ы должны быть прямо в тексте, как во многих интернет-страничках (на вашем сайте подобным образом выбираются пункты "Подписаться" и "Отписаться" на почтовую рассылку, только у меня должно быть больше вариантов и под каждым пояснение в несколько строк).
А такого эффекта Static'ами, как я понимаю, не добиться.
Вот я и подумал, как здорово бы это было на HTML, но может быть есть другой вариант?

PS: я поражаюсь Вашему терпению!:o
320
11 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: simplemortal
.
Вот я и подумал, как здорово бы это было на HTML, но может быть есть другой вариант?o


Их есть в Visual Studio:) :)
Я кажется начинаю понимать что тебе надо сделать.Тебе нужны тесты.
Для этого в VisualStudio есть отличный способ - создание мастера.Зачем НТML - ?.Во-первых насколько я понимаю без JavaScript это будет не просто сделать, ты имеешь ввиду HTML - формы ?

 
Код:
<body>
    <form name="имя_формы" action="url" method="GET|POST">
        <!-- элементы управления -->
    </form>
    </body>
Что то такое...
Может это и выход ,но тогда это вопрос для другого раздела где HTML,JavaScriptи т.д.)
Но если тебе надо в VisualStudio-идем дальше. Мастер - это идея организации пользовательского интерфейса Это диалоговое окно состоящее из нескольких вкладок, реализованных ввиде шагов, предназначенное для запроса от пользователя информации относительно того или иного вопроса(типа MFC AppWizard).
У него должны быть кнопки Back (вернуться на шаг назад),Next (на шагвперед), Finish ( завершение работы мастера),Cancel (отказ от работы ), Help (справка).
Общий механизм работы мастера примерно такой. Имеется подложка, а на ней располагаются страницы
CPropertySheet - это подложка на нем располагаются объекты классы CPropertyPage.Говоря проще-запускаешь,появляется диалог с вопросами и элементами управления для ввода ответов.Заполнили пошли дальше(нажали Next) - появляется следующее окно со следующими вопросами и элементами управления и т.д. до тех пор пока не нажали на последнем диалоге Finish.Нажали - появляется диалог с результатами теста или создается txt файл и т.д.
Вообще что это за приложение?Где будет использоваться ?
320
12 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
Если уж совсем никак мастер не подходит, а только HTML страница,то
в принципе можно впихнуть:) Использовать класс ChtmlView в Single Document. Нужно включить поддержку Document View и установить CHtmlView как базовый класс (список Base Class), а затем добавить в ресурсы приложения HTML-страницу.Для того чтобы программа была больше похожа на Windows-приложение, а не на окно Internet Explorer, необходимо в HTML-коде много чего наваять (используются скрипты...)..Одним словом cм.MSDN.В общем есть способ,не знаю только хорошо ли это будет.Даже в диалог можно засунуть :) Но все это как то не слишком просто и если ты только начал в Visual Studio работать,то разобраться будет очень даже не легко:(
А Microsoft иногда использует web-интерфейс.
Интересущимся как это делать http://www.rsdn.ru/article/mfc/reusingdhtml.xml
284
12 февраля 2007 года
michael_is_98
587 / / 25.02.2005
Если это тест, который будут проходить тысячи людей, лучше использовать какой-либо скриптовый язык, php например.
Все исходит от задачи...
На VS6.0/2003/2005 можно сделать многое, желательно лишь использовать те компоненты (библиотеки), которые не устареют со временем. Хорошим примером такой библиотеки для Си++ может служить STL.

Все вопросы и ответы тестов можно хранить в БД. Если будешь делать на php, БД можно сделать в mysql, если на Си++ - то БД может представлять текстовый файл (самый простой вариант), файл XML, Access (здесь нужно иметь драйверы БД, а это может создать проблемы с переносимостью). Если будешь создавать БД - определись со структурой данных, что также вытекает из задачи...
395
12 февраля 2007 года
RelB
367 / / 09.11.2002
Цитата: m_Valery
Даже в диалог можно засунуть :)

Вот этого не нужно, есть CDHtmlDialog :)
И обрабатывать сообщения при нажатии кнопочек тоже не составляет никакого труда... :) При этом скрипты никакие не нужны....

320
12 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
Да можно и CDHtmlDialog.При создании приложения на вкладке Application Type нужно выбрать Dialog Base и Use HTML dialog.Потом в OnInitDialog можно вызвать ф-ию Navigate("http:\\codenet.ru "); так в диалоге будет показана главная страница codenet.ru,тут можно указать любой адрес "c:/1.html" - покажет HTML-страницу на диске с и т.д.Сверху можно добавлять свои элементы управления,скрипты не нужны.
С CHtmlView в срр файле окна представления ( допустим myhtmlView.cpp) в ф - ии OnInitialUpdate()
вызывается ф-ия Navigate2(_T("c:/1.html"),NULL,NULL); по умолчанию заходит куда то ...к Microsoft или MSDN,тоже в кавычках вписываешь нужный адрес
7.8K
13 февраля 2007 года
simplemortal
62 / / 09.02.2007
На счёт оформления в виде мастера - идея не плохая, буду иметь её в виду.
Давайте предположим, что я всё таки размещу CHTMLView в диалоговом окне, текст и Radio Button'ы напишу на HTML. Но как в этом случае связать Radio Button'ы, написанные на HTML и код на С++? Т.е. как программа узнает, что пользователь нажал какой-либо Radio Button? Сообщения от HTML-левских элементов управления передаются в программу?
395
13 февраля 2007 года
RelB
367 / / 09.11.2002
Цитата: simplemortal
На счёт оформления в виде мастера - идея не плохая, буду иметь её в виду.
Давайте предположим, что я всё таки размещу CHTMLView в диалоговом окне, текст и Radio Button'ы напишу на HTML. Но как в этом случае связать Radio Button'ы, написанные на HTML и код на С++? Т.е. как программа узнает, что пользователь нажал какой-либо Radio Button? Сообщения от HTML-левских элементов управления передаются в программу?

Именно :) Советую посмотреть в MSDN в сторону DHTML Events

320
13 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
2simplemortalТы не сможешь сделать диалог наследником от CHtmlView,для этого есть CDHtmlDialog. CHtmlView-это для SDI.Смотри ссылку что я приводил там ведь все рассказано.И об обработке событий web-интерфейсов
в том числе,см.также - МSDN,без MSDN в VisualStudio работать очень плохо.
Цитата:
На VS6.0/2003/2005 можно сделать многое, желательно лишь использовать те компоненты (библиотеки), которые не устареют со временем...

Я б даже сказал,что можно сделать практически все,если знать КАК.simplemortal,это конечно твое дело как разрабатывать пользовательский интерфейс , но раз уж ты просишь совета аргумментируй конкретно зачем тебе html-страницы.Не обижайся,но я этого так и не понял.Что тебя конкретно не устраивает в интерфейсе который можно сделать в VisualStudio.И что такого уникального ты собираешься слелать в html-страницах,чего нельзя сделать в VisualStudio?Чем web-интерфейс будет лучше?Тебя привлекает графика?Так это можно и в VisualStudio сделать,причем , скажем так,не хуже.Ты сам сказал , что только начал осваивать VisualStudio,зачем берешься сразу разрабатывать такой специфический интерфейс,да еще и в VisualStudio,которую только начинаешь осваивать?
Выложи рисунок своего интерфейса и условие задачи,ты явно что то не так делаешь?В Visual Studio ты так сходу,без знания ,SDI,MDI,dialog эл.управления намучаешься с таким интерфейсом ... Когда я был
студентом(MFC учили год ,300 часов)static - учили на 2 занятии,edit - 3,button - 4 и так целый год. CHtmlView был в программе, а вот СDHtmlDialog в программу обучения не входил.Это так к сведению. Скорее всего твою задачу можно сделать гораздо проще.Выкладывай рисунок

7.8K
15 февраля 2007 года
simplemortal
62 / / 09.02.2007
Да, действительно, Вы правы, я немного перепродумал интерфейс. Теперь вполне можно обойтись без web-интерфейса.

Но у меня теперь ещё пара вопросов.

1. Т.к. это будут тесты, то в нижней части я хочу разместить полосу кнопок с номерами вопросов. Кнопка, соответствующая непройденному вопросу, будет одного цвета, кнопка, соответствующая пройденному вопросу - другим цветом, а текущий вопрос ещё другим цветом.
Но из чего сделать эту полосу? Можно ли изменять цвет кнопок? Или может быть просто разместить на кнопке изображение, определённого цвета?

2. Как в picture Control поместить рисунок?
Как обрабатывать клики, движения мыши и прочие события у Picture Control и Static?
Как можно обработать MouseMove, MouseDown, MouseUP у кнопки, если у неё в событиях только клик, двойной клик и что-то ещё?
320
15 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
В общем тебе для начала нужна хорошая книга.Разбирайся с элементами управления.Тут вопросов на хорошую контрольную по MFC. :) Ну например как в Picture Control поместить рисунок.
1.Вытаскиваешь из Toolboxa Picture Сontrol.В папку с проектом добавляешь сам рисунок,например,какой-нибудь 1.bmp.
2.Идешь в Resource View.Правой кнопкой мыши по названию твоего проекта Add->Add Resource->Bitmap->Import->Open->1.bmp.
3.В том же Resource View открываешь свой диалог находишь тот Picture Control,который ты вытащил.Правой кнопкой мыши по нему ->Properties(cвойства).Устанавливаешь ID- ставишь ID рисунка , будет
IDB_BITMAP1, потом ищешь свойство Type(предпоследнее снизу)-выбираешь Bitmap,дальше ищешь свойство Image - ставишь тоже IDB_BITMAP1.Рисунок добавлен.Словами описывать долго и неудобно,
надо чтоб тебе показали.Кстати способы могут быть и другие,кто как делает.Все что я описал делается за 5 секунд,автоматом.Допустим ты поставил этот Picture Control.Дальше - как обработать клик по нему?
1.Открываешь Resource View,находишь свой рисунок,клик по нему,теперь там где было окно Properties найди иконку Control Events(желтая молния) -> открываешь,выбираешь STN_CLICKED и добавляешь
ф-ию OnStnClickedBitmap1,она появится в срр файле диалога( пустая),там дописываешь что надо.
Например: AfxMessageBox("это мой рисунок");
выведет MessageBox c твоим текстом.Но предварительно опять зайди в Properties Picture Control найди свойство Notify и поставь TRUE без этого работать не будет , по умолчанию стоит FALSE.
Теперь о том как можно обработать события MouseMove, MouseDown, MouseUP у кнопки, если у неё в событиях только клик и т.д.Для этого создай свой класс кнопки.Class View->Add Class.Базовым ставишь CButton,имя ставишь свое MyButton,теперь у тебя добавлены
2 файла MyButton.h и MyButton.cpp.Далее в Class View кликаешь по этому классу и выбираешь вкладку Messages там и находишь те ф-ии которые надо добавить.Добавляешь.Пишешь в обработчиках код.
Вытаскиваешь в свое диалоговое окно из Toolboxa кнопку и ставишь для нее контрол переменную не класса CButton, а MyButton.Все.
Теперь о 1-ой части твоих вопросов.Полосу делать из Statica.Цвет кнопок менять можно,изображения вставлять в кнопку тоже можно.Купи книгу Том Арчер и Эндрю Уайтчепел.Visual C++.NET
там рассказано подробно обо всем этом и многом другом.
284
16 февраля 2007 года
michael_is_98
587 / / 25.02.2005
Есть еще Черносвитов "Visual Studio 7.0".
Может кто-нибудь выложить эту книгу на сайт codenet.ru?
7.8K
16 февраля 2007 года
simplemortal
62 / / 09.02.2007
Прошу прощения за навязчивость!
Я купил книгу Шеферда и Круглински "Программирование на Visual C++ .NET", разобрался со многими вещами, но там не описываются эти элементарные вещи, с которыми пока я работал на Borland'e проблем не возникало, и которые, извините, приходится спрашивать у Вас.
У Вас нет электронной книги Тома Арчера и Эндрю Уайтчепела "Visual C++.NET"? Заказать через интернет не могу, т.к. уже мало времени, а она пока придёт......

В целом мне уже почти всё понятно, осталось всего пара вопросов.

Я вставил в Picture Control bmp-файл, а с jpg, не получилось. ???

И самый главный вопрос. (надеюсь последний)
m_Valery, Вы написали, что полосу делать из Statica. Цвет кнопок менять можно, изображения вставлять в кнопку тоже можно.

Но КАК из Statica сделать эту полосу с кнопками???
320
16 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
Просто.Вытаскиваешь на диалог статик.Смотришь его Properties.Caption - убираешь текст.Есть там 2 свойства Border u Modal Frame - поставь какое-нибудь из них TRUE,какое больше понравится.Утебя получился на форме статик с рамкой,но без текста.Теперь можешь вытаскивать
на форму кнопки или радиокнопки,добавь к ним обработчики (правая кнопка->Add Event Handler)и ставь их на статик.Точно так же можно поставить кнопки и на Picture Control.Что касается цветных элементов управления или кнопок с рисунками.То имхо постарайся обойтись без этого,все это будет только загромождать интерфейс.По-моему аскетизм в интерфейся лучше.Насколько я помню в Picture Control вставляется Bitmap,ты и в Resource View не добавишь рисунок jpg, но его можно подругому поставить на диалог.Если надо могу рассказать.Книги Арчера в электронном виде у меня нет,в сети я ее тожене смог найти,но она продается(недавно видел).
7.8K
17 февраля 2007 года
simplemortal
62 / / 09.02.2007
Опишите, пожалуйста, как вставлять jpg в диалог?
320
17 февраля 2007 года
m_Valery
1.0K / / 08.01.2007
1.Добавляешь в папку с проектом рисунок 1.jpg
2.В класс диалога добавляешь переменную CImage m_image
3.В ф-ии OnInitDialog дописываешь
 
Код:
m_image.Load("1.jpg");

4.В ф-ии OnPaint дописываешь там где else
 
Код:
...else
    {
      CPaintDC dc(this);
      CDC *pDC=CDC::FromHandle(m_image.GetDC());
               dc.SetStretchBltMode(HALFTONE);
               dc.StretchBlt(0,0,300,300,pDC,0,0,m_image.GetWidth() ,m_image.GetHeight(),SRCCOPY);
          m_image.ReleaseDC();
    }
...
В StretchBlt размеры ставишь свои.Запускаешь.:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог