C# – 도움말 연결하기

참고사항

1. 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

2. 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:WINDOWSHelp 에서 검색한다.

3. HelpProvider 컨트롤을 이용하여 Context-Sensitive Help 작성

‘구성요소 에서 HelpProvider를 MyHelpProvider이름으로 추가
‘-> HelpNameSpace 에 도움말파일지정 C:testapi.chm
컨트롤이 포커스를 가진상태에서 F1키를 눌렀을 때 해당하는 도움말이 올라오는 기능이나 타이틀바에서 물음표버튼을 클릭하고 원하는 컨트롤를 클릭하면 행당하는 도움말을 보여주는 기능이다.
구성요소판넬에서 HelpProvider를 폼에 삽입하고 MyHelpProvider로 이름을 변경한다.

HelpNameSpace 속성에 도움말파일을 C:testapi.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

4. 작성예제

// F1과 버튼을 통해 도움말의 특정 topic을 띄우는 예제
// form load 시 InitHelp() 호출할것


private string helpChm = @"D:kimstar_work_omcLGT Backup CA도움말chmBackupCA_EMS.chm";
private string helpTopic = "/02_메인화면/콘솔.htm";

private void InitHelp()
{
    // f1 눌렀을때 도움말 이동
    helpProvider1.HelpNamespace = helpChm;
    helpProvider1.SetShowHelp(this, true);
    helpProvider1.SetHelpKeyword(this, helpTopic);
    helpProvider1.SetHelpNavigator(this, HelpNavigator.Topic);

    // 창에 도움말 버튼
    // this.HelpButton = true;

    // btnHelp 버튼 클릭
    btnHelp.Click += new System.EventHandler(btnHelp_Click);
}

private void btnHelp_Click(object sender, EventArgs e)
{
    // 특정위치로 띄우기
    Help.ShowHelp(btnHelp, helpChm, HelpNavigator.Topic, helpTopic);
}

MDI에서는 아래와 같이 코딩하면 될듯함

// parent에서........
public static string helpChm = @"D:kimstar_work_omcLGT Backup CA도움말chmBackupCA_EMS.chm";
public static string GetActiveFormTopic()
{
    if (this.ActiveMdiChild != null)
    {
        switch (this.ActiveMdiChild.Name)
        {
            case "Form2": return "/02_메인화면/콘솔.htm";
            case "Form3": return "/02_메인화면/리소스.htm";
            default: return string.Empty;
        }
    }
    else
        return string.Empty;
}


// child에서 ...........
private void btnHelp_Click(object sender, EventArgs e)
{
    Help.ShowHelp(btnHelp, 부모.helpChm, HelpNavigator.Topic, 부모.GetActiveFormTopic());
}

댓글 남기기