Enlace de descarga VS2019
https://my.visualstudio.com/Downloads?q=visual%20studio%202019&wt.mc_id=o~msft~vscom~older-downloads
Crear proyecto de diálogo MFC C++
Herramientas->Seleccionar conjunto de herramientas->Componentes COM->Navegador web de Microsoft (marcar)->Aceptar
Elimine otros componentes del cuadro de diálogo, haga clic con el botón derecho para insertar un control ActiveX y seleccione Microsoft Web Browser
Haga clic derecho en esta pieza negra -> agregar variable
A continuación cambie el código de CEXPLORER1.h
Solo guarda estas dos funciones.
void Navigate(URL de LPCTSTR, VARIANT * Flags, VARIANT * TargetFrameName, VARIANT * PostData, VARIANT * Headers)
{ static BYTE parms[] = VTS_BSTR VTS_UNKNOWN VTS_UNKNOWN VTS_UNKNOWN VTS_UNKNOWN; InvokeHelper(0x68, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, URL, Flags, TargetFrameName, PostData, Headers); }
void Navigate2(VARIANT * URL, VARIANT * Flags, VARIANT * TargetFrameName, VARIANT * PostData, VARIANT * Headers)
{ static BYTE parms[] = VTS_UNKNOWN VTS_UNKNOWN VTS_UNKNOWN VTS_UNKNOWN VTS_UNKNOWN; InvokeHelper(0x1F4, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, URL, Flags, TargetFrameName, PostData, Headers); }
Código para CEXPLORER1.h
#pragma once
// 计算机生成了通过 Microsoft Visual C++ 创建的 IDispatch 包装类
// 注意: 请勿修改此文件的内容。如果此类
// 通过 Microsoft Visual C++ 重新生成,则你的修改将被覆盖。
/
#include "afxwin.h"
class CEXPLORER1 : public CWnd
{
protected:
DECLARE_DYNCREATE(CEXPLORER1)
public:
CLSID const& GetClsid()
{
static CLSID const clsid
= {0x8856f961,0x340a,0x11d0,{0xa9,0x6b,0x00,0xc0,0x4f,0xd7,0x05,0xa2}};
return clsid;
}
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect, CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = nullptr)
{
return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID);
}
BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,
UINT nID, CFile* pPersist = nullptr, BOOL bStorage = FALSE,
BSTR bstrLicKey = nullptr)
{
return CreateControl(GetClsid(), lpszWindowName, dwStyle, rect, pParentWnd, nID,
pPersist, bStorage, bstrLicKey);
}
// 特性
public:
enum
{
CSC_UPDATECOMMANDS = -1,
CSC_NAVIGATEFORWARD = 1,
CSC_NAVIGATEBACK = 2
}CommandStateChangeConstants;
enum
{
OLECMDID_OPEN = 1,
OLECMDID_NEW = 2,
OLECMDID_SAVE = 3,
OLECMDID_SAVEAS = 4,
OLECMDID_SAVECOPYAS = 5,
OLECMDID_PRINT = 6,
OLECMDID_PRINTPREVIEW = 7,
OLECMDID_PAGESETUP = 8,
OLECMDID_SPELL = 9,
OLECMDID_PROPERTIES = 10,
OLECMDID_CUT = 11,
OLECMDID_COPY = 12,
OLECMDID_PASTE = 13,
OLECMDID_PASTESPECIAL = 14,
OLECMDID_UNDO = 15,
OLECMDID_REDO = 16,
OLECMDID_SELECTALL = 17,
OLECMDID_CLEARSELECTION = 18,
OLECMDID_ZOOM = 19,
OLECMDID_GETZOOMRANGE = 20,
OLECMDID_UPDATECOMMANDS = 21,
OLECMDID_REFRESH = 22,
OLECMDID_STOP = 23,
OLECMDID_HIDETOOLBARS = 24,
OLECMDID_SETPROGRESSMAX = 25,
OLECMDID_SETPROGRESSPOS = 26,
OLECMDID_SETPROGRESSTEXT = 27,
OLECMDID_SETTITLE = 28,
OLECMDID_SETDOWNLOADSTATE = 29,
OLECMDID_STOPDOWNLOAD = 30,
OLECMDID_ONTOOLBARACTIVATED = 31,
OLECMDID_FIND = 32,
OLECMDID_DELETE = 33,
OLECMDID_HTTPEQUIV = 34,
OLECMDID_HTTPEQUIV_DONE = 35,
OLECMDID_ENABLE_INTERACTION = 36,
OLECMDID_ONUNLOAD = 37,
OLECMDID_PROPERTYBAG2 = 38,
OLECMDID_PREREFRESH = 39,
OLECMDID_SHOWSCRIPTERROR = 40,
OLECMDID_SHOWMESSAGE = 41,
OLECMDID_SHOWFIND = 42,
OLECMDID_SHOWPAGESETUP = 43,
OLECMDID_SHOWPRINT = 44,
OLECMDID_CLOSE = 45,
OLECMDID_ALLOWUILESSSAVEAS = 46,
OLECMDID_DONTDOWNLOADCSS = 47,
OLECMDID_UPDATEPAGESTATUS = 48,
OLECMDID_PRINT2 = 49,
OLECMDID_PRINTPREVIEW2 = 50,
OLECMDID_SETPRINTTEMPLATE = 51,
OLECMDID_GETPRINTTEMPLATE = 52,
OLECMDID_PAGEACTIONBLOCKED = 55,
OLECMDID_PAGEACTIONUIQUERY = 56,
OLECMDID_FOCUSVIEWCONTROLS = 57,
OLECMDID_FOCUSVIEWCONTROLSQUERY = 58,
OLECMDID_SHOWPAGEACTIONMENU = 59,
OLECMDID_ADDTRAVELENTRY = 60,
OLECMDID_UPDATETRAVELENTRY = 61,
OLECMDID_UPDATEBACKFORWARDSTATE = 62,
OLECMDID_OPTICAL_ZOOM = 63,
OLECMDID_OPTICAL_GETZOOMRANGE = 64,
OLECMDID_WINDOWSTATECHANGED = 65,
OLECMDID_ACTIVEXINSTALLSCOPE = 66,
OLECMDID_UPDATETRAVELENTRY_DATARECOVERY = 67,
OLECMDID_SHOWTASKDLG = 68,
OLECMDID_POPSTATEEVENT = 69,
OLECMDID_VIEWPORT_MODE = 70,
OLECMDID_LAYOUT_VIEWPORT_WIDTH = 71,
OLECMDID_VISUAL_VIEWPORT_EXCLUDE_BOTTOM = 72,
OLECMDID_USER_OPTICAL_ZOOM = 73,
OLECMDID_PAGEAVAILABLE = 74,
OLECMDID_GETUSERSCALABLE = 75,
OLECMDID_UPDATE_CARET = 76,
OLECMDID_ENABLE_VISIBILITY = 77,
OLECMDID_MEDIA_PLAYBACK = 78,
OLECMDID_SETFAVICON = 79,
OLECMDID_SET_HOST_FULLSCREENMODE = 80,
OLECMDID_EXITFULLSCREEN = 81,
OLECMDID_SCROLLCOMPLETE = 82,
OLECMDID_ONBEFOREUNLOAD = 83,
OLECMDID_SHOWMESSAGE_BLOCKABLE = 84,
OLECMDID_SHOWTASKDLG_BLOCKABLE = 85
}OLECMDID;
enum
{
OLECMDF_SUPPORTED = 1,
OLECMDF_ENABLED = 2,
OLECMDF_LATCHED = 4,
OLECMDF_NINCHED = 8,
OLECMDF_INVISIBLE = 16,
OLECMDF_DEFHIDEONCTXTMENU = 32
}OLECMDF;
enum
{
OLECMDEXECOPT_DODEFAULT = 0,
OLECMDEXECOPT_PROMPTUSER = 1,
OLECMDEXECOPT_DONTPROMPTUSER = 2,
OLECMDEXECOPT_SHOWHELP = 3
}OLECMDEXECOPT;
enum
{
READYSTATE_UNINITIALIZED = 0,
READYSTATE_LOADING = 1,
READYSTATE_LOADED = 2,
READYSTATE_INTERACTIVE = 3,
READYSTATE_COMPLETE = 4
}tagREADYSTATE;
enum
{
secureLockIconUnsecure = 0,
secureLockIconMixed = 1,
secureLockIconSecureUnknownBits = 2,
secureLockIconSecure40Bit = 3,
secureLockIconSecure56Bit = 4,
secureLockIconSecureFortezza = 5,
secureLockIconSecure128Bit = 6
}SecureLockIconConstants;
enum
{
ProtectedModeRedirect = 1
}NewProcessCauseConstants;
enum
{
SWC_EXPLORER = 0,
SWC_BROWSER = 1,
SWC_3RDPARTY = 2,
SWC_CALLBACK = 4,
SWC_DESKTOP = 8
}ShellWindowTypeConstants;
enum
{
SWFO_NEEDDISPATCH = 1,
SWFO_INCLUDEPENDING = 2,
SWFO_COOKIEPASSED = 4
}ShellWindowFindWindowOptions;
// 操作
public:
// IWebBrowser
// 函数
//
void Navigate(LPCTSTR URL, VARIANT * Flags, VARIANT * TargetFrameName, VARIANT * PostData, VARIANT * Headers)
{
static BYTE parms[] = VTS_BSTR VTS_UNKNOWN VTS_UNKNOWN VTS_UNKNOWN VTS_UNKNOWN;
InvokeHelper(0x68, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, URL, Flags, TargetFrameName, PostData, Headers);
}
// 属性
//
// DWebBrowserEvents
// 函数
//
// 属性
//
// IWebBrowser2
// 函数
//
void Navigate2(VARIANT * URL, VARIANT * Flags, VARIANT * TargetFrameName, VARIANT * PostData, VARIANT * Headers)
{
static BYTE parms[] = VTS_UNKNOWN VTS_UNKNOWN VTS_UNKNOWN VTS_UNKNOWN VTS_UNKNOWN;
InvokeHelper(0x1F4, DISPATCH_METHOD, VT_EMPTY, nullptr, parms, URL, Flags, TargetFrameName, PostData, Headers);
}
// 属性
//
// DWebBrowserEvents2
// 函数
//
// 属性
//
};
En el archivo principal Dlg.cpp, agregue la variable de código que nombró anteriormente.
m_web.Navigate(L"www.baidu.com", NULO, NULO, NULO, NULO);
Cambie la propiedad Silenciosa del control web a Verdadero para evitar las solicitudes de script
Haga clic en Dlg main class cpp en la vista de clase y haga clic en el mensaje Onsize para agregar, y puede arrastrar la ventana para explorar y expandir la página.
void CMFCXiYouDlg::OnSize(UINT nType, int cx, int cy)
{ CDialogEx::OnSize(nType, cx, cy);// TODO: Agregue el código del controlador de mensajes aquí
if(nType==SIZE_MINIMIZED)
{ return; } CWnd *pWnd; pWnd = GetDlgItem(IDC_EXPLORER1); if (pWnd) { CRect rect, rect_1; GetClientRect(&rect_1); pWnd ->GetWindowRect (&rect); ScreenToClient(&rect); rect.right = cx; rect.bottom = rect.bottom + (rect_1.bottom - m_rect.bottom); pWnd->MoveWindow(rect); RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
}
GetClientRect(&m_rect);
}
Recuerde agregar la variable CRect m_rect al público en el archivo de encabezado Dlg.h;