HTML Help Workshop 사용법
SI솔루션에 관계하는 일을 주로 하다보니 엑셀이나 워드처첨 단독 패키지에서 제공하는 도움말 같은것을 만들어서 배포할 기회는 기억에 없다. 7년전쯤 부터 Help Workshop를 사용해 왔는데 주로 웹에서 좋은 자료를 검색하고는 개인적인 용도로 컴파일 해서 레퍼런스로 정리해두는 용도로 사용해 왔다. 보이지 않게 새버전이 나오기도 해서 정리를 해보고자 한다. Help Workshop는 VS6.0 서비스팩 5와 오피스XP(2002)에 포함되었던 걸로 확인한 바있다. 일단 다운받을 수 있는 링크를 첨부한다. 이 강좌는 전체적인 윤곽을 잡는 용도이며 향후 세부적이고 섬세한 내용은 워크샵의 도움말 파일을 참고하면 될것이다.
1.HTML Help Workshop 및 관련문서를 다운받자. [HelpDocs.zip(1.3MB), htmlhelp.exe(3.3MB)]
2.HTML 파일작성
도움말 예제는 문서자료(HelpDocs.zip)에 포함되어 있는 api.chm 파일을 디컴파일 해서 사용하기로 하자.
압축된 HTML파일들이 풀릴 경로와 도움말파일의 경로를 지정한 후 “OK”버튼을 클릭하자.
OK 버튼을 클릭한다.
기존의 WinHelp프로젝트를 이용할 것인지를 묻는 대화상자인데 여기는 스킵한다.
Help프로젝트파일과 경로를 지정한다.
<'; FONT-SIZE: 12pt; mso-font-kerning: 0pt; mso-fareast-font-family: 굴림" lang=EN-US>
Add버튼을 클릭하여 세가지 파일을 추가 시킨다.
마침버튼을 클릭하면 프로젝트생성이 마무리된다.
프로젝트, 컨텐츠, 인덱스 탭이 있는데 기본적으로 프로젝트 탭이 선택되어 있다.
여기서 저장버튼을 한번 클릭하자.
빙수기 모양의 “Compile HTML file” 버튼을 클릭하자.
안경모양의 “View Compiled File” 버튼을 클릭하자.
4.도움말 목차편집
도움말 화면의 목차에 해당하는 부분을 작성하자.
Contents탭을 처음으로 선택하면 그림과 같이 토픽파일을 추가할것인지 새로 생성할 것인지 물어보는데 여기서는 그림처럼 새로 생성하자.
Contents탭에서 2번째 버튼은 폴더를 세번째 버튼은 엔트리를 추가하는 것만 다르고 추가하는방법은 같다. 그림과 같이 목차를 추가해보고 아래에 세부항목들을 추가해 보자. Entry title에 트리에 나타날 제목을 입력하고 Add버튼을 클릭하여 연결할 HTML파일을 선택한다.
예에서는 cmd_hh_display_search.htm 파일에 네임테그를 추가하여
<H2><A name="Example">Example</A></H2> 연결하였다.
5.인덱스 파일작성 : 목차만들기와 유사한 작업이다.
인덱스 파일을 추가하고 저장될 경로와 이름을 지정한다.
그림과 같이 인덱스 타이틀 셋을 추가하고 포함시킨 HTML파일 세을 연결시킨다. 두번째 열쇠모양 버튼을 클릭하면 다음과 같이 엔트리 작성 창이 열린다. 작성방법은 목차와 동일하다.
6.도움말 화면 인터페이스 설정
Project 탭에서 첫번째 버튼 Change Project Options 버튼을 클릭하면 다음과 같은 창이 열린다.
여기서는 도움말창의 타이틀을 지정하였다. 아직 윈도우를 하나도 작성하지 않아서 기본윈도우을 지정할 수 없다.
Project 탭에서 세번째 버튼 Add/Modify Windows definition 버튼을 클릭하면 다음과 같은 창이 열린다.
일반탭에서 "My Windows"를 추가하고 타이틀을 입력하였다.
Position 탭에서 도움말 차의 폭과 높이만 지정하였다.
네비게이션 페인의 폭을 지정하고 검색탭을 추가하다록 채크하였다.
확인버튼을 클릭하면 다음창이 열린다.
두가지 채크박스를 모두 채크하면 컴파일한 chm파일에 서치탭이 포함된다.
7.Context-Sensitive Help를 위한 작업
맵핑파일 api.h를 다음과 같이 작성한다.
#define IDH_INDEX 1000
#define IDH_SEARCH 1002
#define IDH_TOPIC 1003
텍스트 파일 topic.txt을 다음과 같이 작성한다.
.topic 1000
HH_DISPLAY_INDEX command
.topic 1002
HH_DISPLAY_SEARCH command
.topic 1003
HH_DISPLAY_TOPIC command
프로젝트탭에서 네번째 버튼 “HtmlHelp API information” 버튼을 클릭한다.
“Header file..” 버튼을 클릭하고 api.h를 포함시킨다.
“Header file..” 버튼을 클릭하고 topic.txt를 포함시킨다.
“Add”버튼을 클릭하여 Alias와 HTML파일을 연결한다.
8. Net2k5에서 Api를 이용한 도움말 표시
' Api를 사용한 도움말 호출 : 함수와 상수선언
Private Declare Function HTMLHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" (ByVal hwndCaller As Integer, ByVal pszFile As String, ByVal uCommand As Integer, ByVal dwData As Integer) As Integer
Const HH_DISPLAY_TOPIC As Integer = &H0
Private Sub btnApi_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnApi.Click
Dim hWndParent As Integer
Dim hWndHTMLHelp As Integer
hWndParent = Me.Handle.ToInt32
'폼핸들, 도움말파일경로 + 보여줄파일 + 윈도우지정, 목차탭선택
hWndHTMLHelp = HTMLHelp(hWndParent, My.Application.Info.DirectoryPath & "\api.chm::/cmd_hh_display_topic.htm>My Windows", HH_DISPLAY_TOPIC, 0)
End Sub
9. System.Windows.Forms.Help 개체를 활용하는 방법
Private Sub btnHelpContent_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHelpContent.Click
System.Windows.Forms.Help.ShowHelp(Me, "\api.chm")
End Sub
'인덱스탭으로 열기
Private Sub btnHelpIndex_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHelpIndex.Click
System.Windows.Forms.Help.ShowHelpIndex(Me, "\api.chm")
End Sub
'찾기탭으로 열기
Private Sub btnHelpSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHelpSearch.Click
System.Windows.Forms.Help.ShowHelp(Me, "\api.chm", HelpNavigator.Find, "cmd_hh_display_search.htm")
End Sub
지정한 위치에 해당파일이 없을경우 c:\WINDOWS\Help\ 에서 검색한다.
10. HelpProvider 컨트롤을 이용하여 Context-Sensitive Help 작성
'구성요소 에서 HelpProvider를 MyHelpProvider이름으로 추가
'-> HelpNameSpace 에 도움말파일지정 C:\test\api.chm
: 컨트롤이 포커스를 가진상태에서 F1키를 눌렀을 때 해당하는 도움말이 올라오는 기능이나 타이틀바에서 물음표버튼을 클릭하고 원하는 컨트롤를 클릭하면 행당하는 도움말을 보여주는 기능이다.
구성요소판넬에서 HelpProvider를 폼에 삽입하고 MyHelpProvider로 이름을 변경한다.
HelpNameSpace 속성에 도움말파일을 C:\test\api.chm 지정한다.
폼의 MinimizeBox=False, MaxmizeBox=False, HelpButton = True로 한다.
컨트롤의 MyHelpProvider의 ShowHelp=True 로 준다.
인덱스탭의 인덱스 키워드로 조회
HelpNavigator=Index
HelpKeyword = "검색"
HTML파일 지정
HelpNavigator=Topic
HelpKeyword = "cmd_hh_display_search.htm"
문서번호로 조회
HelpNavigator=TopicId
HelpKeyword = 1000
11. VB6에서 Api를 이용한 도움말 표시
Private Declare Function HTMLHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" _
(ByVal hwndCaller As Long, ByVal pszFile As String, _
ByVal uCommand As Long, ByVal dwData As Long) As Long
Const HH_DISPLAY_TOPIC = &H0
Const HH_HELP_CONTEXT = &HF
Const HH_DISPLAY_INDEX = &H2
Private Sub cmdSearch_Click()
Dim hWndParent As Long
Dim hWndHTMLHelp As Long
hWndParent = Me.hWnd
'폼핸들, 도움말파일경로+내용파일+네임테그, 인덱스탭선택
hWndHTMLHelp = HTMLHelp(hWndParent, App.Path & "\api.chm::/cmd_hh_display_search.htm#Example", HH_DISPLAY_INDEX, 0)
End Sub
Private Sub cmdTopic_Click()
Dim hWndParent As Long
Dim hWndHTMLHelp As Long
hWndParent = Me.hWnd
'내용이 표시될 도움말 창을 지정했다. 이전 예제에서는 창을 하나만 만들었는데 목차나 인덱스 서치탭등이 없는 창을
'추가로 만들어서 해당창을 호출해 보면 좋을것 같다.
hWndHTMLHelp = HTMLHelp(hWndParent, App.Path & "\api.chm::/cmd_hh_display_topic.htm>My Windows", HH_DISPLAY_TOPIC, 0)
End Sub
12. VB6 GUI 설정을 이용한 방법
[프로젝트속성]에서 도움말 파일을 지정한다.
Context-Sensitive Help를 구성할 컨트롤의 HelpContextID 속성에 api.h에서 지정한 1000, 1002, 1003번을 입력하고 실행하면 해당컨트롤이 포커스를 가졌을 때 F1키에 반응하게 된다.