// SampleProjectDialog.h
#pragma once
class CSampleProjectDialog :
public CAppStdDialogImpl<CSampleProjectDialog>,
public CUpdateUI<CSampleProjectDialog>,
public CMessageFilter, public CIdleHandler
{
public:
DECLARE_APP_DLG_CLASS(NULL, IDR_MAINFRAME, L"Software\\WTL")
enum { IDD = IDD_MAINDLG };
enum { IDC_HTML = 1200 };
CHtmlCtrl m_html;
enum { MAX_URLTEXT = 256};
CEdit m_edit_url;
CButton m_button_show;
virtual BOOL PreTranslateMessage(MSG* pMsg){
return CWindow::IsDialogMessage(pMsg);
}
virtual BOOL OnIdle(){
return FALSE;
}
BEGIN_UPDATE_UI_MAP(CSampleProjectDialog)
END_UPDATE_UI_MAP()
BEGIN_MSG_MAP(CSampleProjectDialog)
MSG_WM_INITDIALOG(OnInitDialog)
MSG_WM_DESTROY(OnDestroy)
COMMAND_ID_HANDLER_EX(IDC_BUTTON_SHOW, OnButtonShow)
NOTIFY_CODE_HANDLER_EX(NM_BEFORENAVIGATE, OnBeforeNavigate)
NOTIFY_CODE_HANDLER_EX(NM_DOCUMENTCOMPLETE, OnDocumentComplete)
CHAIN_MSG_MAP(CUpdateUI<CSampleProjectDialog>)
CHAIN_MSG_MAP(CAppStdDialogImpl<CSampleProjectDialog>)
END_MSG_MAP()
BOOL OnInitDialog(CWindow wndFocus, LPARAM lInitParam){
AtlCreateEmptyMenuBar(m_hWnd);
// コントロール設定
m_edit_url = GetDlgItem(IDC_EDIT_URL);
m_button_show = GetDlgItem(IDC_BUTTON_SHOW);
m_edit_url.SetLimitText(MAX_URLTEXT - 1);
// HTMLコントロールのサイズを作成
CRect rcWindow;
GetWindowRect(rcWindow);
CRect rcEdit;
m_edit_url.GetWindowRect(rcEdit);
CRect rcButton;
m_button_show.GetWindowRect(rcButton);
CRect rcHTML;
rcHTML.top = 10;
rcHTML.bottom =
rcEdit.top - rcWindow.top - ::GetSystemMetrics(SM_CYCAPTION) - 10;
rcHTML.left =
rcEdit.left - rcWindow.left - ::GetSystemMetrics(SM_CXBORDER);
rcHTML.right =
rcButton.right - rcWindow.left - ::GetSystemMetrics(SM_CXBORDER);
// HTMLコントロールを作成
m_html.Create(m_hWnd, rcHTML, NULL,
WS_CHILD | WS_VISIBLE | WS_BORDER | HS_CONTEXTMENU, 0, IDC_HTML);
// メッセージループにメッセージフィルタとアイドルハンドラを追加
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->AddMessageFilter(this);
pLoop->AddIdleHandler(this);
SetMsgHandled(false);
return TRUE;
}
void OnDestroy(){
// メッセージループからメッセージフィルタとアイドルハンドラを削除
CMessageLoop* pLoop = _Module.GetMessageLoop();
pLoop->RemoveMessageFilter(this);
pLoop->RemoveIdleHandler(this);
}
void OnButtonShow(UINT uNotifyCode, int nID, CWindow wndCtl){
TCHAR szURL[MAX_URLTEXT];
m_edit_url.GetWindowText(szURL, MAX_URLTEXT);
m_html.Navigate(szURL);
}
LRESULT OnBeforeNavigate(LPNMHDR pnmh){
SetWindowText(_T("読み込み中..."));
return 0;
}
LRESULT OnDocumentComplete(LPNMHDR pnmh){
SetWindowText(_T("SampleProject"));
return 0;
}
};
|