第35回 Internet Exolorer風にメニュー項目を追加する (タブブラウザーを作る)

tabbrowser142.gif
今回はタブブラウザのメニューにInternet Explorerと同じような項目を追加する。項目を作るだけで実際に処理を実装するのはまだまだ先だ。

今回は一度にたくさんのメニュー項目を追加することになる。リソースエディタで1つずつ入力してもいいが、数が多いときは大変な作業になる。そこでrcファイルを直接編集して項目を追加する。

ソリューションエクスプローラーで「TabBrowser100.rc」の上で右クリックして現われるメニューから「コードの表示」を選択する。

tabbrowser143.gif するとリソースエディタが開かずに、直接rcファイルの中身が表示される。ここでメニューの項目をInternet Explorerと同じようなものに書き換える。今回はInternet Explorer 8と同じような配置になるようにした。
IDR_MAINFRAME MENU 
BEGIN
    POPUP "ファイル(&F)"
    BEGIN
        MENUITEM "新しいタブ(&T)\tCtrl+T",           ID_FILE_NEW
        MENUITEM "タブを複製(&B)\tCtrl+K",           ID_FILE_COPY_TAB
        MENUITEM "新規ウインドウ(&N)\tCtrl+N",         ID_FILE_NEW_WINDOW
        MENUITEM "新規セッション(&I)",                 ID_FILE_NEW_SESSION
        MENUITEM "開く(&O)...\tCtrl+O",           ID_FILE_OPEN
        MENUITEM "編集(&D)",                      ID_FILE_EDIT
        MENUITEM "上書き保存(&S)\tCtrl+S",           ID_FILE_SAVE
        MENUITEM "名前を付けて保存(&A)...",             ID_FILE_SAVE_AS
        MENUITEM "タブを閉じる(&C)\tCtrl+W",          ID_WINDOW_CLOSE
        MENUITEM SEPARATOR
        MENUITEM "ページ設定(&U)...",                ID_FILE_PRINT_SETUP
        MENUITEM "印刷(&P)...\tCtrl+P",           ID_FILE_PRINT
        MENUITEM "プレビュー(&V)...",                ID_FILE_PRINT_PREVIEW
        MENUITEM SEPARATOR
        POPUP "送信(&E)"
        BEGIN
            MENUITEM "ページを電子メールで(&P)...",           ID_FILE_SEND_PAGE
            MENUITEM "リンクを電子メールで(&L)...",           ID_FILE_SEND_LINK
            MENUITEM "ショートカットをデスクトップへ(&S)",         ID_FILE_CREATE_SHORTCUT
        END
        MENUITEM "インポートおよびエクスポート(&I)...",       ID_FILE_INPORT_EXPORT
        MENUITEM SEPARATOR
        MENUITEM "プロパティ(&R)",                   ID_FILE_PROPERTY
        MENUITEM "オフライン作業(&W)",                 ID_FILE_OFFLINE
        MENUITEM "終了(&X)",                      ID_APP_EXIT
    END
    POPUP "編集(&E)"
    BEGIN
        MENUITEM "切り取り(&T)\tCtrl+X",            ID_EDIT_CUT
        MENUITEM "コピー(&C)\tCtrl+C",             ID_EDIT_COPY
        MENUITEM "貼り付け(&P)\tCtrl+V",            ID_EDIT_PASTE
        MENUITEM SEPARATOR
        MENUITEM "全て選択(&A)\tCtrl+A",            ID_EDIT_SELECT_ALL
        MENUITEM SEPARATOR
        MENUITEM "このページの検索(&F)...\tCtrl+F",     ID_EDIT_FIND
    END
    POPUP "表示(&V)"
    BEGIN
        POPUP "ツール バー(&T)"
        BEGIN
            MENUITEM "ツール バー(&T)",                  ID_VIEW_TOOLBAR
            MENUITEM SEPARATOR
            MENUITEM "ツール バーを固定する(&L)",             ID_VIEW_FIXED
        END
        MENUITEM "クイックタブ(&Q)\tCtrl+Q",          ID_VIEW_QUICKTAB
        POPUP "エクスプローラー バー(&E)"
        BEGIN
            MENUITEM "お気に入り(&F)\tCtrl+Shift+I",     ID_VIEW_FAVORITE
            MENUITEM "履歴(&H)\tCtrl+Shift+H",        ID_VIEW_HISTORY
            MENUITEM "フィード(&D)\tCtrl+Shift+J",      ID_VIEW_FEED
        END
        MENUITEM "ステータス バー(&S)",                ID_VIEW_STATUS_BAR
        MENUITEM SEPARATOR
        MENUITEM "移動(&G)",                      ID_VIEW_GO
        MENUITEM "中止(&P)\tEsc",                 ID_IE_STOP
        MENUITEM "最新の状態に更新(&R)\tF5",            ID_IE_REFRESH
        MENUITEM SEPARATOR
        POPUP "拡大(&Z)"
        BEGIN
            MENUITEM "拡大\tCtrl +",                  ID_VIEW_ZOOM_PLUS
            MENUITEM "縮小\tCtrl -",                  ID_VIEW_ZOOM_MINUS
            MENUITEM SEPARATOR
            MENUITEM "400%",                        ID_VIEW_ZOOM_400
            MENUITEM "200%",                        ID_VIEW_ZOOM_200
            MENUITEM "150%",                        ID_VIEW_ZOOM_150
            MENUITEM "125%",                        ID_VIEW_ZOOM_125
            MENUITEM "100%",                        ID_VIEW_ZOOM_100
            MENUITEM " 75%",                        ID_VIEW_ZOOM_75
            MENUITEM " 50%",                        ID_VIEW_ZOOM_50
            MENUITEM SEPARATOR
            MENUITEM " カスタム...",                        ID_VIEW_ZOOM_CUSTOM
        END
        POPUP "文字の大きさ(&X)"
        BEGIN
            MENUITEM "最大(&G)",                      ID_VIEW_CHAR_MAX
            MENUITEM "大(&L)",                       ID_VIEW_CHAR_LARGE
            MENUITEM "中(&M)",                       ID_VIEW_CHAR_MIDDLE
            MENUITEM "小(&S)",                       ID_VIEW_CHAR_SMALL
            MENUITEM "最小(&A)",                      ID_VIEW_CHAR_MIN
        END
        POPUP "エンコード(&D)"
        BEGIN
            MENUITEM "自動選択",                        ID_VIEW_ENCODE_AUTO
            MENUITEM SEPARATOR
            MENUITEM SEPARATOR
            MENUITEM "ドキュメントの方向 - 左から右",            ID_VIEW_ENCODE_TO_RIGHT
            MENUITEM "ドキュメントの方向 - 右から左",            ID_VIEW_ENCODE_TO_LEFT
        END
        POPUP "スタイル(&Y)"
        BEGIN
            MENUITEM "スタイルなし(&N)",                  ID_VIEW_STYLE_NONE
            MENUITEM "既定のスタイル(&D)",                 ID_VIEW_STYLE_DEFAULT
        END
        MENUITEM "カーソル ブラウズ(&B)\tF7",           ID_VIEW_CURSOR_BROWSE
        MENUITEM SEPARATOR
        MENUITEM "ソース(&C)",                     ID_VIEW_SOURCE
        MENUITEM "セキュリティ報告(&S)",                ID_VIEW_SECURITY_REPORT
        MENUITEM "インターナショナル Web サイト アドレス(&I)",  ID_VIEW_DOMAIN
        MENUITEM "Web ページのプライバシー ポリシー(&V)...",  ID_VIEW_PRIVACY_POLICY
        MENUITEM "全画面表示(&F)\tF11",              ID_VIEW_FULL_SCREEN
    END
    POPUP "ウインドウ(&W)"
    BEGIN
        MENUITEM "閉じる(&C)\tCtrl+F4",            ID_WINDOW_CLOSE
        MENUITEM "全て閉じる(&A)",                   ID_WINDOW_CLOSE_ALL
    END
    POPUP "お気に入り(&A)"
    BEGIN
        MENUITEM "dummy",                       ID_FAVORITE_DUMMY
        MENUITEM "お気に入りに追加(&A)...",             ID_IE_ADDFAVORITE
        MENUITEM "お気に入りバーに追加(&B)",              ID_FAVORITE_ADD_TO_BAR
        MENUITEM "現在の全てのタブをお気に入りに追加(&T)...",    ID_FAVORITE_ADD_ALLTAB
        MENUITEM SEPARATOR
        MENUITEM "お気に入りの整理(&O)...",             ID_IE_ORGANIZE_FAVORITE
        MENUITEM SEPARATOR
    END
    POPUP "ツール(&T)"
    BEGIN
        MENUITEM "閲覧の履歴の削除(&D)...\tCtrl+Shift+Del", ID_TOOL_CLEAR_HISTORY
        MENUITEM "InPrivate ブラウズ(&I)\tCtrl+Shift+P", ID_TOOL_INPRIVATE_BROWSE
        MENUITEM "接続の問題を診断(&C)...",             ID_TOOL_CHECK_NETSTAT
        MENUITEM "最終閲覧セッションを再度開く(&S)",          ID_TOOL_OPEN_LAST_SESSION
        MENUITEM SEPARATOR
        MENUITEM "InPrivate フィルター\tCtrl+Shift+F", ID_TOOL_INPRIVATE_FILTER
        MENUITEM "InPrivate フィルター設定(&S)",       ID_TOOL_INPRIVATE_FILTER_OPTION
        MENUITEM SEPARATOR
        POPUP "ポップアップ ブロック(&P)"
        BEGIN
            MENUITEM "無効にする(&B)",                   ID_TOOL_POPUP_DISABLE
            MENUITEM "設定(&P)...",                   ID_TOOL_POPUP_OPTION
        END
        POPUP "SmartScreen フィルター機能(&T)"
        BEGIN
            MENUITEM "この Web サイトを確認する(&C)",         ID_TOOL_CHECK_THIS_SITE
            MENUITEM "SmartScreen フィルター機能を無効にする(&F)...", ID_TOOL_SMARTSCREEN_DISABLE
            MENUITEM "安全でない Web サイトを報告する(&R)",      ID_TOOL_SEND_REPORT
        END
        MENUITEM "アドオンの管理(&A)",                 ID_TOOL_MANAGE_ADDON
        MENUITEM SEPARATOR
        MENUITEM "このフィードの購読(&F)...",            ID_TOOL_FEED_ADD
        MENUITEM "フィード探索(&E)...",               ID_TOOL_FEED_FIND
        MENUITEM "Windows Update(&U)",          ID_TOOL_WINDOWS_UPDATE
        MENUITEM SEPARATOR
        MENUITEM "開発者ツール(&L)\tF12",             ID_TOOL_DEVELOP
        MENUITEM SEPARATOR
        MENUITEM "インターネット オプション(&O)",           ID_TOOL_INTERNET_OPTION
    END
    POPUP "ヘルプ(&H)"
    BEGIN
        MENUITEM "バージョン情報 TabBrowser100(&A)...", ID_APP_ABOUT
    END
