2017-11-20 1 views
3

Desktop Bridge을 사용하여 일부 MFC 응용 프로그램을 Windows 10 응용 프로그램으로 패키지하려고합니다.온라인 도움말 콘텐츠 호스팅

내 HTML 도움말 파일 (CHM)이 포함되어 있고 설치된 프로그램으로 작업하는 데 문제가 없습니다. VS의 새 버전에는 도움말 파일이 포함되어 있지 않으며 해당 파일을 포함시키기위한 임시 해결책을 사용하면 파일이 생성됩니다 나는 접근 할 권리가 없다).

그래서 내 웹 사이트에서 온라인 도움말을 호스팅하는 것에 대해 궁금합니다. 발생하는 몇 가지 문제는 여러 도움말 항목을 호스팅하는 가장 좋은 방법과 도움말 항목에 액세스하는 동작을 (응용 프로그램 차원에서) 재정의하는 방법입니다. (내 응용 프로그램은 대화 상자를 기반으로합니다.)

다른 사람들이 이미이 작업을 수행했는지 궁금합니다. 나는이 문제들이 어떻게 다루어 졌는지를 검토하는 것이 궁금 할 것이다. 온라인에서 아무것도 찾을 수 없었습니다.

+0

그래서 chm 파일의 주제를 표시하려고하면 __exactly__가 발생합니까? –

+0

@MichaelWalz : 한 달 동안 여러 가지 문제를 해결하려고 노력하면서 Microsoft에 속한 사람들과 일 해왔다. 즉, CHM 파일이 패키지의 일부로 설치되지 않으면 존재하지 않으면 열 수 없습니다. 파일을 복사했지만 파일을 열 수있는 권한이없는 경우 MFC는 도움말 파일을로드 할 수 없다는 일반 메시지를 표시합니다. 나는이 많은 쟁점들을 계속해서 탐구하고 있지만, 여기서 도움말 콘텐츠를 온라인으로 호스팅하는 것에 대해 이야기하고 싶습니다. –

+0

CHM 파일을 HTML로 변환하는 패키지를 사용했습니다. 예 : http://www.publictalksoftware.co.uk/msa/HelpOnline/ –

답변

1

HTML 도움말을 하나의 문서에 호스팅하고 html 앵커를 사용하여 관심있는 주제로 안내합니다. 여러 페이지가 있으면 그에 따라 MyHelp를 수정하십시오.

실제로 데스크톱 브리지를 사용하지만이 같은 것을 시도 궁금하지 않았다 :

BOOL CMyDialog::OnHelpInfo(HELPINFO* pHelpInfo) 
{ 
    MyHelp(_T("HIDD_MYDIALOG"));   // HTML anchor goes here 
    return CDialog::OnHelpInfo(pHelpInfo); 
} 

... 

// a global helper function for showing help 
void MyHelp(LPCTSTR anchor) 
{ 
    extern CMyApp theApp; 
    TCHAR *cp, buffer[1000]; 

    // look for the html document in the program directory 
    strcpy(buffer, _T("file:///")); 
    DWORD dw = GetModuleFileName(theApp.m_hInstance, buffer + strlen(buffer), sizeof(buffer)); 

    if (cp = strrchr(buffer, '\\')) 
    { 
     strcpy(cp+1, _T("MyHelpDocument.htm#")); 
     strcat(cp+1, anchor); 

     // for some reason, I don't want the default browser to open, just the Internet Explorer 
     ShellExecute(NULL, _T("open"), _T("iexplore"), buffer, NULL, SW_SHOWNORMAL); 
      // or, for real online help, use just '_T("http://myurl.com/myonlinehelpdocument.html#") + anchor' 
      // instead of 'buffer' and ommit all before ShellExecute() 
    } 
} 

잘 모르겠어요에서 ShellExecute는 비록 상점 응용 프로그램에서 사용하는 방식으로 작동됩니다. 그러나 URL을 여는 방법은 분명있을 것입니다. Internet Explorer ActiveX가 앱 내부에 도움말 페이지를 표시하는 경우 시도해 볼 수 있습니다.

+1

응용 프로그램의 모든 대화 상자 클래스에 코드를 삽입해야합니까? 무시할 수있는 공통적 인 기본 방법이 있습니까? –

+0

물론, 메인 메시지 루프에서 WM_COMMANDHELP를 잡을 수 있습니다. 하지만 핸들러의 모든 도움말 컨텍스트 ID를 URL에 매핑해야합니다. 나는 이것이 너무 집중되어 있고, 작업량이 별개의 OnHelpInfo() 멤버를 갖는 것보다 실제로 낮지는 않다라고 생각합니다. 당신은 비록 당신의 URL을위한 기본으로 대화 ID를 가진 CDialog로부터 파생 된 CHelpfulDialog, 또는 URL을 생성하기 위해 창 제목을 사용하여 CWnd의 CHelpfulWnd를 가질 수 있습니다. 그러나 다시 한 번, 모든 CDialog 또는 CWnd를 파생 클래스로 대체해야합니다. 이는 여전히 일부 작업입니다. – thomiel

+0

정확히 내가 원하는 중앙 집중식 유형입니다. 해당 처리기에서 주제 ID를 다른 것으로 변환하거나 웹 사이트에서 ID를 인수로 처리하게 할 수 있습니다. 나는 그걸 가지고 놀거야. –

관련 문제