![]()
前回は「印刷」「印刷プレビュー」などの機能が使えるようにした。
今回は前回とまったく同じ方法で「コピー」や「切り取り」などのクリップボード関連操作をメニューからできるようにする。
CIEUtilityにCopy()などを実装する。今回は利用しないがSelectAll()も用意した。
//■追加
bool Copy(void)
{
if(_pIWebBrowser2 == NULL)
return false;
return SUCCEEDED(_pIWebBrowser2->ExecWB(OLECMDID_COPY,OLECMDEXECOPT_PROMPTUSER,NULL,NULL)) ? true : false;
}
//■追加
bool Cut(void)
{
if(_pIWebBrowser2 == NULL)
return false;
return SUCCEEDED(_pIWebBrowser2->ExecWB(OLECMDID_CUT,OLECMDEXECOPT_PROMPTUSER,NULL,NULL)) ? true : false;
}
//■追加
bool Paste(void)
{
if(_pIWebBrowser2 == NULL)
return false;
return SUCCEEDED(_pIWebBrowser2->ExecWB(OLECMDID_PASTE,OLECMDEXECOPT_PROMPTUSER,NULL,NULL)) ? true : false;
}
//■追加
bool SelectAll(void)
{
if(_pIWebBrowser2 == NULL)
return false;
return SUCCEEDED(_pIWebBrowser2->ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_PROMPTUSER,NULL,NULL)) ? true : false;
}
BEGIN_MSG_MAP(CMainFrame)
MESSAGE_HANDLER(WM_DNP_CREATENEWTAB, OnDnpCreateNewTab)
MESSAGE_HANDLER(WM_DNP_CHANGEFOCUS, OnDnpChangeFocus)
MESSAGE_HANDLER(WM_DNP_CHANGEADDRESS, OnDnpChangeAddress)
MESSAGE_HANDLER(WM_DNP_CHANGESTATUSTEXT, OnDnpChangeStatusText)
MESSAGE_HANDLER(WM_DNP_CHANGEPROGRESS, OnDnpChangeProgress)
NOTIFY_CODE_HANDLER(CBEN_ENDEDIT, OnAddressbarEnter)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew)
COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar)
COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
COMMAND_ID_HANDLER(ID_WINDOW_CLOSE, OnWindowClose)
COMMAND_ID_HANDLER(ID_WINDOW_CLOSE_ALL, OnWindowCloseAll)
COMMAND_ID_HANDLER(ID_FILE_PRINT, OnFileCommand)
COMMAND_ID_HANDLER(ID_FILE_PRINT_PREVIEW, OnFileCommand)
COMMAND_ID_HANDLER(ID_FILE_PRINT_SETUP, OnFileCommand)
COMMAND_ID_HANDLER(ID_EDIT_COPY, OnFileCommand) //■追加
COMMAND_ID_HANDLER(ID_EDIT_CUT, OnFileCommand) //■追加
COMMAND_ID_HANDLER(ID_EDIT_PASTE, OnFileCommand) //■追加
COMMAND_ID_HANDLER(ID_EDIT_SELECT_ALL, OnFileCommand) //■追加
COMMAND_RANGE_HANDLER(ID_WINDOW_TABFIRST, ID_WINDOW_TABLAST, OnWindowActivate)
COMMAND_ID_HANDLER(ID_IE_BACK, OnIECommand)
COMMAND_ID_HANDLER(ID_IE_NEXT, OnIECommand)
COMMAND_ID_HANDLER(ID_IE_STOP, OnIECommand)
COMMAND_ID_HANDLER(ID_IE_REFRESH, OnIECommand)
COMMAND_ID_HANDLER(ID_IE_ADDFAVORITE, OnIEAddFavorite)
COMMAND_ID_HANDLER(ID_IE_ORGANIZE_FAVORITE, OnIEOrganizeFavorite)
NOTIFY_CODE_HANDLER(TBVN_CONTEXTMENU, OnTabContextMenu)
NOTIFY_CODE_HANDLER(TBVN_PAGEACTIVATED, OnTabPageActivated)
MESSAGE_HANDLER(WM_MENUSELECT, OnMenuSelect)
MESSAGE_HANDLER(WM_SIZE, OnSize)
COMMAND_RANGE_HANDLER(ID_FAVORITE_FIRST,ID_FAVORITE_LAST,OnFavorite)
CHAIN_MSG_MAP_MEMBER(_cFovMenu)
CHAIN_MSG_MAP(CUpdateUI<CMainFrame>)
CHAIN_MSG_MAP(CFrameWindowImpl<CMainFrame>)
END_MSG_MAP()
LRESULT OnFileCommand(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& bHandled)
{
CTabBrowser100View* pView;
pView = GetActivePageView();
if(pView == NULL)
{
bHandled = FALSE;
return 0;
}
bHandled = TRUE;
switch(wID)
{
case ID_EDIT_COPY: //■追加 コピー
pView->Copy();
break;
case ID_EDIT_CUT: //■追加 切り取り
pView->Cut();
break;
case ID_EDIT_PASTE: //■追加 貼り付け
pView->Paste();
break;
case ID_EDIT_SELECT_ALL: //■追加 全てを選択
pView->SelectAll();
break;
case ID_FILE_PRINT: //印刷
pView->PrintOrPreview(true);
break;
case ID_FILE_PRINT_PREVIEW: //印刷プレビュー
pView->PrintOrPreview(false);
break;
case ID_FILE_PRINT_SETUP: //印刷セットアップ
pView->PrintSetup();
break;
default:
bHandled = FALSE;
break;
}
return 0;
}
![]()
これでビルド/実行すると「編集」メニューから「コピー」などの操作ができるようになった。
本来であればIEコントロール上で選択されている部分がないばあいは「コピー」メニューを無効にするべきだ。しかし今回の実装では常にメニューが有効になっている。
次回はIEコントロールの状態に合わせてメニューの有効/無効が自動で変わるようにする。
