Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: (ст)Ещё несколько вопросов (VC,MFC)  (Прочитано 9728 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« : 19-08-2004 10:04 » 

1) как запустить файл справки *.hlp из программы ? (причём - из папки самого екзешника программы?)

2) как сделать то же, но с уже открытым нужным разделом справки?

3) как сымитировать программно нажатие на кнопку тулбара? Или: какая процедура вызывается при нажатии на кнопу SaveAs ? (она создаётся по умолчанию и вызывает сериализацию)

её ID == ID_FILE_SAVE_AS
но понять, что она вызывает я не смог...

Может если назначить виртуальную клавишу - как через неё "нажать" программно?

(VC++6.0, MFC)

4) ещё - если переместить тулбар, то его можно закрыть как простое окно. А вот как вернуть взад? Улыбаюсь
« Последнее редактирование: 01-05-2007 09:53 от Алексей1153++ » Записан

Pu
Большой босс

ru
Offline Offline
78


« Ответ #1 : 19-08-2004 10:17 » 

на 1 вопрос, посредством функции винапи
   ::WinHelp( NULL, m_directoryOfHelpFile.c_str(),HELP_CONTENTS,NULL);
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 19-08-2004 12:20 » 

1,2 уже сказали, посмотри в МСДНе флаги предпоследнего параметра там всё популярно есть

3. Самое простое просто вызвать ф-ю обработчик этой команды  Ага

а что за проект? откуда? стандартно мастер не переписывает ID_FILE_SAVE_AS

посмотри внимательно карту сообщений в СРР App класса, там есть такое
   ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
   ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
например

может и ID_FILE_SAVE_AS тоже уже там, или в Doc?

4.  Ну... делаешь меню пункт, по клику на него делаешь
ShowWindow(SW_HIDE SW_SHOW)

Посмотри как МФЦ это с MainToolBarом делает. Исходники доступны.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Pu
Большой босс

ru
Offline Offline
78


« Ответ #3 : 19-08-2004 13:00 » 

также по 3-му вопросу
програмно можно нажать кнопку на тулбаре отправив сообщение в HWND тулбара функцией винапи
::SendMessage(HWND hWnd, UINT Msg,WPARAM wParam,  LPARAM lParam);
хде hwnd - хендл окна тулбара
msg = WM_COMMAND
LOWORD(wParam) - id кнопки на которую хочешь жмать
ну это как бы основное
Записан

Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать.
(с) Артур Джонс
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 19-08-2004 13:28 » 

Pu, ага, лепота Улыбаюсь

Код:

