HTMLヘルプを起動する


HTMLヘルプを起動するには HtmlHelp 関数を使用します。
関数が使用できるかどうかはIEのバージョンに依存します。


Sample code
#include <windows.h>
#include <tchar.h>

#define HH_DISPLAY_TOPIC 0
#define HH_DISPLAY_TOC   1

LPCTSTR lpszAppName = LPCTSTR("MyApp");

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

#define IDM_EXIT  100
#define IDM_TOC   101
#define IDM_TOPIC 102

typedef HWND (WINAPI *PHH)(HWND, LPCTSTR, UINT, DWORD);
PHH phtmlHelp = NULL;

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int nCmdShow)
{
    MSG        msg = {0};
    HWND       hWnd;
    WNDCLASSEX wc = {0};
    
    //メニュー作成
    HMENU hMenu = CreateMenu();
    HMENU hPopMenu = CreatePopupMenu();
    AppendMenu(hMenu, MF_POPUP | MF_STRING, reinterpret_cast<UINT_PTR>(hPopMenu), TEXT("ファイル(&F)"));
    AppendMenu(hPopMenu, MF_POPUP | MF_STRING, IDM_EXIT, TEXT("終了(&X)"));
    hPopMenu = CreatePopupMenu();
    AppendMenu(hMenu, MF_POPUP | MF_STRING, reinterpret_cast<UINT_PTR>(hPopMenu), TEXT("ヘルプ(&H)"));
    AppendMenu(hPopMenu, MF_POPUP | MF_STRING, IDM_TOC, TEXT("目次(&C)"));
    AppendMenu(hPopMenu, MF_POPUP | MF_STRING, IDM_TOPIC, TEXT("トピックの検索(&H)"));
    
    //メインウィンドウクラス登録
    wc.cbSize        = sizeof(WNDCLASSEX);
    wc.style         = 0;
    wc.lpfnWndProc   = WndProc;
    wc.cbClsExtra    = 0;
    wc.cbWndExtra    = 0;
    wc.hInstance     = hInstance;
    wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW + 1);
    wc.lpszMenuName  = NULL;
    wc.lpszClassName = lpszAppName;
    wc.hIconSm       = NULL;
    if(RegisterClassEx(&wc) == 0) {
        return 0;
    }
    
    //メインウインドウ作成
    hWnd = CreateWindow(lpszAppName, lpszAppName, WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, hMenu, hInstance, NULL);
    if(hWnd == NULL) {
        return 0;
    }
    
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);
    
    HINSTANCE hLib = LoadLibrary(TEXT("HHCTRL.OCX"));
    if(hLib != NULL) {
#ifdef UNICODE
        phtmlHelp = reinterpret_cast<PHH>(GetProcAddress(hLib, "HtmlHelpW"));
#else
        phtmlHelp = reinterpret_cast<PHH>(GetProcAddress(hLib, "HtmlHelpA"));
#endif
    }
    
    //メイン メッセージ ループ
    while(GetMessage(&msg, NULL, 0, 0)) 
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    
    if(hLib != NULL) {
        FreeLibrary(hLib);
    }
    return static_cast<int>(msg.wParam);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message) 
    {
        case WM_COMMAND:
            {
                int wmId, wmEvent;
                wmId    = LOWORD(wParam);
                wmEvent = HIWORD(wParam);
                SetCursor(LoadCursor(NULL, IDC_WAIT));
                switch(wmId) 
                {
                    case IDM_EXIT:
                        SendMessage(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0);
                        break;
                    case IDM_TOC: //目次
                        if(phtmlHelp != NULL) {
                            (*phtmlHelp)(GetDesktopWindow(), TEXT("C:\\MyHelp.chm"), HH_DISPLAY_TOC, NULL);
                        }
                        break;
                    case IDM_TOPIC: //トピックの検索
                        if(phtmlHelp != NULL) {
                            (*phtmlHelp)(GetDesktopWindow(), TEXT("C:\\MyHelp.chm"), HH_DISPLAY_TOPIC, NULL);
                        }
                        break;
                    default:
                        return DefWindowProc(hWnd, message, wParam, lParam);
                }
                SetCursor(LoadCursor(NULL, IDC_ARROW));
            }
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

一覧メニューへ