|
답변이 없어서 만 이틀에 걸쳐 눈물나는 서핑을 통해서 발견한 rtf파일에 대한
내용입니다 정말 정보가 없더군요 두개의 파일의 공유의 차원에서 올려 봅니다
그리고 여기 들렸다 가시는 분들 아는것 있으면 좀 남기시고 가여
보기만 하지 말고 그럴려면 혼자 공부하고 혼자 아세요
정말 이거 찾느라 눈물 나서리 ~~~
어째든 수고 하세요 도움되길 바래요 ~~
윈도우즈 도움말 넓고 깊게
Help File 만들기
윈도우즈에서 제공하는 Help System을 사용하여 자신의 Application에 Help를 만들어 붙여보자. 이 기능을 사용하면 Application을 훨씬 더 사용하기 편리하게 바꾸어놓을 수 있다. 도움말 시스템을 사용하는 방법은 간단하다. 그러나 도움말 시스템이 사용할 도움말 파일(*.hlp)을 만드는 것은 문서로된 매뉴얼을 작성하는 것만큼이나 시간이 소요된다. 하지만 일단 만들어 놓으면 문서로된 매뉴얼보다는 훨씬 사용자에게 편리함을 제공할 수 있다.
그리고 이제는 거의 모든 윈도우즈용 프로그램들이 도움말 파일을 제공하고 있다. 여기서는 도움말 파일을 작성하는 방법과 그것을 프로그램에서 사용하는 방법에 관해서 알아보기로 한다.
파일 포맷
도움말 파일을 만들기 위해서는 도움말로 제공될 문서를 작성하여야 한다. 이 문서는 RTF Token이라는 것을 사용하여 일반적인 아스키 파일로 작성할 수도 있지만 그것보다는 워드프로세서를 사용하는 것이 훨씬 편하다. 그렇다고 아무런 워드프로세서나 마구 사용하여 작성할 수는 없다. 일반적으로 이러한 문서는 MS-Word에서 사용하는 ".rtf" 파일 포맷으로 작성되어야 한다. 꼭 MS-Word를 사용하지 않아도 된다고는 하지만 MS-Word 외에 RTF(Rich Text Format)파일 포맷을 지원하는 워드프로세서를 필자는 아직 본 적이 없다. MS-Word를 사용하는 사람도 적지는 않을 것이고 또 구하기도 어렵지 않기때문에 MS-Word로 문서를 작성하여 도움말 파일을 만드는 것을 설명하기로 하겠다. 기회가 된다면 일반적인 Text 에디터로 문서를 작성하는 방법도 알아보도록 하겠다.
용어 설명
윈도우즈에서 제공하는 도움말 시스템을 사용하려면 그것을 위해 미리 정해놓은 몇 가지 기준에 맞추어 문서를 작성하여야 한다. 그리고 나서 그 문서(".rtf" 파일)를 윈도우즈용 컴파일러가 제공하는 Help Compiler로 컴파일을 하고나서 자신의 애플리케이션의 Source Code에서 적절히 불러들여 사용하면 된다. Help Compiler는 ".rtf" 파일을 적절히 번역하기 위해서 미리 정의된 규약을 사용한다. 도움말 파일을 설명하기 위해선 다음의 용어들에 대한 이해가 필요하다.
(1) Context String
윈도우즈 도움말 시스템이 사용하는 도움말 파일은 적어도 1개 이상의 Topic을 가져야 한다. 그리고 이 Context String이란 것은 각각의 도움말 Topic들에 대한 Identifier 구실을 한다. 도움말 Topic이란 간단하게 말해서 도움말 윈도에서 한 번에 보일 수 있는 화면이라고 생각하면 된다. 물론 그 화면의 전부가 한 번에 보여지지 않고 스크롤바를 이용해야만 전체를 볼 수 있다고 해도 그것은 하나의 Topic이 된다.
즉 Context String이란 것은 그 화면에 뿌려지는 Text를 가리키는 포인터인 셈이다. 그리고 Topic은 하나의 '.rtf' 파일 안에 여러 개가 존재할 수 있으며 그런 경우 각 Topic은 도움말 파일을 워드프로세서로 작성할 때 Hard Page Breaker (Ctrl+Enter)에 의해 구분 된다. 그리고 그 각각은 그들 자신을 구별하기 위한 하나의 Context String을 가져야 한다. 문서 작성기에 의해 자동으로 구분 되는 페이지 분할은 Topic을 구분하지 못한다. 따라서 하나의 Topic을 작성하면서 그것이 워드프로세서 내에서 한 페이지를 넘는다고 걱정할 필요는 없다.
(2) Title
이것은 Topic의 제목이다. 그렇다고 도움말 화면에서 맨 위에 나타나는 Text는 아니다. 도움말 화면에서 맨 위에 나타나는 것은 말하자면 Data 즉, Text Data인 것이다. 이것은 Compiler가 내부적으로 그 Topic의 Title로 사용한다. 그럼 이것을 무엇에 쓰는가… 이 것은 Bookmark('책갈피') 또는 Keyword Search('찾기') 항목을 선택하였을 때 리스트 항목으로 나타나는 Text가 된다. 각 Topic은 Title을 가질 수 있고 이 Title은 그 Topic을 대표해서 리스트 박스 안에 표시된다.
말하자면 위에서 설명한 Context String은 Compiler를 위한 Topic 식별자이고 이것은 사용자를 위한 Topic 식별자인 셈이다. 만일 Title을 갖지 않으면 그 Topic은 Bookmark('책갈피') 또는 Keyword Search('찾기')항목을 선택하였을 때 리스트 항목에서 '>>>>Untitled Topic<<<<' 이라고 표시가 된다. 주로 이것은 그 Topic에 맨 위에 작성되는 제목과 일치하는 경우가 많다.
(3) Keyword
이것은 도움말 윈도에서 Search('찾기')라는 버튼을 눌러 자신이 찾고자 하는 단어를 사용하여 관련된 Topic을 찾고자 하는 경우에 사용되는 Text이다.
예를 들어 사용자가 '파일을 선택하여 Open하는 방법'에 관한 도움말을 보길 원한다고 하자. 그리고 사용자는 '찾기' 버튼을 눌러 나타나는 대화 상자의 입력 창에 '열기'라고 입력했다고 하자. 이때 파일의 Open에 관한 Topic이 있고 그것을 보여줄 수 있다면 사용자는 원하는 정보를 얻을 수 있을 것이다. 그러한 것을 대비하여 파일 Open에 관한 Topic에서 '열기'를 키워드로 지정했다면 사용자는 그 Topic을 선택하여 원하는 정보를 얻을 것이다. 즉, 이것은 각 Topic에서 다루는 내용에 관해 그 중심어를 그 Topic에 선언해 주는 단어들이다.
(4) Browsing Index
이것은 관련된 주제끼리 하나의 그룹으로 모아서 도움말 윈도의 버튼바에 나타나는
'<<'버튼과 '>>'버튼을 사용하여 옮겨다닐 수 있도록 해 주는 값들이다. 이것을 관련된 Topic 끼리 모아서 지정해 주면 지정된 그 Topic을 버튼을 사용하여 옮겨다닐 수 있게 된다. 어떤 도움말 파일에서는 이것이 지정되어 있지 않을 수도 있는 데 그런 경우 위에서 본 두 버튼은 Help Window에 나타나지 않거나 'grayed' 상태가 된다. 만일 관련된 주제끼리 모을 수 있는 그룹이 여러 개인 경우 각각에 대해 서로 다른 Browsing Index를 사용 할 수 있다.
(5) Jumping Topic
이것은 현재의 Topic에서 바로 이동(Jump)할 수 있는 Topic을 말한다. 주로 상호 참조(Cross-Reference)를 이루는 Topic들 사이에서 쓰이며 도움말 윈도에서 (윈도우즈 사용자가 다른 색을 지정하지 않았다면) 녹색의 글자에 실선으로 밑줄이 그어져 있는 항목을 말한다.
(6) Term Definition
이것은 간단한 용어의 설명을 할 수 있도록 한다. 도움말 항목에서 녹색의 글자에 점선으로 밑줄이 그어있는 항목을 말한다. 다른 화면으로 바뀌지 않고 메시지 박스같은 조그만 용어 설명 윈도만을 출력한다.
Context String과 Browsing Index, Title, Keyword이 각각 독립적으로 Topic들을 가리키고 있는 것을 볼 수 있다. 여기서 Browsing Index는 도움말 윈도에서 '<<'버튼과 '>>' 버튼을 사용하여 Topic 들 간을 이동한다. 그리고 Title과 Keyword로도 그것들이 정의된 Topic으로 이동할 수 있는데 이를 위해 도움말 윈도는 '책갈피'라는 메뉴와 '찾기'라는 버튼을 제공한다. 물론 Keyword가 하나도 지정되지 않았다면 '찾기' 버튼은 사용할 수 없다. 그리고 Context String 은 각각의 Topic에서 다른 Topic으로 이동할 필요가 있다고 판단될 때 Topic안에서 지정함으로써 사용자가 해당하는 Text (실선 밑줄 또는 점선 밑줄로 나타나는)를 마우스로 선택함으로써 원하는 Topic을 보여주도록 하는데 사용되는 것이다.
구현 방법과 예제
위에 설명된 6가지 항목을 Help Compiler가 인식할 수 있도록 하기 위해 각각의 항목에 대해 그것을 정의하는 방법이 있다.
이것들 중 Context String, Title, Browsing Index, 그리고 Keyword의 정의는 각 Topic의 시작 부분에서 '각주'(footnot e)로 정의되어야 하고 Jumping Topic과 Term Definition은 Topic 내에서 해당되는 위치에 정의되어야 한다. 그러면 각각에 대한 항목을 정의하는 법을 살펴보자.
(1) Context String
이것은 '#' footnote로 정의한다. 즉 워드프로세서에서 문서를 작성하면서 '삽입':'각주'를 선택하고 '사용자정의 각주 기호'를 선택한 다음 '#'를 입력하고 '확인' 버튼을 누르면 각주 입력 창이 열린다. 이 각주 입력 창에서 '#'뒤에 바로붙여서 또는 한 칸만을 띄우고 자신이 정한 Identifier를 입력한다. 한 칸 이상 띄우면 안된다. 이 Identifier를 사용하여 Compiler가 그 Topic을 구분한다.
예) # CONTEXTID1
주의 : 이 마크는 그 Topic의 맨 앞에 나와야 한다. 즉 이 마크 다음에 사용자에게 보일 Text를 작성하여야 한다.
(2) Title
이것은 '$' footnote로 정의한다. 각주를 만드는 방법은 위와 같으며 각주 창에서 '$' 다음에 Title로 사용할 Text를 입력한다. 주로 이것은 그 Topic의 제목과 일치시키는 것이 일반적이다.
예) $ 파일 열기
(3) Keyword
이것은 'K' footnote로 정의한다. 각주를 만드는 방법은 앞의 경우와 같으며 역시 'K' 다음에 Keyword로 정의할 단어들을 세미콜론(';')으로 구분한다.
예) K word1;word2;word3;
(4) Browsing Index
이것은 '+' footnote로 정의한다. 역시 앞의 방법과 같으며 '+' 다음에 Index를 정의한다. Index 그룹 명칭은 임의로 정할 수 있다.
그러나 하나의 그룹 안에서 그 명칭은 동일하여야 한다. 그렇지 않으면 Compiler는 다른 그룹으로 인식한다. 또한 가지 주의할 점은 같은 그룹 내에서 Index Number의 길이는 같아야 한다. 다시 말하면 '99'와 '100'은 길이가 다르다(99 : 2, 100 : 3). Compiler는 인덱스의 순서에 따라 그룹 내의 Topic 사이를 움직이는데 그 순서를 매기는 방법은 Index를 비교함으로써 이루어진다. 그러나 그것은 숫자로서 비교가 아니라 문자열로서 비교한다. 따라서 '1'은 '2' 보다 앞서지만 '99'는 '100' 보다 앞서지 못한다. 앞에서부터 비교하기 때문이다. 이런 경우에는 '99'를 '099'로 바꾸어 자리수를 맞추어 주어야 원하는 대로 Compile이 된다. 정의하는 형식은 '그룹명 :Index Number'이다.
예) + BROWSING_GROUPNAME:010
(5) Jumping Topic
이것은 그 Topic 내에서 찾아가고자 하는 Topic의 Title을 이중 밑줄로 지정함으로써 이루어진다. 즉 이것을 지정하려면 JUMPING-TOPIC-NAME과 같이 지정하면 도움말 화면에서 그 Text는 노색의 실선 밑줄로 보인다. 그리고 이렇게 지정된 Text뒤에 '숨김' 속성으로 이동할 Topic의 Context String을 지정하여야 한다.
(6) Term Definition
이것은 이중 밑줄이 아닌 단일 밑줄로 지정한다. 밑줄이 그어질 Text는 설명을 해야할 단어이다.
예) Term-ToBe-Defined
이렇게 하면 이것은 윈도 도움말 화면에서 노색의 점선 밑줄로 보이게된다. 역시 이 Text 뒤에도 보여줄 Topic의 Conte-xt String을 '숨김' 속성으로 지정하여야 한다. 이제 예제를 작성해보자. 작성할 도움말 파일의 내용은 다음과 같다. 우선 목차를 보여주는 부분이 있고 2개의 Topic이 있다. 이 2 개의 Topic은 상호 참조를 할 수 있으며 각각 2개씩의 Term Definition이 있다. 이것을 작성하기 위해서 MS_Word 또는 RTF 파일 형식을 지원하는 워드프로세서를 사용하여야 한다.
그리고 다음에 보이는 것은 실제의 RTF 파일이 아니라 이런 식으로 보일거라는 것을 나타낸 것이다. 이 예제를 그대로 작성하고자 한다면 MS-Word에 있는 '표식 보이기' 버튼을 누르고 작성하는 것이 편할 것이다.
예제)
#$BK 목차
다음 중 하나를 선택하면 그에 관한 Topic을 볼 수 있습니다.
1번 TopicCS_TOPIC1
━━━━-----------
2번 TopicCS_TOPIC2
━━━━-----------
<각주창> # CS_CONTENTS
$ 목차
B INDEX : 100
K Topic;Topic보기;목차;
------------------------- 'Hard Page Breaker(Ctrl+Enter)'
#$BK 1번 Topic
이것은 1번Topic이다. 여기에는 단어1CS_WD1과 단어2 CS_WD2에 대한 정의가 있고 2번 Topic으로 이동할 수 있다.
2번 Topic으로 이동CS_TOPIC2
-----------------------------
<각주창> # CS_TOPIC1
$ 1번 Topic
B INDEX : 200
K 1번Topic;단어1;단어2;
-------------------------- 'Hard Page Breaker(Ctrl+Enter)'
#$BK 2번 Topic
이것은 2번 Topic입니다. 여기에는 단어1CS_WD1과 단어 3CS_WD3에 대한 정의가 있고 1번Topic으로 이동할 수 있습니다.
1번 Topic으로 이동 CS_TOPIC1
------------------------
<각주창> # CS_TOPIC2
$ 2번 Topic
B INDEX : 300
K 2번Topic;단어1;단어3;
-------------------------- 'Hard Page Breaker(Ctrl+Enter)'
#$ 단어1
이것은 단어 1에 대한 설명입니다.
<각주창> # CS_WD1
$ 단어1
------------------------- 'Hard Page Breaker(Ctrl+Enter)'
#$ 단어2
이것은 단어 2에 대한 설명입니다.
<각주창> # CS_WD2
$ 단어2
------------------------- 'Hard Page Breaker(Ctrl+Enter)'
#$ 단어3
이것은 단어 3에 대한 설명입니다.
<각주창> # CS_WD3
$ 단어3
-------------------------- 'Hard Page Breaker(Ctrl+Enter)'
위와 같이 입력하고 저장할 때 '다른 이름으로 저장'을 선택하여 '파일 형식'에서
'서식있는 문자열(*.rtf)'를 선택하고 파일명을 주고 저장하면 된다. RTF 형식의 문서는 ASCII 형식이다. 즉 일반적인 Text 에디터로도 그 내용을 볼 수가 있다.
도스로 잠시 나가서 아무 에디터나 사용하여 내용을 한 번 보면 워드프로세서로 작업하는 것이 훨씬 편하다는 생각을 하게 될 것이다.
Compile하는 법
윈도우즈용 컴파일러를 가지고 있다면(Borland C/C++ 또는 Visual C++같은…) 그 안에‥\BIN\HC31.EXE라는 Microsoft에서 만든 Help Complier가 있을 것이다.
이것을 이용해서 컴파일을 하는데 우선 프로젝트 파일을 만들어야 한다. 프로젝트 파일이란 주어진 도움말 파일을 만들기 위한 여러 가지 설정을 하는 파일인데 일반 에디터로 작성하여 'hpj'라는 확장자로 저장하면 된다. 프로젝트 파일에서의 설정은 각 섹션별로 이루어지는데 섹션별 내용은 다음과 같다.
[OPTIONS] 섹션 :
여기서는 여러 가지 선택 스펙에 관한 정의가 이루어진다. 주로 많이 사용되는 몇 가지를 보면 다음과 같다.
TITLE=Help Example-My Help ; Help Window의 Window Caption을 지정한다.
CONTENTS=context_string ; 목차로 사용될 Topic을 그 Topic의 Context String을 사용하여 지정한다.
FORCEFONT=Modern ; 도움말 윈도에서 사용할 폰트를 지정한다.
MAPFONTSIZE=8-12:10 ; 폰트의 크기를 지정한다. 즉 원래 사이즈가 8~12인 것을 10으로 사용한다는 의미이다.
[MAP] 섹션 :
여기서는 각 Context String에 고유한 번호를 부여한다. 이렇게 부여된 번호는 몇 가지 사용될 곳이 있는데 Context Sen sitive Help를 구현하고자 하는 경우나 Help Macro를 사용하기 위한 경우가 대부분이다.
예) CS_CONTENTS 10
[BITMAPS] 섹션 :
여기서는 프로그램의 도움말에서 비트맵 이미지를 사용하는 경우 그 이미지의 파일 이름을 선언한다. 도움말 파일에 이미지를 사용하는 방법은 뒤에서 자세히 설명할 것이다.
예) LISTBOX.BMP; 비트맵 파일이 프로젝트 파일과 같은 디렉토리에 있는 경우
예) C:\TOOL\HELP\HELPEX\WINDOW.BMP; 비트맵 파일이 프로젝트 파일과 다른 디렉토리에 있는 경우 경로를 명시해야 한다.
[FILES] 섹션 :
여기서는 도움말 파일에 쓰일 RTF 문서 파일들을 선언한다. 앞의 예제에서 작성한 파일의 이름이 "myhelp.rtf" 인경우 다음과 같이 선언할 수 있다.
MYHELP.RTF
이것이 전부는 아니지만 여기서는 이들만으로도 충분하다. 사실 도움말 파일을 작성하는데 필수적인 것은 [FILES] 섹션뿐이다. 나머지는 더 다양한 옵션을 제공하기 위한 것들이다. 앞의 예제를 컴파일하기 위한 프로젝트 파일은 다음과 같이하면 된다(프로젝트 파일 이름은 myhelp.hpj, RTF파일 이름은 myhelp.rtf라고 하자).
[CONFIG]
BrowseButtons()
[OPTIONS]
CONTENTS=CS_CONTENTS
[FILES]
myhelp.rtf
라고 입력하고 파일을 저장한다. 여기서 [CONFIG] 섹션에 있는 BrowsButtons()라는 것은 도움말 윈도에서 '<<' 버튼과 '>>'버튼을 나타내도록 하는 것이다. 그리고 [OPTIONS]섹션에서 만들어질 도움말의 '목차'로 사용될 Topic을 예제에서의 맨 처음 타이틀 (CS_CONTENTS로 정의된)로 지정하였다. 만일 CONTENTS 항목 지정을 생략하면 도움말 파일 중에서 가장 처음에 있는 Topic이 디폴트로 사용된다. [FILES]섹션에서는 사용할 문서 파일을 나열해 주는데 프로젝트 파일과 같은 디렉토리에 문서 파일이 있는 경우에는 경로 명을 입력하지 않아도 상관없지만 프로젝트 파일과 문서 파일이 서로 다른 디렉토리에 있는 경우에는 경로명을 명시하여야 한다. 이제 프로젝트 파일이 만들어졌으니 그것을 컴파일 해보자.
도스 프롬프트에서 HC31 myhelp (HC31.EXE는 컴파일러 디렉토리에 있음)라고 하면 컴파일이 시작된다. 성공적으로 컴파일이 된 경우 화면에는 컴파일러 제작자에 관한 정보와 맨 아래 줄에 '...' 들만 보일 것이고 그렇지 않은 경우 경고 혹은 에러 메시지가 출력된다. 경고 메시지만 출력된 경우에는 일단 도움말 파일(myhelp.hlp)은 생성되었을 것이다. 에러 메시지가 출력된 경우에는 도움말 파일이 생성되지 않는다. 대부분 경고메시지나 에러 메시지들은 RTF 문서를 작성할때 실수에 의한 것이 많다. 위와 같은 예제에서는 문서가 작기 때문에 실수를 범할 여지가 많지 않아서 경고나 에러 메시지는 나지 않을 것이다.
다만 'Hidden Paragraph...' 어쩌고 하는 경고가 나왔으면 그것은 Context String을 '숨김' 속성으로 지정할 때 그 줄의 끝까지 지정하는 바람에 캐리지리턴 문자까지 '숨김'속성으로 지정된 경우에 자주 발생한다. 이런 경우는 지정을 다시 꼼꼼하게 해주거나 아니면 만들어진 파일을 그냥 사용해도 문제가 없다. 그외 에러 메시지는 이 예제에서라면 아마도 대부분 글자를 잘못 입력한데서 나오는 경우이다.
Help Window를 띄워보기
이제 Compile이 성공적으로 되었으면 나의 Windows용 애플리케이션에서 이것을 띄워보자. 지금까지 Help Window를 구현하지 못했다면 'WndProc'에서의 Help 처리가 아예 빠져 있거나 있다고 해도 다음과 비슷할 것이다.
........ progrma lines .........
case IDM_HELP : // 도움말을 보여주어야 할 메시지
MessageBox( hwnd, "Help Not Yet!!!", "APPLICATION",
MB_OK );
........ program lines .........
자! 이제 이것을 다음과 같이 바꾸어 보자.
case WM_HELP :
WinHelp( hwnd, "myhelp.hlp", HELP_CONTENTS, NULL );
break;
그리고 WM_DESTROY를 처리하는 곳으로 가서
case WM_DESTROY :
WinHelp( hwnd, "myhelp.hlp", HELP_QUIT, NULL ); // 새로
끼워넣은것
PostQuitMessage(0);
break;
이렇게 고치면 된다. 그러면 여기서 새로 만난 'WinHelp' 함수를 자세히 좀 보자.
BOOL WinHelp (HWND hwnd, LPSTR lpFilename,
WORD wCommand, DWORD dwData);
전체적인 생김새는 이렇고 각각의 argument를 보면
hwnd : Help를 부르는 Window의 Handle
lpFilename : 확장자가 '.hlp'인, 'HC31.EXE'로 컴파일된 파일 이름
wCommand : 다음 중 한 가지
HELP_COMMAND : dwData가 가리키는 도움말 매크로를 수행한다.
- 도움말 매크로에 관해선 나중에 설명한다.
HELP_CONTEXT : dwData로 지정해 준 Context String에 해당하는 Topic으로 시작 이때 dwData자리에는 프로젝트 파일에서 [MAP]섹션에 정의된 Context String들의 숫자 중 하나가 들어가야 한다.
HELP_CONTENTS : 프로젝트 파일에서 [OPTIONS]에 CONTENTS로 정의된 Topic으로 시작
HELP_HELPONHELP : Window Help System 사용법을 보여준다.
HELP_INDEX : '.hlp' 파일에 Browsing Index가 한 종류인 경우 그 그룹 으로 시작
HELP_KEY : dwData로 지정된 String Pointer가 가리키는 Keyword가 들어있는 Topic으로 시작 즉 이경우 dwData는 문자열에 대한 LONG 포인터이다.
HELP_MULTIKEY : 이 경우 dwData는 MULTIKEYHELP라는 구조체 변수를 가리키는데 그 구조체 변수가 담고있는 내용에 따라 그에 관한 Topic을 보여준다.
HELP_QUIT : Application의 Help Window를 종료
HELP_SETINDEX : 여러 개의 Index를 가진 '.hlp' 파일에 대해서 dwData가 가리키는 Context Stirng으로 시작. 이 Context Stirng은 '.hpj' 파일의 [MAP] Section에서 정의되어 있어야 한다.
dwData : 위의 wCommand 옵션을 설명할 때 그것들과 관련되어 설명이 되었다. 즉 이것은 32비트 자료형으로서 wCommand 옵션에 따라 그 내용이 달라진다. 어떤 경우는 정수형, 또 어떤 경우는 문자열에 대한 주소 또 어떤경우는 구조체에 대한 주소 등으로 그 쓰임새가 다양하다. 그러나 wCommand 옵션이 dwData 인자를 필요로 하지 않은 경우 - HELP_CONTENTS같은 -에는 0으로 설정하여야 한다.
이것이 WinHelp 함수에 관한 내용이다. 여기서 두 가지만 짚고 넘어가자. 하나는 프로그램이 있는 디렉토리에 그것이 사용할 도움말 파일(*.hlp)도 같이 있어야 한다. 아니면 WinHelp 함수를 부를 때 lpFilname에 경로명까지 지정하든지… 또 한 가지는 프로그램에서 도움말을 사용한다면 프로그램이 종료하기 전에 반드시 WinHelp 함수를 불러 HELP_QUIT이라는 인자를 사용해 도움말 윈도를 놓아주어야 한다.
그리고 혹시 작성한 헬프 파일을 보고싶은데 끼워넣을(?) 프로그램이 없다면 아무 프로그램에서나 도움말 윈도를 띄우고 '파일|열기' 메뉴를 사용해 만들어 놓은 도움말 파일을 확인해 볼 수 있다.
Bitmap 사용하기
Help Window에서 Bitmap을 사용하는 방법은 간단하다. 넣고싶은 Bitmap을 작성하고 넣고싶은 위치에 다음 세 가지 옵션 중 한 가지를 써서 지정하고 '.hpj' 파일의 [BITMAPS] Section에 그 파일 이름을 정의하면 된다. 또는 문서를 작성할때 워드프로세서 내에서 그림을 직접 붙여 넣어도 된다. 그림을 직접 문서에 끼워 넣는 것은 워드프로세서 사용 설명서를 보면 될 것이다. 다음 세 가지는 직접 붙여넣지 않고 컴파일 시에 도움말 파일에 들어가도록 하는 방법이다.
{bmc filename.bmp}
이 스트링이 있는 그 위치에 Bitmap을 넣는다. 좌우로 Topic에 쓰이는 Text Data가 올 수 있으며 따라서 너무 크지 않은 Bitmap을 사용해야 보기에 나쁘지 않을 것이다.
{bml filename.bmp}
현재 라인의 맨 왼쪽에 bitmap을 보여준다.
{bmr filename.bmp}
현재 라인의 맨 오른쪽에 bitmap을 보여준다.
즉, 문서 작성 시
... 도움말 글...{bmc listbox.bmp}... 도움말 글...
{bml window.bmp}... 도움말 글...
... 도움말 글...{bmr window.bmp}
이렇게 하고 프로젝트 파일에서
[BITMAPS]
listbox.bmp
window.bmp
라고 정의해 주고나서 컴파일을 하면 도움말 파일에 아름답게(?) 들어앉아 있는 비트맵 이미지를 볼 수 있을 것이다. 이렇게 이미지를 사용하면 설명하고자 하는 바를 훨씬 효율적으로 전달할 수 있다. 따라서 훨씬 설득력이 있는 방법이 될 수 있는데 한 가지… 아쉬운 점은 그림의 크기가 너무 크면 도움말 컴파일러가 컴파일을 하지 못한다는 것이다(메모리가 부족하다는 메시지를 출력한다).
자! 그러면 다른 쪽으로 눈을 돌려보자. 비록 그림 크기에는 제한이 있지만 도움말 시스템을 구현하는데 있어서 알아두면 살이 되는 (?) 몇 가지 기능이 있다. 이런 것을 사용하면 도움말 윈도에 자신만의 버튼을 만들어 붙일 수도 있고 도움말 윈도의 색이나 크기를 마음대로 조정할 수도 있으며 도움말 윈도 안에서 다른 윈도용 프로그램을 실행시키거나 하위(Sec ondary) 도움말 윈도를 만들어낼 수도 있다. 이런 기능은 그림크기에 대한 불만을 해소시켜 주기에 충분할 것이다. 물론 이러한 기능을 도움말 시스템에서 구현하는 것은 도움말 파일에 그림을 끼워넣는 것만큼이나 간단(?)하다. 그것은 다음에 자세히 알아보기로 하고 여기서 한 가지만 알고 가기로 하자.
다음에 나오는 것은 도움말 시스템에서 비트맵을 사용하여 토픽을 이동하는 것과 관련된 내용이다.
잠깐! - 공짜로(?) 얻는 힌트 한 가지
각 Topic의 제목들이 스크롤되지 않게 할 수 있다. 얼핏 들으면 이해가 가지 않겠지만 혹시 MS-Word를 사용하고 있다면 '도움말' 메뉴를 선택하여 도움말 윈도를 띄워보자. 그러면 아마도 맨 위에 있는 제목은 스크롤바를 조작해서 이동을 하더라도 스크롤되지 않고 (마치 clipping된 것처럼) 항상 그 위치에 있는 것을 볼 수 있다.
어떻게 한 거지? 아주 간단하다. 각 Topic에서 이렇게 스크롤되지 않을 부분을 블럭으로 설정한 뒤에 '서식|단락'메뉴에 의해 나타나는 대화 상자에서 '다음 단락과 연결'이라는 항목을 지정해주면 된다.
하이퍼 그래픽(Hyper-Graphic)
이번에는 하이퍼 그래픽을 사용한 윈도우즈 도움말 작성법을 알아보자. 하이퍼 그래픽이란 윈도우즈 도움말에서의 '핫스팟'(마우스로 클릭하면 무언가 동작을 일으키는 부분)을 주로 노색으로 나타나는 밑줄 그어진 문자 대신 그림을 지정하여 사용하도록 하는 것이다. 문자로 되어있는
|