直接上代码靠谱
// CMFCApplication3Dlg 消息处理程序
BOOL CMFCApplication3Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
GetHtmlView();
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CMFCApplication3Dlg::GetHtmlView()
{
if (m_pYlsHtmlView != NULL)
return;
m_pYlsHtmlView = new CHSHtmlView;
m_pYlsHtmlView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE,
CRect(0, 0, 0, 0), this, IDC_TAB, NULL);
m_pYlsHtmlView->m_pYlsHtmlDlg = this;
// m_pYlsHtmlView->m_cNotFocus = 1;
m_pYlsHtmlView->m_strCurPage = "www.baidu.com";
m_pYlsHtmlView->OnInitialUpdate();
//m_pYlsHtmlView->MoveWindow(CRect(0, 0, 0, 0));
CRect rect;
this->GetClientRect(rect);
m_pYlsHtmlView->MoveWindow(rect);
}
class CHSHtmlView : public CHtmlView
{
public:
CHSHtmlView(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CHSHtmlView)
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CHSHtmlView)
public:
virtual void OnDocumentComplete(LPCTSTR lpszURL);
virtual void OnInitialUpdate();
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
void OnDraw(CDC* pDC);
// Implementation
public:
virtual ~CHSHtmlView();
// Generated message map functions
//{{AFX_MSG(CHSHtmlView)
afx_msg void OnSize(UINT nType, int cx, int cy);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
CDialog* m_wndYlsBrow;
public:
CDialog* m_pYlsHtmlDlg;
public:
static CString m_strHtmPage;
CString m_strCurPage;
};
/
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_YLSHTMLVIEW_H__7761C0CE_28E1_467C_9764_A78A59508B03__INCLUDED_)
#include "stdafx.h"
#include "HSHtmlView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/
// CHSHtmlView
CString CHSHtmlView::m_strHtmPage;
IMPLEMENT_DYNCREATE(CHSHtmlView, CHtmlView)
CHSHtmlView::CHSHtmlView()
{
m_wndYlsBrow = NULL;
m_pYlsHtmlDlg = NULL;
}
CHSHtmlView::~CHSHtmlView()
{
}
void CHSHtmlView::DoDataExchange(CDataExchange* pDX)
{
CHtmlView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CHSHtmlView)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CHSHtmlView, CHtmlView)
//{{AFX_MSG_MAP(CHSHtmlView)
ON_WM_SIZE()
ON_WM_CREATE()
END_MESSAGE_MAP()
/
// CHSHtmlView diagnostics
void CHSHtmlView::OnDocumentComplete(LPCTSTR lpszURL)
{
CHtmlView::OnDocumentComplete(lpszURL);
if (m_pYlsHtmlDlg)
m_pYlsHtmlDlg->SendMessage(HTML_MSG_CLICKURL, HTML_MSG_CLICKURL, HTML_MSG_CLICKURL);
}
void CHSHtmlView::OnInitialUpdate()
{
SetScrollSizes( MM_TEXT, CSize(0,0), CSize(0,0), CSize(0,0));
Navigate2(m_strCurPage,NULL,NULL);
}
void CHSHtmlView::OnDraw(CDC* pDC)
{
}
BOOL CHSHtmlView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
dwStyle &= ~WS_BORDER;
// create the view window itself
m_pCreateContext = pContext;
if (!CView::Create(lpszClassName, lpszWindowName,dwStyle, rect, pParentWnd, nID, pContext))
return FALSE;
m_wndYlsBrow = new CDialog();
RECT rectClient;
GetClientRect(&rectClient);
// create the control window
// AFX_IDW_PANE_FIRST is a safe but arbitrary ID
if (!m_wndYlsBrow->CreateControl(CLSID_WebBrowser, lpszWindowName,
WS_VISIBLE | WS_CHILD, rectClient, this, AFX_IDW_PANE_FIRST)){
DestroyWindow();
return FALSE;
}
LPUNKNOWN lpUnk = m_wndYlsBrow->GetControlUnknown();
HRESULT hr = lpUnk->QueryInterface(IID_IWebBrowser2, (void**)&m_pBrowserApp);
if (!SUCCEEDED(hr)) {
m_pBrowserApp = NULL;
m_wndYlsBrow->DestroyWindow();
DestroyWindow();
return FALSE;
}
return TRUE;
}
void CHSHtmlView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
if (m_wndYlsBrow && ::IsWindow(m_wndYlsBrow->m_hWnd)){
// need to push non-client borders out of the client area
CRect rect;
GetClientRect(rect);
::AdjustWindowRectEx(rect,m_wndYlsBrow->GetStyle(), FALSE, WS_EX_CLIENTEDGE);
m_wndYlsBrow->SetWindowPos(NULL, rect.left, rect.top,
rect.Width(), rect.Height(), SWP_NOACTIVATE | SWP_NOZORDER);
}
}