Просмотр HTML-файлов в диалоговом окне
Прошу помочь в следующих вопросах:
1. Как и через что просматривать HTML-файлы в диалоговых окнах?
2. Можно ли изменить программно текст в Static, чтобы получить нечто
вроде Label в Borland C++?
Если у кого есть полезная литература или справочники по функциям
в электронном виде, то буду очень признателен если Вы отправите мне
на почту: [EMAIL="simplemortal@list.ru"]simplemortal@list.ru[/EMAIL]
где m_static - переменная CStatic, а str - переменная CString.
Смотри MSDN - там все ф-ии описаны и примеры есть.
А по поводу HTML-файлов что смотреть надо HTML-код или
саму страницу.Если страницу,то чем не подходит ShellExecute?
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
или как-то так. в общем, посмотри ещё что-то насчёт DDX и обмена данными в диалогах
а потом переустановить текст SetWindowText.
Мне необходимо в диалоговом окне разместить некоторое поле с текстом и управляющими элементами типа Radio Button. При этом текст редактировать невозможно, пользователь может лишь выбирать нужный Radio Button.
Я подумал, что оптимальным вариантом будет весь текст и Radio Button'ы написать на HTML и открывать его в окне. Но при этом нужно чтобы программа могла реагировать на щелчки по Radio Button'ам.
Может Вы посоветуете мне кокой-то другой вариант решения этой прпроблемы.
PS: Если Вы видели программу "СОЛО на клавиатуре", то будет легче понять, что я имею ввиду. Нужно добить такого же эффекта как в данной программе между выполнениями заданий, т.е. текст, среди которого встречаются Radio Button'ы.
А по поводу 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
Все.:)
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_static.SetWindowText(str);
m_edit - это я ввел Control переменную CEdit(его тоже вытащи из Toolboxa чтобы там вводить текст,который ты хочешь установить для Static.Все просто.Хотя конечно так на форуме это обьяснить и
понять совсем даже не просто - это лучше 1 раз увидеть своими глазами,чем 100 раз услышать.:)
А вот насчёт Radio Button'ов я думаю, нужно ещё уточнить проблему.
Мне нужно сделать нечто вроде тестов.
Radio Button'ы будут вариантами ответов, а под каждым из них необходимо разместить достаточно длинные пояснение (в несколько строк) к каждому из вариантов ответов.
Вообще вполне можно было бы эти пояснения сделать Static'ами, но мне нужно, оставить пользователю возможность изменения размеров окна, а в этом случае нужно, чтобы появлялись полосы прокрутки и т.д. со всеми вытекающими последствиями. То есть текст с Radio Button'ами не должен быть зафиксирован на одном месте, нужно, чтобы его можно было прокручивать, сжимать при уменьшении ширины окна и т.д.
В общем Radio Button'ы должны быть прямо в тексте, как во многих интернет-страничках (на вашем сайте подобным образом выбираются пункты "Подписаться" и "Отписаться" на почтовую рассылку, только у меня должно быть больше вариантов и под каждым пояснение в несколько строк).
А такого эффекта Static'ами, как я понимаю, не добиться.
Вот я и подумал, как здорово бы это было на HTML, но может быть есть другой вариант?
PS: я поражаюсь Вашему терпению!:o
Вот я и подумал, как здорово бы это было на HTML, но может быть есть другой вариант?o
Их есть в Visual Studio:) :)
Я кажется начинаю понимать что тебе надо сделать.Тебе нужны тесты.
Для этого в VisualStudio есть отличный способ - создание мастера.Зачем НТML - ?.Во-первых насколько я понимаю без JavaScript это будет не просто сделать, ты имеешь ввиду HTML - формы ?
<form name="имя_формы" action="url" method="GET|POST">
<!-- элементы управления -->
</form>
</body>
Может это и выход ,но тогда это вопрос для другого раздела где HTML,JavaScriptи т.д.)
Но если тебе надо в VisualStudio-идем дальше. Мастер - это идея организации пользовательского интерфейса Это диалоговое окно состоящее из нескольких вкладок, реализованных ввиде шагов, предназначенное для запроса от пользователя информации относительно того или иного вопроса(типа MFC AppWizard).
У него должны быть кнопки Back (вернуться на шаг назад),Next (на шагвперед), Finish ( завершение работы мастера),Cancel (отказ от работы ), Help (справка).
Общий механизм работы мастера примерно такой. Имеется подложка, а на ней располагаются страницы
CPropertySheet - это подложка на нем располагаются объекты классы CPropertyPage.Говоря проще-запускаешь,появляется диалог с вопросами и элементами управления для ввода ответов.Заполнили пошли дальше(нажали Next) - появляется следующее окно со следующими вопросами и элементами управления и т.д. до тех пор пока не нажали на последнем диалоге Finish.Нажали - появляется диалог с результатами теста или создается txt файл и т.д.
Вообще что это за приложение?Где будет использоваться ?
в принципе можно впихнуть:) Использовать класс 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
Все исходит от задачи...
На VS6.0/2003/2005 можно сделать многое, желательно лишь использовать те компоненты (библиотеки), которые не устареют со временем. Хорошим примером такой библиотеки для Си++ может служить STL.
Все вопросы и ответы тестов можно хранить в БД. Если будешь делать на php, БД можно сделать в mysql, если на Си++ - то БД может представлять текстовый файл (самый простой вариант), файл XML, Access (здесь нужно иметь драйверы БД, а это может создать проблемы с переносимостью). Если будешь создавать БД - определись со структурой данных, что также вытекает из задачи...
Вот этого не нужно, есть CDHtmlDialog :)
И обрабатывать сообщения при нажатии кнопочек тоже не составляет никакого труда... :) При этом скрипты никакие не нужны....
С CHtmlView в срр файле окна представления ( допустим myhtmlView.cpp) в ф - ии OnInitialUpdate()
вызывается ф-ия Navigate2(_T("c:/1.html"),NULL,NULL); по умолчанию заходит куда то ...к Microsoft или MSDN,тоже в кавычках вписываешь нужный адрес
Давайте предположим, что я всё таки размещу CHTMLView в диалоговом окне, текст и Radio Button'ы напишу на HTML. Но как в этом случае связать Radio Button'ы, написанные на HTML и код на С++? Т.е. как программа узнает, что пользователь нажал какой-либо Radio Button? Сообщения от HTML-левских элементов управления передаются в программу?
Давайте предположим, что я всё таки размещу CHTMLView в диалоговом окне, текст и Radio Button'ы напишу на HTML. Но как в этом случае связать Radio Button'ы, написанные на HTML и код на С++? Т.е. как программа узнает, что пользователь нажал какой-либо Radio Button? Сообщения от HTML-левских элементов управления передаются в программу?
Именно :) Советую посмотреть в MSDN в сторону DHTML Events
в том числе,см.также - МSDN,без MSDN в VisualStudio работать очень плохо.
Я б даже сказал,что можно сделать практически все,если знать КАК.simplemortal,это конечно твое дело как разрабатывать пользовательский интерфейс , но раз уж ты просишь совета аргумментируй конкретно зачем тебе html-страницы.Не обижайся,но я этого так и не понял.Что тебя конкретно не устраивает в интерфейсе который можно сделать в VisualStudio.И что такого уникального ты собираешься слелать в html-страницах,чего нельзя сделать в VisualStudio?Чем web-интерфейс будет лучше?Тебя привлекает графика?Так это можно и в VisualStudio сделать,причем , скажем так,не хуже.Ты сам сказал , что только начал осваивать VisualStudio,зачем берешься сразу разрабатывать такой специфический интерфейс,да еще и в VisualStudio,которую только начинаешь осваивать?
Выложи рисунок своего интерфейса и условие задачи,ты явно что то не так делаешь?В Visual Studio ты так сходу,без знания ,SDI,MDI,dialog эл.управления намучаешься с таким интерфейсом ... Когда я был
студентом(MFC учили год ,300 часов)static - учили на 2 занятии,edit - 3,button - 4 и так целый год. CHtmlView был в программе, а вот СDHtmlDialog в программу обучения не входил.Это так к сведению. Скорее всего твою задачу можно сделать гораздо проще.Выкладывай рисунок
Но у меня теперь ещё пара вопросов.
1. Т.к. это будут тесты, то в нижней части я хочу разместить полосу кнопок с номерами вопросов. Кнопка, соответствующая непройденному вопросу, будет одного цвета, кнопка, соответствующая пройденному вопросу - другим цветом, а текущий вопрос ещё другим цветом.
Но из чего сделать эту полосу? Можно ли изменять цвет кнопок? Или может быть просто разместить на кнопке изображение, определённого цвета?
2. Как в picture Control поместить рисунок?
Как обрабатывать клики, движения мыши и прочие события у Picture Control и Static?
Как можно обработать MouseMove, MouseDown, MouseUP у кнопки, если у неё в событиях только клик, двойной клик и что-то ещё?
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
там рассказано подробно обо всем этом и многом другом.
Может кто-нибудь выложить эту книгу на сайт codenet.ru?
Я купил книгу Шеферда и Круглински "Программирование на Visual C++ .NET", разобрался со многими вещами, но там не описываются эти элементарные вещи, с которыми пока я работал на Borland'e проблем не возникало, и которые, извините, приходится спрашивать у Вас.
У Вас нет электронной книги Тома Арчера и Эндрю Уайтчепела "Visual C++.NET"? Заказать через интернет не могу, т.к. уже мало времени, а она пока придёт......
В целом мне уже почти всё понятно, осталось всего пара вопросов.
Я вставил в Picture Control bmp-файл, а с jpg, не получилось. ???
И самый главный вопрос. (надеюсь последний)
m_Valery, Вы написали, что полосу делать из Statica. Цвет кнопок менять можно, изображения вставлять в кнопку тоже можно.
Но КАК из Statica сделать эту полосу с кнопками???
на форму кнопки или радиокнопки,добавь к ним обработчики (правая кнопка->Add Event Handler)и ставь их на статик.Точно так же можно поставить кнопки и на Picture Control.Что касается цветных элементов управления или кнопок с рисунками.То имхо постарайся обойтись без этого,все это будет только загромождать интерфейс.По-моему аскетизм в интерфейся лучше.Насколько я помню в Picture Control вставляется Bitmap,ты и в Resource View не добавишь рисунок jpg, но его можно подругому поставить на диалог.Если надо могу рассказать.Книги Арчера в электронном виде у меня нет,в сети я ее тожене смог найти,но она продается(недавно видел).
2.В класс диалога добавляешь переменную CImage m_image
3.В ф-ии OnInitDialog дописываешь
4.В ф-ии OnPaint дописываешь там где 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();
}
...