Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 85
от 09.04.2005, 20:20

Администратор:Калашников О.А.
В номере:Вопросов: 3, Ответов: 7


Вопрос № 19195: Привет! Не подскажете ли, как сделать в диалоговом окне ссылку на web страничку или e-mail, т.е. чтобы при щелчке по ней открывался сайт или почтовая прога. P.S. VC6.0, WinAPI....
Вопрос № 19212: Здравствуйте уважаемые эксперты. Вопрос в продолжение вопроса №18935 о тулбаре. Я перепробовал всевозможные способы: при объявлении CToolBar в MainDlg.h выдаётся ошибка, что класс уже объявлен. Но ни одним из указанных способов мне не удалось застави...
Вопрос № 19227: Ув эксперты! Пытаюсь вызвать ф-ю ftime,чтобы вытащить миллисекунды,компиллер выдает 'Ambiguity between ftime(timeb *) and std::ftime()'.Самое интересное,что пример взял из MSDN.Что бы это могло значить? Спасибо за ответ....

Вопрос № 19195
Привет!
Не подскажете ли, как сделать в диалоговом окне ссылку на web страничку или e-mail, т.е. чтобы при щелчке по ней открывался сайт или почтовая прога.
P.S. VC6.0, WinAPI.
Отправлен: 04.04.2005, 00:52
Вопрос задал: hicks (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Bob Johnson
Здравствуйте, hicks!
Нужно писать свой контрол. основные моменты:
1. Если курсор находится в пределах контрола (пришло сообщение WM_SETCURSOR), то контрол устанавливает курсором "руку" (привычно для пользователя), вызывает SetCapture, чтобы получать сообщение WM_MOUSEMOVE даже если курсор выйдет за пределы контрола и как-либо перерисовывается (например, цвет меняет).
2. В ответ на сообщение WM_LBUTTONDOWN (или UP) происходит собственно открытие заданной ссылки (ShellExecute).
3. Когда придет WM_MOUSEMOVE, необходимо проверить, находится ли курсор мыши в пределах контрола, и если нет - то вызвать ReleaseCapture и отрисоваться в обычном состоянии.
4. Еще, надо обрабатывать WM_CAPTURECHANGED.

* EMan2.0: ---===*** Debug mode ***===---

Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 04.04.2005, 01:28

Отвечает: gvozdok
Здравствуйте, hicks!
почта:
::ShellExecute(NULL,NULL,"mailto:ваш@адрес.com?subject=Тема...", NULL,NULL,SW_SHOWNORMAL);
линк:
::ShellExecute(m_hWnd,"open","http://www.сайт.com",NULL,",",SW_SHOW);
Ответ отправил: gvozdok (статус: 4-ый класс)
Отправлен: 04.04.2005, 04:21

Отвечает: dentist
Здравствуйте, hicks!
натягиваеш на диалог Custom Control и в свойствах пишеш:
Class = Hyperlink
только не забудь потом вызвать InitCommonControls!
а потом всё как обычно SetDlgItemText итд...
Ответ отправил: dentist (статус: 1-ый класс)
Отправлен: 04.04.2005, 09:16


Вопрос № 19212
Здравствуйте уважаемые эксперты. Вопрос в продолжение вопроса №18935 о тулбаре. Я перепробовал всевозможные способы: при объявлении CToolBar в MainDlg.h выдаётся ошибка, что класс уже объявлен. Но ни одним из указанных способов мне не удалось заставить его появиться. Я даже попробовал создать новый проект - то же самое!
Кроме того почему-то не появляется MessageBox, даже если я его вызываю из главной формы. Приложение просто становится неактивным и не отвечает. Возможно, это связано?
Сработал только ::MessageBox(NULL, ...); да и то - окно не появляется сразу, а тотлько когда я сверну приложение (щёлкнув по значку на панели задач).
Проект создавался MFC-wizard-ом как Dialog-Based (не помню тоочно )).
Иконки для тулбара тоже создавались встроенным конструктором.
Остальные окна нормально рисуются на главном окне по ShowWindow()
MS Visual Studio 6.0, WinXP Pro.
Отправлен: 04.04.2005, 10:04
Вопрос задал: Казаров Виталий (статус: 1-ый класс)
Всего ответов отправлено: 1