END

tabbrowser144.gif 次に新しいメニュー用のIDを定義するために「resource.h」を開く。実際にIDを追加する前に、まず使われていない不要なIDを削除しておこう。
#define IDD_ABOUTBOX                    100
#define IDR_MAINFRAME                   128
#define IDM_TAB                         201
#define ID_WINDOW_CLOSE                 32772
#define ID_WINDOW_CLOSE_ALL             32773
#define ID_IE_BACK                      32775
#define ID_IE_NEXT                      32776
#define ID_IE_STOP                      32777
#define ID_IE_REFRESH                   32778
//#define ID_32779                        32779		//■削除
//#define ID_32780                        32780		//■削除
//#define ID_32781                        32781		//■削除
#define ID_FAVORITE_DUMMY               32782
//#define ID_32783                        32783		//■削除
//#define ID_32784                        32784		//■削除
#define ID_IE_ORGANIZE_FAVORITE         32785
#define ID_IE_ADDFAVORITE               32786
//#define ID_BUTTON32787                  32787		//■削除
#define ID_FAVORITE_FIRST               34000
#define ID_FAVORITE_LAST                54000

tabbrowser145.gif そして次に新しいIDの定義を追加する。
#define	ID_FILE_COPY_TAB					32787
#define	ID_FILE_NEW_WINDOW					32788
#define	ID_FILE_NEW_SESSION					32789
#define	ID_FILE_EDIT						32790
#define	ID_FILE_SEND_PAGE					32791
#define	ID_FILE_SEND_LINK					32792
#define	ID_FILE_CREATE_SHORTCUT				32793
#define	ID_FILE_INPORT_EXPORT				32794
#define	ID_FILE_PROPERTY					32795
#define	ID_FILE_OFFLINE						32796
#define	ID_VIEW_FIXED						32797
#define	ID_VIEW_QUICKTAB					32798
#define	ID_VIEW_FAVORITE					32799
#define	ID_VIEW_HISTORY						32800
#define	ID_VIEW_FEED						32801
#define	ID_VIEW_GO							32802
#define	ID_VIEW_ZOOM_PLUS					32803
#define	ID_VIEW_ZOOM_MINUS					32804
#define	ID_VIEW_ZOOM_400					32805
#define	ID_VIEW_ZOOM_200					32806
#define	ID_VIEW_ZOOM_150					32807
#define	ID_VIEW_ZOOM_125					32808
#define	ID_VIEW_ZOOM_100					32809
#define	ID_VIEW_ZOOM_75						32810
#define	ID_VIEW_ZOOM_50						32811
#define	ID_VIEW_ZOOM_CUSTOM					32812
#define	ID_VIEW_CHAR_MAX					32813
#define	ID_VIEW_CHAR_LARGE					32814
#define	ID_VIEW_CHAR_MIDDLE					32815
#define	ID_VIEW_CHAR_SMALL					32816
#define	ID_VIEW_CHAR_MIN					32817
#define	ID_VIEW_ENCODE_AUTO					32818
#define	ID_VIEW_ENCODE_TO_RIGHT				32819
#define	ID_VIEW_ENCODE_TO_LEFT				32820
#define	ID_VIEW_STYLE_NONE					32821
#define	ID_VIEW_STYLE_DEFAULT				32822
#define	ID_VIEW_CURSOR_BROWSE				32823
#define	ID_VIEW_SOURCE						32824
#define	ID_VIEW_SECURITY_REPORT				32825
#define	ID_VIEW_DOMAIN						32826
#define	ID_VIEW_PRIVACY_POLICY				32827
#define	ID_VIEW_FULL_SCREEN					32828
#define	ID_FAVORITE_ADD_TO_BAR				32829
#define	ID_FAVORITE_ADD_ALLTAB				32830
#define	ID_TOOL_CLEAR_HISTORY				32831
#define	ID_TOOL_INPRIVATE_BROWSE			32832
#define	ID_TOOL_CHECK_NETSTAT				32833
#define	ID_TOOL_OPEN_LAST_SESSION			32834
#define	ID_TOOL_INPRIVATE_FILTER			32835
#define	ID_TOOL_INPRIVATE_FILTER_OPTION		32836
#define	ID_TOOL_POPUP_DISABLE				32837
#define	ID_TOOL_POPUP_OPTION				32838
#define	ID_TOOL_CHECK_THIS_SITE				32839
#define	ID_TOOL_SMARTSCREEN_DISABLE			32840
#define	ID_TOOL_SEND_REPORT					32841
#define	ID_TOOL_MANAGE_ADDON				32842
#define	ID_TOOL_FEED_ADD					32843
#define	ID_TOOL_FEED_FIND					32844
#define	ID_TOOL_WINDOWS_UPDATE				32845
#define	ID_TOOL_DEVELOP						32846
#define	ID_TOOL_INTERNET_OPTION				32847

tabbrowser146.gif
手動でリソースIDを編集するときに一番気をつけなければいけないのが、APSTUDIO_INVOKEDで囲まれた部分の定義だ。

ここにはリソースエディタで新しくIDを作るときに、次の新しいIDで利用する番号が保存されている。ここの編集を忘れると、違う名前で同じ番号のIDがリソースエディタによって生成されてしまう。

新しく生成したIDのうちの最大の値よりも1つ大きい値を今回の場合は「_APS_NEXT_COMMAND_VALUE」を「32848」として定義しておく。
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        202
#define _APS_NEXT_COMMAND_VALUE         32848
#define _APS_NEXT_CONTROL_VALUE         1000
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

tabbrowser147.gif
これでビルド/実行すると無事にメニュー項目が増えた。

今回のメニュー項目の追加では、キーボードショートカットを無視した。次回は今回追加したメニュー項目のキーボードショートカットを設定する。

プロジェクトファイルをダウンロード


カテゴリー「タブブラウザーを作る」 のエントリー