⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fchildwin.cpp

📁 使用TCppWebBrowser控件实现的浏览器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#include "SNDKEY32.hpp"

#pragma hdrstop

#include "fChildwin.h"

#include "g_AppMaros.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "SHDocVw_OCX"
#pragma link "Psdk\\wininet.lib"
#pragma link "SNDKEY32.obj"
#pragma resource "*.dfm"

//---------------------------------------------------------------------------
__fastcall TfmChildwin::TfmChildwin(TComponent* Owner)
    : TForm(Owner)
{

    IsClosing = false;

    FProgressMax = 0;
    FProgress = -1;    // // =-1 表示进程条不可用

    this->WindowState = wsMaximized;
    // 向主窗口发送信息
    MSGMDICREATE(this);     // 要求建立Tab页
    MSGMDIACTIVE(this);     // 选择相应Tab页

}
//---------------------------------------------------------------------------

IHTMLWindow2 *TfmChildwin::GetHTMLWindow(void)
{
    try
    {
        if(CppWebBrowser->ReadyState == ::READYSTATE_UNINITIALIZED
            || CppWebBrowser->ReadyState == ::READYSTATE_LOADING	)
        {
            return NULL;
        }
        IDispatch * WebDocument = static_cast<IDispatch *>(CppWebBrowser->Document);
        IHTMLDocument2 *HTMLDocument = static_cast<IHTMLDocument2 *>(WebDocument);
        if(HTMLDocument)
        {
            IHTMLWindow2 * HTMLWindow;
            HTMLDocument->get_parentWindow(&HTMLWindow);
            return HTMLWindow;
        }
    }catch(...)
    {
    }
    return NULL;
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::FormActivate(TObject *Sender)
{
    // 设置控件的焦点
    IHTMLWindow2 * HTMLWindow = GetHTMLWindow();
    if(HTMLWindow)
    {
        HTMLWindow->focus();
    }
    MSGMDIACTIVE(this);
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::FormClose(TObject *Sender,
      TCloseAction &Action)
{
    if(CppWebBrowser->Busy)
    {
        CppWebBrowser->Stop();
    }
    //
    IsClosing = true;
    Action = caFree;
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::FormDestroy(TObject *Sender)
{
    // 向主窗口发送信息,删除相应Tab页
    MSGMDIDELETE(this);
}
//---------------------------------------------------------------------------
void __fastcall TfmChildwin::CppWebBrowserBeforeNavigate2(
      TObject *Sender, LPDISPATCH pDisp, Variant *URL, Variant *Flags,
      Variant *TargetFrameName, Variant *PostData, Variant *Headers,
      VARIANT_BOOL *Cancel)
{
    if(IsClosing)return;
    // 初始化
    m_DownError = false;
    FStatusText = "";
    MSGSTATUSCHANGE(this,STATUSCHANGE_TITLE);
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::CppWebBrowserCommandStateChange(
      TObject *Sender, long Command, VARIANT_BOOL Enable)
{
    if(IsClosing)return;

    switch(Command)
    {
        case ::CSC_NAVIGATEFORWARD:
        {
            FForwordEnabled = bool(Enable);
            break;
        }
        case ::CSC_NAVIGATEBACK:
        {
            FBackEnabled = bool(Enable);
            break;
        }

    }
    MSGSTATUSCHANGE(this,STATUSCHANGE_COMMANDSTATUS);
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::CppWebBrowserDocumentComplete(
      TObject *Sender, LPDISPATCH pDisp, Variant *URL)
{
    if(IsClosing)return;

    if(m_DownError)
        FErrorText = "发生错误";
    else
        FErrorText = "完成";

    if(!CppWebBrowser->LocationURL.IsEmpty())
    {
        if(FURL.Length() < 3 || (FURL[1] != '\\' && FURL[2] != ':'))
        {
            FURL = CppWebBrowser->LocationURL;
        }
    }
    MSGDOCCOMPLETE(this);
    MSGSTATUSCHANGE(this,STATUSCHANGE_URL);
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::CppWebBrowserDownloadBegin(
      TObject *Sender)
{
    if(IsClosing)return;
    FErrorText = "开始下载";
    //
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::CppWebBrowserDownloadComplete(
      TObject *Sender)
{
    if(IsClosing)return;
    FProgressMax = 0;    // // =0 表示进程条不可用
    FErrorText = "下载完成";
    // 向主窗口发送消息,完成
    MSGSTATUSCHANGE(this,STATUSCHANGE_COMPLETE);
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::CppWebBrowserNavigateComplete2(
      TObject *Sender, LPDISPATCH pDisp, Variant *URL)
{
    if(IsClosing)return;
    // 网页下载成功
    FErrorText = "地址已经找到";
    m_DownError = false;
    
    MSGSTATUSCHANGE(this,STATUSCHANGE_URL);
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::CppWebBrowserNavigateError(
      TObject *Sender, LPDISPATCH pDisp, Variant *URL, Variant *Frame,
      Variant *StatusCode, VARIANT_BOOL *Cancel)
{
    if(IsClosing)return;
    // 错误
    FErrorText = "发生错误";
    m_DownError = true;
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::CppWebBrowserNewWindow2(TObject *Sender,
      LPDISPATCH *ppDisp, VARIANT_BOOL *Cancel)
{
    if(IsClosing)return;
    //
    TfmChildwin *fNew = CreateMDIChild();
    fNew->CppWebBrowser->Offline = CppWebBrowser->Offline;

    *ppDisp = fNew->CppWebBrowser->ControlInterface;
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::CppWebBrowserProgressChange(
      TObject *Sender, long Progress, long ProgressMax)
{
    if(IsClosing)return;

    FProgressMax = ProgressMax;  // =0表示进程条不可用
    FProgress = Progress;
    // 向主窗口发送消息,要求改变进程数据
    MSGSTATUSCHANGE(this,STATUSCHANGE_PROGRESS);
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::CppWebBrowserStatusTextChange(
      TObject *Sender, BSTR URL)
{
    if(IsClosing)return;

    FStatusText = URL;
    MSGSTATUSCHANGE(this,STATUSCHANGE_STATUSTEXT);
}
//---------------------------------------------------------------------------

void __fastcall TfmChildwin::CppWebBrowserTitleChange(
      TObject *Sender, BSTR BTitle)
{
    if(IsClosing)return;

    FTitle = BTitle;
    if(FTitle.IsEmpty())
    {
        FTitle = FURL;
    }
    Caption = FTitle;
    MSGSTATUSCHANGE(this,STATUSCHANGE_TITLE);
}
//---------------------------------------------------------------------------

void TfmChildwin::NavigateURL(AnsiString URL)
{
    Caption = URL;
    FTitle = URL;
    TVariant V = URL;
    FURL = URL;
    CppWebBrowser->Navigate2(&V);
}
//---------------------------------------------------------------------------
bool TfmChildwin::CommandSupported(Shdocvw_tlb::OLECMDID cmdID)
{
    Shdocvw_tlb::OLECMDF S = CppWebBrowser->QueryStatusWB(cmdID);
    return (S & Shdocvw_tlb::OLECMDF_SUPPORTED);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -