
前回はタブブラウザーに(機能は実装していないものの)メニュー項目を大量追加した。今回はメニューに割り当てられているショートカットキーの設定、未実装項目のグレーアウトをする。
キーボードショートカットの設定はリソースのアクセラレーターで行う。今回も数が多いのでリソースファイルを直接編集することにした。ソリューションエクスプローラーで「TabBrowser100.rc」を右クリックして現われるメニューから「コードの表示」を選択する。

リソースファイルが開いたら、「Accelerator」セクションにある定義をメニューに即したものに書き換える。今回は以下のようにした。
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
IDR_MAINFRAME ACCELERATORS
BEGIN
"T", ID_FILE_NEW, VIRTKEY, CONTROL
"K", ID_FILE_COPY_TAB, VIRTKEY, CONTROL
"N", ID_FILE_NEW_WINDOW, VIRTKEY, CONTROL
"O", ID_FILE_OPEN, VIRTKEY, CONTROL
"S", ID_FILE_SAVE, VIRTKEY, CONTROL
"W", ID_WINDOW_CLOSE, VIRTKEY, CONTROL
"P", ID_FILE_PRINT, VIRTKEY, CONTROL
"X", ID_EDIT_CUT, VIRTKEY, CONTROL
"C", ID_EDIT_COPY, VIRTKEY, CONTROL
"V", ID_EDIT_PASTE, VIRTKEY, CONTROL
"A", ID_EDIT_SELECT_ALL, VIRTKEY, CONTROL
"F", ID_EDIT_FIND, VIRTKEY, CONTROL
"Q", ID_VIEW_QUICKTAB, VIRTKEY, CONTROL
"I", ID_VIEW_FAVORITE, VIRTKEY, CONTROL, SHIFT
"H", ID_VIEW_HISTORY, VIRTKEY, CONTROL, SHIFT
"J", ID_VIEW_FEED, VIRTKEY, CONTROL, SHIFT
VK_ESCAPE, ID_IE_STOP, VIRTKEY
VK_F5, ID_IE_REFRESH, VIRTKEY
VK_ADD, ID_VIEW_ZOOM_PLUS, VIRTKEY, CONTROL
VK_SUBTRACT, ID_VIEW_ZOOM_MINUS, VIRTKEY, CONTROL
VK_F7, ID_VIEW_CURSOR_BROWSE, VIRTKEY
VK_F11, ID_VIEW_FULL_SCREEN, VIRTKEY
VK_F4, ID_WINDOW_CLOSE, VIRTKEY, CONTROL
VK_DELETE, ID_TOOL_CLEAR_HISTORY, VIRTKEY, CONTROL, SHIFT
"P", ID_TOOL_INPRIVATE_BROWSE, VIRTKEY, CONTROL, SHIFT
"F", ID_TOOL_INPRIVATE_FILTER, VIRTKEY, CONTROL, SHIFT
VK_F12, ID_TOOL_DEVELOP, VIRTKEY
VK_BACK, ID_EDIT_UNDO, VIRTKEY, ALT
VK_DELETE, ID_EDIT_CUT, VIRTKEY, SHIFT
VK_INSERT, ID_EDIT_COPY, VIRTKEY, CONTROL
VK_INSERT, ID_EDIT_PASTE, VIRTKEY, SHIFT
VK_F6, ID_NEXT_PANE, VIRTKEY
VK_F6, ID_PREV_PANE, VIRTKEY, SHIFT
END

