{"id":75550,"date":"2024-09-03T07:28:39","date_gmt":"2024-09-03T03:58:39","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/gpt-2ee2\/"},"modified":"2024-09-03T07:28:39","modified_gmt":"2024-09-03T03:58:39","slug":"gpt-2ee2","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/gpt-2ee2\/","title":{"rendered":"gpt"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang<br \/>\n\u5b8c\u6574\u4ee3\u7801<br \/>\nChatGPT \u8bf4\uff1a<br \/>\nChatGPT<br \/>\n\u597d\u7684\uff0c\u6211\u5c06\u63d0\u4f9b\u4e00\u4e2a\u5b8c\u6574\u7684 MFC \u793a\u4f8b\u4ee3\u7801\uff0c\u6f14\u793a\u5982\u4f55\u5c06\u4e00\u4e2a Web \u6d4f\u89c8\u5668\u63a7\u4ef6\u5d4c\u5165\u5230 CRichEditCtrl \u4e2d\u3002\u4e3a\u4e86\u7b80\u5316\uff0c\u793a\u4f8b\u5c06\u5305\u62ec\u521b\u5efa\u81ea\u5b9a\u4e49\u63a7\u4ef6\u7ad9\u70b9\u3001\u521b\u5efa\u548c\u7ba1\u7406\u63a7\u4ef6\uff0c\u4ee5\u53ca\u5728\u5bf9\u8bdd\u6846\u4e2d\u663e\u793a\u8fd9\u4e9b\u63a7\u4ef6\u7684\u6b65\u9aa4\u3002<\/p>\n<p>1. \u521b\u5efa MFC \u5e94\u7528\u7a0b\u5e8f<br \/>\n\u9996\u5148\uff0c\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 MFC \u5e94\u7528\u7a0b\u5e8f\u9879\u76ee\u3002\u5982\u679c\u4f60\u4f7f\u7528 Visual Studio\uff0c\u53ef\u4ee5\u9009\u62e9 MFC \u5e94\u7528\u7a0b\u5e8f \u6a21\u677f\u3002<\/p>\n<p>2. \u6dfb\u52a0\u5fc5\u8981\u7684\u5e93\u548c\u5934\u6587\u4ef6<br \/>\n\u786e\u4fdd\u5728\u9879\u76ee\u8bbe\u7f6e\u4e2d\u94fe\u63a5\u4e86\u4ee5\u4e0b\u5e93\uff1a<\/p>\n<p>ole32.lib<br \/>\noleaut32.lib<br \/>\nuuid.lib<br \/>\n\u5728\u6e90\u6587\u4ef6\u4e2d\u5305\u542b\u4ee5\u4e0b\u5934\u6587\u4ef6\uff1a<\/p>\n<p>cpp<br \/>\n\u590d\u5236\u4ee3\u7801<br \/>\n#include &lt;afxwin.h&gt;<br \/>\n#include &lt;afxrich.h&gt;<br \/>\n#include &lt;atlbase.h&gt;<br \/>\n#include &lt;exdisp.h&gt;<br \/>\n#include &lt;mshtml.h&gt;<br \/>\n3. \u521b\u5efa\u81ea\u5b9a\u4e49\u63a7\u4ef6\u7ad9\u70b9\u7c7b<br \/>\n\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5934\u6587\u4ef6 MyOleControlSite.h\uff0c\u5e76\u5b9e\u73b0 CMyOleControlSite \u7c7b\uff1a<\/p>\n<p>cpp<br \/>\n\u590d\u5236\u4ee3\u7801<br \/>\n\/\/ MyOleControlSite.h<br \/>\n#pragma once<\/p>\n<p>#include &lt;afxole.h&gt;<\/p>\n<p>class CMyOleControlSite : public COleControlSite<br \/>\n{<br \/>\npublic:<br \/>\n    CMyOleControlSite(COleControlContainer* pCtrlCont) : COleControlSite(pCtrlCont) {}<\/p>\n<p>protected:<br \/>\n    LPUNKNOWN GetInterfaceHook(const void *iid) override;<br \/>\n    STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject) override;<br \/>\n    STDMETHOD_(ULONG, AddRef)() override;<br \/>\n    STDMETHOD_(ULONG, Release)() override;<br \/>\n};<\/p>\n<p>LPUNKNOWN CMyOleControlSite::GetInterfaceHook(const void *iid)<br \/>\n{<br \/>\n    if (IsEqualIID((REFIID) (*(IID*)iid), IID_IDocHostUIHandler))<br \/>\n        return (IDocHostUIHandler *) this;<br \/>\n    return NULL;<br \/>\n}<\/p>\n<p>STDMETHODIMP CMyOleControlSite::QueryInterface(REFIID riid, void **ppvObject)<br \/>\n{<br \/>\n    return COleControlSite::ExternalQueryInterface(&amp;riid, ppvObject);<br \/>\n}<\/p>\n<p>STDMETHODIMP_(ULONG) CMyOleControlSite::AddRef()<br \/>\n{<br \/>\n    return ExternalAddRef();<br \/>\n}<\/p>\n<p>STDMETHODIMP_(ULONG) CMyOleControlSite::Release()<br \/>\n{<br \/>\n    return ExternalRelease();<br \/>\n}<br \/>\n4. \u521b\u5efa\u81ea\u5b9a\u4e49 CRichEditCtrl \u5b50\u7c7b<br \/>\n\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5934\u6587\u4ef6 MyRichEditCtrl.h\uff0c\u5e76\u5b9e\u73b0 CMyRichEditCtrl \u7c7b\uff1a<\/p>\n<p>cpp<br \/>\n\u590d\u5236\u4ee3\u7801<br \/>\n\/\/ MyRichEditCtrl.h<br \/>\n#pragma once<\/p>\n<p>#include &lt;afxrich.h&gt;<br \/>\n#include &#8220;MyOleControlSite.h&#8221;<\/p>\n<p>class CMyRichEditCtrl : public CRichEditCtrl<br \/>\n{<br \/>\npublic:<br \/>\n    CWnd m_wndCtrl;<\/p>\n<p>    BOOL CreateControlSite(COleControlContainer* pContainer, COleControlSite** ppSite, UINT \/* nID *\/, REFCLSID \/* clsid *\/);<br \/>\n};<br \/>\n\u5b9e\u73b0 CMyRichEditCtrl \u7684\u6e90\u6587\u4ef6 MyRichEditCtrl.cpp\uff1a<\/p>\n<p>cpp<br \/>\n\u590d\u5236\u4ee3\u7801<br \/>\n\/\/ MyRichEditCtrl.cpp<br \/>\n#include &#8220;stdafx.h&#8221;<br \/>\n#include &#8220;MyRichEditCtrl.h&#8221;<\/p>\n<p>BOOL CMyRichEditCtrl::CreateControlSite(COleControlContainer* pContainer, COleControlSite** ppSite, UINT \/* nID *\/, REFCLSID \/* clsid *\/)<br \/>\n{<br \/>\n    if (ppSite == NULL)<br \/>\n    {<br \/>\n        ASSERT(FALSE);<br \/>\n        return FALSE;<br \/>\n    }<\/p>\n<p>    CMyOleControlSite* pOleSite = new CMyOleControlSite(pContainer);<br \/>\n    *ppSite = pOleSite;<br \/>\n    (*ppSite)-&gt;m_pCtrlCont = pContainer;<br \/>\n    return TRUE;<br \/>\n}<br \/>\n5. \u4f7f\u7528\u63a7\u4ef6<br \/>\n\u5728\u4f60\u7684\u5bf9\u8bdd\u6846\u7c7b\uff08\u4f8b\u5982 CTestCtrlInRichEditDlg\uff09\u4e2d\uff0c\u4f7f\u7528 CMyRichEditCtrl \u6765\u521b\u5efa\u548c\u7ba1\u7406 Web \u6d4f\u89c8\u5668\u63a7\u4ef6\u3002\u4fee\u6539\u5bf9\u8bdd\u6846\u7c7b\u5934\u6587\u4ef6 TestCtrlInRichEditDlg.h \u548c\u5b9e\u73b0\u6587\u4ef6 TestCtrlInRichEditDlg.cpp \u5982\u4e0b\uff1a<\/p>\n<p>TestCtrlInRichEditDlg.h<\/p>\n<p>cpp<br \/>\n\u590d\u5236\u4ee3\u7801<br \/>\n\/\/ TestCtrlInRichEditDlg.h<br \/>\n#pragma once<\/p>\n<p>#include &#8220;MyRichEditCtrl.h&#8221;<\/p>\n<p>class CTestCtrlInRichEditDlg : public CDialogEx<br \/>\n{<br \/>\npublic:<br \/>\n    CTestCtrlInRichEditDlg(CWnd* pParent = nullptr);<\/p>\n<p>#ifdef AFX_DESIGN_TIME<br \/>\n    enum { IDD = IDD_TESTCTRLINRICHEDIT_DIALOG };<br \/>\n#endif<\/p>\n<p>protected:<br \/>\n    virtual void DoDataExchange(CDataExchange* pDX);<br \/>\n    virtual BOOL OnInitDialog();<br \/>\n    DECLARE_MESSAGE_MAP()<\/p>\n<p>private:<br \/>\n    CMyRichEditCtrl m_wndRichCtrl;<br \/>\n};<br \/>\nTestCtrlInRichEditDlg.cpp<\/p>\n<p>cpp<br \/>\n\u590d\u5236\u4ee3\u7801<br \/>\n\/\/ TestCtrlInRichEditDlg.cpp<br \/>\n#include &#8220;stdafx.h&#8221;<br \/>\n#include &#8220;TestCtrlInRichEditDlg.h&#8221;<br \/>\n#include &#8220;afxdialogex.h&#8221;<\/p>\n<p>#ifdef _DEBUG<br \/>\n#define new DEBUG_NEW<br \/>\n#endif<\/p>\n<p>CTestCtrlInRichEditDlg::CTestCtrlInRichEditDlg(CWnd* pParent \/*=nullptr*\/)<br \/>\n    : CDialogEx(IDD_TESTCTRLINRICHEDIT_DIALOG, pParent)<br \/>\n{<br \/>\n}<\/p>\n<p>void CTestCtrlInRichEditDlg::DoDataExchange(CDataExchange* pDX)<br \/>\n{<br \/>\n    CDialogEx::DoDataExchange(pDX);<br \/>\n}<\/p>\n<p>BEGIN_MESSAGE_MAP(CTestCtrlInRichEditDlg, CDialogEx)<br \/>\nEND_MESSAGE_MAP()<\/p>\n<p>BOOL CTestCtrlInRichEditDlg::OnInitDialog()<br \/>\n{<br \/>\n    CDialogEx::OnInitDialog();<\/p>\n<p>    \/\/ \u521d\u59cb\u5316 RichEdit \u63a7\u4ef6<br \/>\n    m_wndRichCtrl.Create(WS_CHILD | WS_VISIBLE | ES_MULTILINE, CRect(10, 10, 600, 400), this, 1);<br \/>\n    m_wndRichCtrl.InitControlContainer();<\/p>\n<p>    \/\/ \u521b\u5efa\u63a7\u4ef6\u7ad9\u70b9<br \/>\n    COleControlSite* pControlSite = NULL;<br \/>\n    m_wndRichCtrl.CreateControlSite(m_wndRichCtrl.GetControlContainer(), &amp;pControlSite, 102, CLSID_WebBrowser);<\/p>\n<p>    \/\/ \u521b\u5efa Web \u6d4f\u89c8\u5668\u63a7\u4ef6<br \/>\n    POINT pt = { 20, 20 };<br \/>\n    SIZE sz = { 300, 300 };<br \/>\n    pControlSite-&gt;CreateControl(&amp;m_wndRichCtrl.m_wndCtrl, CLSID_WebBrowser,<br \/>\n        _T(&#8220;Web Browser&#8221;), WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_GROUP, &amp;pt, &amp;sz, 102);<\/p>\n<p>    \/\/ \u4f7f\u7528 Web \u6d4f\u89c8\u5668\u63a7\u4ef6<br \/>\n    IWebBrowser2* pIWebBrowser = NULL;<br \/>\n    pControlSite-&gt;m_pInPlaceObject-&gt;QueryInterface(IID_IWebBrowser2, (void**)&amp;pIWebBrowser);<br \/>\n    if (pIWebBrowser)<br \/>\n    {<br \/>\n        pIWebBrowser-&gt;Navigate2(&amp;CComVariant(&#8220;https:\/\/www.example.com&#8221;), NULL, NULL, NULL, NULL);<br \/>\n        pIWebBrowser-&gt;Release();<br \/>\n    }<\/p>\n<p>    \/\/ \u91ca\u653e\u8d44\u6e90<br \/>\n    IOleControl* pIOleCtrl = NULL;<br \/>\n    pControlSite-&gt;m_pInPlaceObject-&gt;QueryInterface(IID_IOleControl, (void**)&amp;pIOleCtrl);<br \/>\n    if (pIOleCtrl)<br \/>\n    {<br \/>\n        pIOleCtrl-&gt;Release();<br \/>\n    }<\/p>\n<p>    return TRUE;<br \/>\n}<br \/>\n6. \u521d\u59cb\u5316 COM \u5e93<br \/>\n\u786e\u4fdd\u5728 InitInstance \u65b9\u6cd5\u4e2d\u521d\u59cb\u5316 COM \u5e93\uff1a<\/p>\n<p>cpp<br \/>\n\u590d\u5236\u4ee3\u7801<br \/>\n\/\/ YourApp.cpp<br \/>\n#include &#8220;stdafx.h&#8221;<br \/>\n#include &#8220;YourApp.h&#8221;<\/p>\n<p>BEGIN_MESSAGE_MAP(CYourApp, CWinApp)<br \/>\nEND_MESSAGE_MAP()<\/p>\n<p>CYourApp::CYourApp()<br \/>\n{<br \/>\n    \/\/ TODO: add construction code here,<br \/>\n}<\/p>\n<p>CYourApp theApp;<\/p>\n<p>BOOL CYourApp::InitInstance()<br \/>\n{<br \/>\n    CWinApp::InitInstance();<\/p>\n<p>    AfxOleInit();  \/\/ \u521d\u59cb\u5316 OLE \u5e93<\/p>\n<p>    CTestCtrlInRichEditDlg dlg;<br \/>\n    m_pMainWnd = &amp;dlg;<br \/>\n    dlg.DoModal();<\/p>\n<p>    return FALSE;<br \/>\n}<br \/>\n7. \u7f16\u8bd1\u548c\u8fd0\u884c<br \/>\n\u786e\u4fdd\u4f60\u7684\u9879\u76ee\u6b63\u786e\u914d\u7f6e\uff0c\u5305\u542b\u6240\u6709\u5fc5\u8981\u7684\u5e93\u548c\u5934\u6587\u4ef6\u3002\u7136\u540e\u7f16\u8bd1\u5e76\u8fd0\u884c\u4f60\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u5bf9\u8bdd\u6846\u4e2d\u5e94\u8be5\u4f1a\u663e\u793a\u4e00\u4e2a\u5305\u542b Web \u6d4f\u89c8\u5668\u63a7\u4ef6\u7684 CRichEditCtrl\u3002<\/p>\n<p>\u603b\u7ed3<br \/>\n\u8fd9\u4e2a\u5b8c\u6574\u7684\u793a\u4f8b\u5c55\u793a\u4e86\u5982\u4f55\u5728 MFC \u5e94\u7528\u7a0b\u5e8f\u4e2d\u5c06 COM \u63a7\u4ef6\uff08\u5982 Web \u6d4f\u89c8\u5668\u63a7\u4ef6\uff09\u5d4c\u5165\u5230 CRichEditCtrl \u4e2d\u3002\u8fd9\u4e2a\u793a\u4f8b\u6db5\u76d6\u4e86\u81ea\u5b9a\u4e49\u63a7\u4ef6\u7ad9\u70b9\u7c7b\u3001\u521b\u5efa\u548c\u7ba1\u7406\u63a7\u4ef6\u7684\u6b65\u9aa4\u3002\u4f60\u53ef\u4ee5\u6839\u636e\u5b9e\u9645\u9700\u6c42\u8fdb\u4e00\u6b65\u6269\u5c55\u548c\u4fee\u6539\u8fd9\u4e2a\u793a\u4f8b\u3002\u5982\u679c\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u968f\u65f6\u95ee\u6211\uff01<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\u5b8c\u6574\u4ee3\u7801\nChatGPT \u8bf4\uff1a\nChatGPT\n\u597d\u7684\uff0c\u6211\u5c06\u63d0\u4f9b\u4e00\u4e2a\u5b8c\u6574\u7684 MFC \u793a\u4f8b\u4ee3\u7801\uff0c\u6f14\u793a\u5982\u4f55\u5c06\u4e00\u4e2a Web \u6d4f\u89c8\u5668\u63a7\u4ef6\u5d4c\u5165\u5230 CRichEditCtrl \u4e2d\u3002\u4e3a\u4e86\u7b80\u5316\uff0c\u793a\u4f8b\u5c06\u5305\u62ec\u521b\u5efa\u81ea\u5b9a\u4e49\u63a7\u4ef6\u7ad9\u70b9\u3001\u521b\u5efa\u548c\u7ba1\u7406\u63a7\u4ef6\uff0c\u4ee5\u53ca\u5728\u5bf9\u8bdd\u6846\u4e2d\u663e\u793a\u8fd9\u4e9b\u63a7\u4ef6\u7684\u6b65\u9aa4\u3002\n\n1. \u521b\u5efa MFC \u5e94\u7528\u7a0b\u5e8f\n\u9996\u5148\uff0c\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 MFC \u5e94\u7528\u7a0b\u5e8f\u9879\u76ee\u3002\u5982\u679c\u4f60\u4f7f\u7528 Visual Studio\uff0c\u53ef\u4ee5\u9009\u62e9 MFC \u5e94\u7528\u7a0b\u5e8f \u6a21\u677f\u3002\n\n2. \u6dfb\u52a0\u5fc5\u8981\u7684\u5e93\u548c\u5934\u6587\u4ef6\n\u786e\u4fdd\u5728\u9879\u76ee\u8bbe\u7f6e\u4e2d\u94fe\u63a5\u4e86\u4ee5\u4e0b\u5e93\uff1a\n\nole32.lib\noleaut32.lib\nuuid.lib\n\u5728\u6e90\u6587\u4ef6\u4e2d\u5305\u542b\u4ee5\u4e0b\u5934\u6587\u4ef6\uff1a\n\ncpp\n\u590d\u5236\u4ee3\u7801\n#include &lt;afxwin.h&gt;\n#include &lt;afxrich.h&gt;\n#include &lt;atlbase.h&gt;\n#include &lt;exdisp.h&gt;\n#include &lt;mshtml.h&gt;\n3. \u521b\u5efa\u81ea\u5b9a\u4e49\u63a7\u4ef6\u7ad9\u70b9\u7c7b\n\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5934\u6587\u4ef6 MyOleControlSite.h\uff0c\u5e76\u5b9e\u73b0 CMyOleControlSite \u7c7b\uff1a\n\ncpp\n\u590d\u5236\u4ee3\u7801\n\/\/ MyOleControlSite.h\n#pragma once\n\n#include &lt;afxole.h&gt;\n\nclass CMyOleControlSite : public COleControlSite\n{\npublic:\n    CMyOleControlSite(COleControlContainer* pCtrlCont) : COleControlSite(pCtrlCont) {}\n\nprotected:\n    LPUNKNOWN GetInterfaceHook(const void *iid) override;\n    STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject) override;\n    STDMETHOD_(ULONG, AddRef)() override;\n    STDMETHOD_(ULONG, Release)() override;\n};\n\nLPUNKNOWN CMyOleControlSite::GetInterfaceHook(const void *iid)\n{\n    if (IsEqualIID((REFIID) (*(IID*)iid), IID_IDocHostUIHandler))\n        return (IDocHostUIHandler *) this;\n    return NULL;\n}\n\nSTDMETHODIMP CMyOleControlSite::QueryInterface(REFIID riid, void **ppvObject)\n{\n    return COleControlSite::ExternalQueryInterface(&amp;riid, ppvObject);\n}\n\nSTDMETHODIMP_(ULONG) CMyOleControlSite::AddRef()\n{\n    return ExternalAddRef();\n}\n\nSTDMETHODIMP_(ULONG) CMyOleControlSite::Release()\n{\n    return ExternalRelease();\n}\n4. \u521b\u5efa\u81ea\u5b9a\u4e49 CRichEditCtrl \u5b50\u7c7b\n\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5934\u6587\u4ef6 MyRichEditCtrl.h\uff0c\u5e76\u5b9e\u73b0 CMyRichEditCtrl \u7c7b\uff1a\n\ncpp\n\u590d\u5236\u4ee3\u7801\n\/\/ MyRichEditCtrl.h\n#pragma once\n\n#include &lt;afxrich.h&gt;\n#include \"MyOleControlSite.h\"\n\nclass CMyRichEditCtrl : public CRichEditCtrl\n{\npublic:\n    CWnd m_wndCtrl;\n\n    BOOL CreateControlSite(COleControlContainer* pContainer, COleControlSite** ppSite, UINT \/* nID *\/, REFCLSID \/* clsid *\/);\n};\n\u5b9e\u73b0 CMyRichEditCtrl \u7684\u6e90\u6587\u4ef6 MyRichEditCtrl.cpp\uff1a\n\ncpp\n\u590d\u5236\u4ee3\u7801\n\/\/ MyRichEditCtrl.cpp\n#include \"stdafx.h\"\n#include \"MyRichEditCtrl.h\"\n\nBOOL CMyRichEditCtrl::CreateControlSite(COleControlContainer* pContainer, COleControlSite** ppSite, UINT \/* nID *\/, REFCLSID \/* clsid *\/)\n{\n    if (ppSite == NULL)\n    {\n        ASSERT(FALSE);\n        return FALSE;\n    }\n\n    CMyOleControlSite* pOleSite = new CMyOleControlSite(pContainer);\n    *ppSite = pOleSite;\n    (*ppSite)-&gt;m_pCtrlCont = pContainer;\n    return TRUE;\n}\n5. \u4f7f\u7528\u63a7\u4ef6\n\u5728\u4f60\u7684\u5bf9\u8bdd\u6846\u7c7b\uff08\u4f8b\u5982 CTestCtrlInRichEditDlg\uff09\u4e2d\uff0c\u4f7f\u7528 CMyRichEditCtrl \u6765\u521b\u5efa\u548c\u7ba1\u7406 Web \u6d4f\u89c8\u5668\u63a7\u4ef6\u3002\u4fee\u6539\u5bf9\u8bdd\u6846\u7c7b\u5934\u6587\u4ef6 TestCtrlInRichEditDlg.h \u548c\u5b9e\u73b0\u6587\u4ef6 TestCtrlInRichEditDlg.cpp \u5982\u4e0b\uff1a\n\nTestCtrlInRichEditDlg.h\n\ncpp\n\u590d\u5236\u4ee3\u7801\n\/\/ TestCtrlInRichEditDlg.h\n#pragma once\n\n#include \"MyRichEditCtrl.h\"\n\nclass CTestCtrlInRichEditDlg : public CDialogEx\n{\npublic:\n    CTestCtrlInRichEditDlg(CWnd* pParent = nullptr);\n\n#ifdef AFX_DESIGN_TIME\n    enum { IDD = IDD_TESTCTRLINRICHEDIT_DIALOG };\n#endif\n\nprotected:\n    virtual void DoDataExchange(CDataExchange* pDX);\n    virtual BOOL OnInitDialog();\n    DECLARE_MESSAGE_MAP()\n\nprivate:\n    CMyRichEditCtrl m_wndRichCtrl;\n};\nTestCtrlInRichEditDlg.cpp\n\ncpp\n\u590d\u5236\u4ee3\u7801\n\/\/ TestCtrlInRichEditDlg.cpp\n#include \"stdafx.h\"\n#include \"TestCtrlInRichEditDlg.h\"\n#include \"afxdialogex.h\"\n\n#ifdef _DEBUG\n#define new DEBUG_NEW\n#endif\n\nCTestCtrlInRichEditDlg::CTestCtrlInRichEditDlg(CWnd* pParent \/*=nullptr*\/)\n    : CDialogEx(IDD_TESTCTRLINRICHEDIT_DIALOG, pParent)\n{\n}\n\nvoid CTestCtrlInRichEditDlg::DoDataExchange(CDataExchange* pDX)\n{\n    CDialogEx::DoDataExchange(pDX);\n}\n\nBEGIN_MESSAGE_MAP(CTestCtrlInRichEditDlg, CDialogEx)\nEND_MESSAGE_MAP()\n\nBOOL CTestCtrlInRichEditDlg::OnInitDialog()\n{\n    CDialogEx::OnInitDialog();\n\n    \/\/ \u521d\u59cb\u5316 RichEdit \u63a7\u4ef6\n    m_wndRichCtrl.Create(WS_CHILD | WS_VISIBLE | ES_MULTILINE, CRect(10, 10, 600, 400), this, 1);\n    m_wndRichCtrl.InitControlContainer();\n\n    \/\/ \u521b\u5efa\u63a7\u4ef6\u7ad9\u70b9\n    COleControlSite* pControlSite = NULL;\n    m_wndRichCtrl.CreateControlSite(m_wndRichCtrl.GetControlContainer(), &amp;pControlSite, 102, CLSID_WebBrowser);\n\n    \/\/ \u521b\u5efa Web \u6d4f\u89c8\u5668\u63a7\u4ef6\n    POINT pt = { 20, 20 };\n    SIZE sz = { 300, 300 };\n    pControlSite-&gt;CreateControl(&amp;m_wndRichCtrl.m_wndCtrl, CLSID_WebBrowser,\n        _T(\"Web Browser\"), WS_VISIBLE | WS_CHILD | WS_TABSTOP | WS_GROUP, &amp;pt, &amp;sz, 102);\n\n    \/\/ \u4f7f\u7528 Web \u6d4f\u89c8\u5668\u63a7\u4ef6\n    IWebBrowser2* pIWebBrowser = NULL;\n    pControlSite-&gt;m_pInPlaceObject-&gt;QueryInterface(IID_IWebBrowser2, (void**)&amp;pIWebBrowser);\n    if (pIWebBrowser)\n    {\n        pIWebBrowser-&gt;Navigate2(&amp;CComVariant(\"https:\/\/www.example.com\"), NULL, NULL, NULL, NULL);\n        pIWebBrowser-&gt;Release();\n    }\n\n    \/\/ \u91ca\u653e\u8d44\u6e90\n    IOleControl* pIOleCtrl = NULL;\n    pControlSite-&gt;m_pInPlaceObject-&gt;QueryInterface(IID_IOleControl, (void**)&amp;pIOleCtrl);\n    if (pIOleCtrl)\n    {\n        pIOleCtrl-&gt;Release();\n    }\n\n    return TRUE;\n}\n6. \u521d\u59cb\u5316 COM \u5e93\n\u786e\u4fdd\u5728 InitInstance \u65b9\u6cd5\u4e2d\u521d\u59cb\u5316 COM \u5e93\uff1a\n\ncpp\n\u590d\u5236\u4ee3\u7801\n\/\/ YourApp.cpp\n#include \"stdafx.h\"\n#include \"YourApp.h\"\n\nBEGIN_MESSAGE_MAP(CYourApp, CWinApp)\nEND_MESSAGE_MAP()\n\nCYourApp::CYourApp()\n{\n    \/\/ TODO: add construction code here,\n}\n\nCYourApp theApp;\n\nBOOL CYourApp::InitInstance()\n{\n    CWinApp::InitInstance();\n\n    AfxOleInit();  \/\/ \u521d\u59cb\u5316 OLE \u5e93\n\n    CTestCtrlInRichEditDlg dlg;\n    m_pMainWnd = &amp;dlg;\n    dlg.DoModal();\n\n    return FALSE;\n}\n7. \u7f16\u8bd1\u548c\u8fd0\u884c\n\u786e\u4fdd\u4f60\u7684\u9879\u76ee\u6b63\u786e\u914d\u7f6e\uff0c\u5305\u542b\u6240\u6709\u5fc5\u8981\u7684\u5e93\u548c\u5934\u6587\u4ef6\u3002\u7136\u540e\u7f16\u8bd1\u5e76\u8fd0\u884c\u4f60\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u5bf9\u8bdd\u6846\u4e2d\u5e94\u8be5\u4f1a\u663e\u793a\u4e00\u4e2a\u5305\u542b Web \u6d4f\u89c8\u5668\u63a7\u4ef6\u7684 CRichEditCtrl\u3002\n\n\u603b\u7ed3\n\u8fd9\u4e2a\u5b8c\u6574\u7684\u793a\u4f8b\u5c55\u793a\u4e86\u5982\u4f55\u5728 MFC \u5e94\u7528\u7a0b\u5e8f\u4e2d\u5c06 COM \u63a7\u4ef6\uff08\u5982 Web \u6d4f\u89c8\u5668\u63a7\u4ef6\uff09\u5d4c\u5165\u5230 CRichEditCtrl \u4e2d\u3002\u8fd9\u4e2a\u793a\u4f8b\u6db5\u76d6\u4e86\u81ea\u5b9a\u4e49\u63a7\u4ef6\u7ad9\u70b9\u7c7b\u3001\u521b\u5efa\u548c\u7ba1\u7406\u63a7\u4ef6\u7684\u6b65\u9aa4\u3002\u4f60\u53ef\u4ee5\u6839\u636e\u5b9e\u9645\u9700\u6c42\u8fdb\u4e00\u6b65\u6269\u5c55\u548c\u4fee\u6539\u8fd9\u4e2a\u793a\u4f8b\u3002\u5982\u679c\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u8bf7\u968f\u65f6\u95ee\u6211\uff01\n<\/code><\/pre>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u5b8c\u6574\u4ee3\u7801 ChatGPT \u8bf4\uff1a ChatGPT \u597d\u7684\uff0c\u6211\u5c06\u63d0\u4f9b\u4e00\u4e2a\u5b8c\u6574\u7684 MFC \u793a\u4f8b\u4ee3\u7801\uff0c\u6f14\u793a\u5982\u4f55\u5c06\u4e00\u4e2a Web \u6d4f\u89c8\u5668\u63a7\u4ef6\u5d4c\u5165\u5230 CRichEditCtrl \u4e2d\u3002\u4e3a\u4e86\u7b80\u5316\uff0c\u793a\u4f8b\u5c06\u5305\u62ec\u521b\u5efa\u81ea\u5b9a\u4e49\u63a7\u4ef6\u7ad9\u70b9\u3001\u521b\u5efa\u548c\u7ba1\u7406\u63a7\u4ef6\uff0c\u4ee5\u53ca\u5728\u5bf9\u8bdd\u6846\u4e2d\u663e\u793a\u8fd9\u4e9b\u63a7\u4ef6\u7684\u6b65\u9aa4\u3002 1. \u521b\u5efa MFC \u5e94\u7528\u7a0b\u5e8f \u9996\u5148\uff0c\u521b\u5efa\u4e00\u4e2a\u65b0\u7684 MFC \u5e94\u7528\u7a0b\u5e8f\u9879\u76ee\u3002\u5982\u679c\u4f60\u4f7f\u7528 Visual Studio\uff0c\u53ef\u4ee5\u9009\u62e9 MFC \u5e94\u7528\u7a0b\u5e8f \u6a21\u677f\u3002 2. \u6dfb\u52a0\u5fc5\u8981\u7684\u5e93\u548c\u5934\u6587\u4ef6 \u786e\u4fdd\u5728\u9879\u76ee\u8bbe\u7f6e\u4e2d\u94fe\u63a5\u4e86\u4ee5\u4e0b\u5e93\uff1a ole32.lib oleaut32.lib uuid.lib \u5728\u6e90\u6587\u4ef6\u4e2d\u5305\u542b\u4ee5\u4e0b\u5934\u6587\u4ef6\uff1a cpp \u590d\u5236\u4ee3\u7801 #include &lt;afxwin.h&gt; #include &lt;afxrich.h&gt; #include &lt;atlbase.h&gt; #include &lt;exdisp.h&gt; #include &lt;mshtml.h&gt; 3. \u521b\u5efa\u81ea\u5b9a\u4e49\u63a7\u4ef6\u7ad9\u70b9\u7c7b \u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5934\u6587\u4ef6 MyOleControlSite.h\uff0c\u5e76\u5b9e\u73b0 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":75551,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-75550","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/75550","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=75550"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/75550\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/75551"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=75550"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=75550"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=75550"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}