{{WinHelp)NULL, "SHELEKTOY.HLP",HELP_CONTENTS,NULL:;

открывает как раз из директории прогры. Да ещё, если не находит, так вежливо: "Не хотели бы вы...", "Не могли бы вы..." Улыбаюсь

Джон, мсдэна у меня нет

в Winuser.h такие флаги предлагают
#define HELP_CONTEXT      0x0001L  // Display topic in ulTopic
#define HELP_QUIT         0x0002L  // Terminate help
#define HELP_INDEX        0x0003L  // Display index
#define HELP_CONTENTS     0x0003L
#define HELP_HELPONHELP   0x0004L  // Display help on using help
#define HELP_SETINDEX     0x0005L  // Set current Index for multi index help
#define HELP_SETCONTENTS  0x0005L
#define HELP_CONTEXTPOPUP 0x0008L
#define HELP_FORCEFILE    0x0009L
#define HELP_KEY          0x0101L  // Display topic for keyword in offabData
#define HELP_COMMAND      0x0102L
#define HELP_PARTIALKEY   0x0105L
#define HELP_MULTIKEY     0x0201L
#define HELP_SETWINPOS    0x0203L

я пробовал с HELP_INDEX, но не получается

 :arrow:
Цитата

Самое простое просто вызвать ф-ю обработчик этой команды

вот-вот, а я не могу найти его... Поиск ID_FILE_SAVE_AS находит только в ShelekToy.rc  :?

в карте нет

да, блин, делов-то всё из-за чего: надо CArchive правильно создать для сериализации, у него конструктор
CArchive(CFile* pFile, UINT nMode, int nBufSize = 4096, void* lpBuf = NULL);
но значения полей я не знаю

:arrow:

решение оказалось проще Улыбаюсь

визард пишет
Код:

int CMainFrame{{OnCreate)LPCREATESTRUCT lpCreateStruct:
|
...
...

[b(// TODO{ Delete these three lines if you don't want the toolbar to
//  be dockable

m_wndToolBar.EnableDocking)CBRS_ALIGN_ANY:;
EnableDocking)CBRS_ALIGN_ANY:;
DockControlBar)&m_wndToolBar:;[/b(

return 0;
"




Улыбаюсь Ремарим - и никаких проблем, и бар не мувается - лепота, да и только!
Записан

Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 22-08-2004 09:53 » 

кто-нибудь, подскажите, как открыть нужный раздел справки...
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 23-08-2004 07:40 » 

Держи вырезку из МСДНа

Call this member function to invoke the WinHelp application.
virtual void WinHelp(
   DWORD_PTR dwData,
   UINT nCmd = HELP_CONTEXT
);
Parameters
dwData
Specifies additional data. The value used depends on the value of the nCmd parameter.
nCmd
Specifies the type of help requested. For a list of possible values and how they affect the dwData parameter, see the WinHelp Windows function.
Remarks
The framework also calls this function to invoke the WinHelp application.
The framework will automatically close the WinHelp application when your application terminates.
Example
// Header File: HELPIDS.H
//
// This example header file is #include'd twice:
// (1) It is #include'd by the .CPP file that passes the DWORD
//     context i.d. to CWinApp::WinHelp.
// (2) It is #include'd in the [MAP] section of the .HPJ file,
//     to associate the help context string "HID_MYTOPIC" with
//     the help context numeric i.d., 101.
// The help context string "HID_MYTOPIC" is what identifies the
// help topic in the help .RTF source file, in the "#" footnote:
//     # HID_MYTOPIC
//
// Note, it is not necessary to manage help context id's this way
// for help topics associated with command id's and user interface
// id's defined in your RESOURCE.H file; you should use the MAKEHM
// tool via the custom build rule on your resource.h file to produce
// a help map (.HM) file for these id's.  It is necessary to manage
// help context id's as illustrated here only for help topics not
// associated with command id's or user interface id's.

#define HID_MYTOPIC 101
 

   // Show the custom help topic that has the context string
   // "HID_MYTOPIC" in the help .RTF file, and which is mapped
   // to the DWORD i.d. HID_MYTOPIC in the above HELPIDS.H file.
   AfxGetApp()->WinHelp(HID_MYTOPIC);
 

// The following is one line of code in the help map (.HM)
// file produced by the MAKEHM tool, which is called by the custom
// build rule on the resource.h file.  The MAKEHM tool reads the
// following #define in the application's RESOURCE.H file:
//    #define ID_MYCOMMAND 0x08004
// and adds a help id offset value of 0x10000 to create the
// help context DWORD value 0x18004.  See MFC Tech Note 28
// for more information on help id offset values.
 
HID_MYCOMMAND                           0x18004
 

   // Rarely will you need to directly call WinHelp yourself
   // with the help context i.d. for a command or user interface
   // object. The framework will call WinHelp automatically when
   // the user, for example, hits F1 when the focus is on a
   // My Command menu item. However, if you do want to directly
   // call WinHelp for the help topic associated with the command,
   // here is how you would do it:

   AfxGetApp()->WinHelp(0x10000 + ID_MYCOMMAND);
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 23-08-2004 11:50 » 

спасибо Улыбаюсь

по ходу дела вот это:
::WinHelp(NULL,"SHELEKTOY.HLP",HELP_CONTEXT, TOPIC_ID);

то что надо Улыбаюсь

осталось только понять, как автоматизировать получение нужного TOPIC_ID...

или они пронумерованы по порядку 1,2,3....  как расположены в RTF-исходнике для файла справки?
Записан

Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #8 : 16-04-2006 19:02 » new

(комент)

Статья по созданию хелпа  ( если не было )
« Последнее редактирование: 01-05-2007 09:53 от Алексей1153++ » Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines