
前回はツールバーとして「Googleツールバー」を利用するというかなりヘビーな実装をした。今回は軽く印刷関連機能の実装を行う。
IEコントロールはIWebBrowser2::ExecWB (IOleCommandTarget::Exec)により各種操作ができるように作られている。ここにOLECMDID_PRINTなどを与えることで印刷機能を利用する。
実際にIWebBrowser2を操作する処理をCIEUtilityに追加する。
ちなみに私はIOleCommandTarget関連は後から機能を拡張できる利点がある反面、外側から何が実装されているのかが分かりにくくCOMインターフェースの嫌な部分だと思う。なんとかならないのかな。。。
//■追加
//bPrintOrPreview=trueなら印刷、falseなら印刷プレビュー
bool PrintOrPreview(bool bPrintOrPreview)
{
HRESULT hr;
if(_pIWebBrowser2 == NULL)
return false;
if(bPrintOrPreview)
hr = _pIWebBrowser2->ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_PROMPTUSER,NULL,NULL);
else
hr = _pIWebBrowser2->ExecWB(OLECMDID_PRINTPREVIEW,OLECMDEXECOPT_PROMPTUSER,NULL,NULL);
return SUCCEEDED(hr) ? true : false;
}
//■追加
bool PrintSetup(void)
{
HRESULT hr = E_FAIL;
if(_pIWebBrowser2)
hr = _pIWebBrowser2->ExecWB(OLECMDID_PAGESETUP,OLECMDEXECOPT_PROMPTUSER,NULL,NULL);
return SUCCEEDED(hr) ? 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_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_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;
}
![]()
これで「印刷」「印刷プレビュー」「プリンタの設定」の各項目が利用できるようになった。
次回は「切り取り」「コピー」「貼り付け」というクリップボード関連機能を実装する。
