HTMLヘルプを起動するには HtmlHelp 関数を使用します。
関数が使用できるかどうかはIEのバージョンに依存します。
#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;
}