さらに追加したメニュー項目を選択できないようにグレー表示にする。
「MainFrm.h」を開き、追加したメニュー項目をUIアイテムとして登録、無効化する。向こうにするだけなので本来ならOnCreateでUIEnable設定するべきだが、今後修正が楽なように今回はOnIdleに配置した。
virtual BOOL OnIdle()
{
CTabBrowser100View* pView;
pView = GetActivePageView();
//「戻る」「進む」ボタンの状態設定
{
bool bBack = false;
bool bNext = false;
if(pView)
pView->IsButtonEnable(bBack,bNext);
UIEnable(ID_IE_BACK,bBack ? TRUE : FALSE);
UIEnable(ID_IE_NEXT,bNext ? TRUE : FALSE);
}
//「編集」メニュー項目更新
{
bool bCopy = false;
bool bCut = false;
bool bPaste = false;
bool bSelectAll = false;
if(pView)
pView->IsEnable_EditCommand(bCopy,bCut,bPaste,bSelectAll);
UIEnable(ID_EDIT_COPY ,bCopy ? TRUE : FALSE);
UIEnable(ID_EDIT_CUT ,bCut ? TRUE : FALSE);
UIEnable(ID_EDIT_PASTE ,bPaste ? TRUE : FALSE);
UIEnable(ID_EDIT_SELECT_ALL ,bSelectAll ? TRUE : FALSE);
}
//■追加 未実装メニュー項目を全部無効に設定
{
UIEnable(ID_FILE_COPY_TAB, FALSE);
UIEnable(ID_FILE_NEW_WINDOW, FALSE);
UIEnable(ID_FILE_NEW_SESSION, FALSE);
UIEnable(ID_FILE_OPEN, FALSE);
UIEnable(ID_FILE_EDIT, FALSE);
UIEnable(ID_FILE_SAVE, FALSE);
UIEnable(ID_FILE_SAVE_AS, FALSE);
UIEnable(ID_FILE_SEND_PAGE, FALSE);
UIEnable(ID_FILE_SEND_LINK, FALSE);
UIEnable(ID_FILE_CREATE_SHORTCUT, FALSE);
UIEnable(ID_FILE_INPORT_EXPORT, FALSE);
UIEnable(ID_FILE_PROPERTY, FALSE);
UIEnable(ID_FILE_OFFLINE, FALSE);
UIEnable(ID_EDIT_FIND, FALSE);
UIEnable(ID_VIEW_FIXED, FALSE);
UIEnable(ID_VIEW_QUICKTAB, FALSE);
UIEnable(ID_VIEW_FAVORITE, FALSE);
UIEnable(ID_VIEW_HISTORY, FALSE);
UIEnable(ID_VIEW_FEED, FALSE);
UIEnable(ID_VIEW_GO, FALSE);
UIEnable(ID_VIEW_ZOOM_PLUS, FALSE);
UIEnable(ID_VIEW_ZOOM_MINUS, FALSE);
UIEnable(ID_VIEW_ZOOM_400, FALSE);
UIEnable(ID_VIEW_ZOOM_200, FALSE);
UIEnable(ID_VIEW_ZOOM_150, FALSE);
UIEnable(ID_VIEW_ZOOM_125, FALSE);
UIEnable(ID_VIEW_ZOOM_100, FALSE);
UIEnable(ID_VIEW_ZOOM_75, FALSE);
UIEnable(ID_VIEW_ZOOM_50, FALSE);
UIEnable(ID_VIEW_ZOOM_CUSTOM, FALSE);
UIEnable(ID_VIEW_CHAR_MAX, FALSE);
UIEnable(ID_VIEW_CHAR_LARGE, FALSE);
UIEnable(ID_VIEW_CHAR_MIDDLE, FALSE);
UIEnable(ID_VIEW_CHAR_SMALL, FALSE);
UIEnable(ID_VIEW_CHAR_MIN, FALSE);
UIEnable(ID_VIEW_ENCODE_AUTO, FALSE);
UIEnable(ID_VIEW_ENCODE_TO_RIGHT, FALSE);
UIEnable(ID_VIEW_ENCODE_TO_LEFT, FALSE);
UIEnable(ID_VIEW_STYLE_NONE, FALSE);
UIEnable(ID_VIEW_STYLE_DEFAULT, FALSE);
UIEnable(ID_VIEW_CURSOR_BROWSE, FALSE);
UIEnable(ID_VIEW_SOURCE, FALSE);
UIEnable(ID_VIEW_SECURITY_REPORT, FALSE);
UIEnable(ID_VIEW_DOMAIN, FALSE);
UIEnable(ID_VIEW_PRIVACY_POLICY, FALSE);
UIEnable(ID_VIEW_FULL_SCREEN, FALSE);
UIEnable(ID_FAVORITE_ADD_TO_BAR, FALSE);
UIEnable(ID_FAVORITE_ADD_ALLTAB, FALSE);
UIEnable(ID_TOOL_CLEAR_HISTORY, FALSE);
UIEnable(ID_TOOL_INPRIVATE_BROWSE, FALSE);
UIEnable(ID_TOOL_CHECK_NETSTAT, FALSE);
UIEnable(ID_TOOL_OPEN_LAST_SESSION, FALSE);
UIEnable(ID_TOOL_INPRIVATE_FILTER, FALSE);
UIEnable(ID_TOOL_INPRIVATE_FILTER_OPTION, FALSE);
UIEnable(ID_TOOL_POPUP_DISABLE, FALSE);
UIEnable(ID_TOOL_POPUP_OPTION, FALSE);
UIEnable(ID_TOOL_CHECK_THIS_SITE, FALSE);
UIEnable(ID_TOOL_SMARTSCREEN_DISABLE, FALSE);
UIEnable(ID_TOOL_SEND_REPORT, FALSE);
UIEnable(ID_TOOL_MANAGE_ADDON, FALSE);
UIEnable(ID_TOOL_FEED_ADD, FALSE);
UIEnable(ID_TOOL_FEED_FIND, FALSE);
UIEnable(ID_TOOL_WINDOWS_UPDATE, FALSE);
UIEnable(ID_TOOL_DEVELOP, FALSE);
UIEnable(ID_TOOL_INTERNET_OPTION, FALSE);
}
UIUpdateToolBar();
return FALSE;
}
BEGIN_UPDATE_UI_MAP(CMainFrame)
UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_IE_BACK, UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_IE_NEXT, UPDUI_TOOLBAR)
UPDATE_ELEMENT(ID_EDIT_COPY, UPDUI_TOOLBAR | UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_EDIT_CUT, UPDUI_TOOLBAR | UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_EDIT_PASTE, UPDUI_TOOLBAR | UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_EDIT_SELECT_ALL, UPDUI_TOOLBAR | UPDUI_MENUPOPUP)
//■以下追加
UPDATE_ELEMENT(ID_FILE_COPY_TAB, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_NEW_WINDOW, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_NEW_SESSION, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_OPEN, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_EDIT, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_SAVE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_SAVE_AS, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_SEND_PAGE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_SEND_LINK, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_CREATE_SHORTCUT, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_INPORT_EXPORT, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_PROPERTY, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FILE_OFFLINE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_EDIT_FIND, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_FIXED, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_QUICKTAB, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_FAVORITE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_HISTORY, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_FEED, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_GO, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ZOOM_PLUS, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ZOOM_MINUS, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ZOOM_400, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ZOOM_200, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ZOOM_150, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ZOOM_125, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ZOOM_100, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ZOOM_75, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ZOOM_50, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ZOOM_CUSTOM, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_CHAR_MAX, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_CHAR_LARGE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_CHAR_MIDDLE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_CHAR_SMALL, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_CHAR_MIN, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ENCODE_AUTO, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ENCODE_TO_RIGHT, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_ENCODE_TO_LEFT, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_STYLE_NONE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_STYLE_DEFAULT, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_CURSOR_BROWSE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_SOURCE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_SECURITY_REPORT, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_DOMAIN, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_PRIVACY_POLICY, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_FULL_SCREEN, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FAVORITE_ADD_TO_BAR, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_FAVORITE_ADD_ALLTAB, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_CLEAR_HISTORY, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_INPRIVATE_BROWSE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_CHECK_NETSTAT, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_OPEN_LAST_SESSION, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_INPRIVATE_FILTER, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_INPRIVATE_FILTER_OPTION, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_POPUP_DISABLE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_POPUP_OPTION, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_CHECK_THIS_SITE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_SMARTSCREEN_DISABLE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_SEND_REPORT, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_MANAGE_ADDON, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_FEED_ADD, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_FEED_FIND, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_WINDOWS_UPDATE, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_DEVELOP, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_TOOL_INTERNET_OPTION, UPDUI_MENUPOPUP)
END_UPDATE_UI_MAP()

これでビルド/実行すると未実装なメニュー項目がグレーアウトし、選択できなくなった。
本当はさらにステータスバーへのメッセージ表示やTIPSが表示されるように、ストリングリソースの編集も行うべきだが、数が多く面倒なので保留しておく。
次回は「ファイル」メニューの「プロパティ」などいくつかのメニュー項目を実装する。
プロジェクトファイルをダウンロード