Отвечает: Raptor1
Здравствуйте, Казаров Виталий!
Что значит класс уже объявлен, может бытьобъявлен его экземпляр с тем же именем а не класс CToolBar который объявлен в библиотеке MFC, а MessageBox у тебя не появляется по видому потому, что до него не доходит выполнение, проверь в отладчике. Кстати, для Dialog-Based приложения отсутствует тулбар, конструируемый по умолчанию и вопрос тебе следовало задать так: Как добавить тулбар к диалогу?
1. Добавляем переменную в h файл диалога
CToolBar m_tbar;
2. В OnInitDialog
CDialog::OnInitDialog();
CRect rectOld;
CRect rectNew;
CRect rect;
CPoint ptOffset;
CWnd *pWndCtrl;
GetClientRect(rectOld);
if(!m_tbar.Create(this)||!m_tbar.LoadToolBar(IDR_TOOLBAR1))
{
return -1;
}
m_tbar.SetBarStyle(m_tbar.GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY);
// восстановим размеры диалога до прицепления тулбара
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0,CWnd::reposQuery,rectNew);
ptOffset.x=rectNew.left-rectOld.left;
ptOffset.y=rectNew.top-rectOld.top;
pWndCtrl=GetWindow(GW_CHILD);
while(pWndCtrl)
{
pWndCtrl->GetWindowRect(rect);
ScreenToClient(rect);
rect.OffsetRect(ptOffset);
pWndCtrl->MoveWindow(rect,FALSE);
pWndCtrl=pWndCtrl->GetNextWindow();
}
GetWindowRect(rect);
rect.right+=rectOld.Width()-rectNew.Width();
rect.bottom+=rectOld.Height()-rectNew.Height();
MoveWindow(rect);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
Ответ отправил: Raptor1 (статус: 2-ой класс)
Отправлен: 04.04.2005, 23:36
Оценка за ответ: 5
Комментарий оценки:
Тулбар появился! Теперь его надо заставить работать, но это другой вопрос.
(О MessageBox() в отладчике он доходит до MessageBox(GetSafeHDC(...)...) и на этом всё...)


Вопрос № 19227
Ув эксперты!
Пытаюсь вызвать ф-ю ftime,чтобы вытащить миллисекунды,компиллер выдает
'Ambiguity between ftime(timeb *) and std::ftime()'.Самое интересное,что пример взял из MSDN.Что бы это могло значить?
Спасибо за ответ.
Отправлен: 04.04.2005, 15:30
Вопрос задал: Ling (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: Voituk Alexander
Здравствуйте, Ling!
Это называется конфликтом имен. Т.е. описаны в разных модулях функции с одинаковыми именами. Это решается просто - ты определись, какая именно тебе нужна и поставь перед ней имя модуля, где он описан. Его можно определить, открыв h файл и посмотрев, значение
namespace ИмяМодуля.
Функцию вызываешь ИмяМодуля::ftime();
Ответ отправил: Voituk Alexander (статус: 6-ой класс)
Отправлен: 04.04.2005, 17:33

Отвечает: vitya
Здравствуйте, Ling!
1. Вызывайте std::ftime
2. уберите using namespace std - это вредно
3. убедитесь, что используете только С++ заголовочные файлы.
Ответ отправил: vitya (статус: Профессор)
Отправлен: 04.04.2005, 17:46

Отвечает: Raptor1
Здравствуйте, Ling!
Вот работающая конструкция (VC6.0)
#include <sys/timeb.h>
#include <time.h>
_timeb timebuffer;
_ftime( &timebuffer );
Ответ отправил: Raptor1 (статус: 2-ой класс)
Отправлен: 04.04.2005, 23:35


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.cplus
Отписаться

В избранное