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

📄 maindlg.h

📁 WTL for MFC Programmers第6章的例程
💻 H
字号:
// maindlg.h : interface of the CMainDlg class
//
/////////////////////////////////////////////////////////////////////////////

#if !defined(AFX_MAINDLG_H__B193DB4C_786C_4548_B5D8_A2A7FC0D6E33__INCLUDED_)
#define AFX_MAINDLG_H__B193DB4C_786C_4548_B5D8_A2A7FC0D6E33__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

/////////////////////////////////////////////////////////////////////////////
// Info structs used by the event sink map

__declspec(selectany) _ATL_FUNC_INFO BeforeNavigate2Info =
    { CC_STDCALL, VT_EMPTY, 7,
        { VT_DISPATCH, VT_VARIANT|VT_BYREF, VT_VARIANT|VT_BYREF, 
          VT_VARIANT|VT_BYREF, VT_VARIANT|VT_BYREF, VT_VARIANT|VT_BYREF, 
          VT_BOOL|VT_BYREF }
};

__declspec(selectany) _ATL_FUNC_INFO NavigateComplete2Info =
    { CC_STDCALL, VT_EMPTY, 2, { VT_DISPATCH, VT_VARIANT|VT_BYREF } 
};

__declspec(selectany) _ATL_FUNC_INFO StatusChangeInfo =
    { CC_STDCALL, VT_EMPTY, 1, { VT_BSTR }
};

__declspec(selectany) _ATL_FUNC_INFO CommandStateChangeInfo =
    { CC_STDCALL, VT_EMPTY, 2, { VT_I4, VT_BOOL }
};

__declspec(selectany) _ATL_FUNC_INFO DownloadInfo =
    { CC_STDCALL, VT_EMPTY, 0 
};


/////////////////////////////////////////////////////////////////////////////

class CMainDlg : public CAxDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
                 public CMessageFilter, public CIdleHandler,
                 public CWinDataExchange<CMainDlg>,
                 public CDialogResize<CMainDlg>,
                 public CComObjectRootEx<CComSingleThreadModel>,
                 public CComCoClass<CMainDlg>,
                 public IDispEventSimpleImpl<37, CMainDlg, &DIID_DWebBrowserEvents2>
{
public:
    enum { IDD = IDD_MAINDLG };

    // Construction/destruction
    CMainDlg();
    ~CMainDlg();

    // Maps
    BEGIN_MSG_MAP(CMainDlg)
        MSG_WM_INITDIALOG(OnInitDialog)
        MSG_WM_DESTROY(OnDestroy)
        COMMAND_ID_HANDLER_EX(ID_APP_ABOUT, OnAppAbout)
        COMMAND_ID_HANDLER_EX(IDOK, OnOK)
        COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)
        COMMAND_ID_HANDLER_EX(IDC_BACK, OnBack)
        COMMAND_ID_HANDLER_EX(IDC_FORWARD, OnForward)
        COMMAND_ID_HANDLER_EX(IDC_RELOAD, OnReload)
        COMMAND_ID_HANDLER_EX(IDC_STOP, OnStop)
        COMMAND_RANGE_HANDLER_EX(IDC_LOG_BEFORENAV, IDC_LOG_CMDSTATECHG, OnLogCheckbox)
        CHAIN_MSG_MAP(CUpdateUI<CMainDlg>)
        CHAIN_MSG_MAP(CDialogResize<CMainDlg>)
    END_MSG_MAP()

    BEGIN_UPDATE_UI_MAP(CMainDlg)
        UPDATE_ELEMENT(IDC_BACK, UPDUI_CHILDWINDOW)
        UPDATE_ELEMENT(IDC_FORWARD, UPDUI_CHILDWINDOW)
    END_UPDATE_UI_MAP()

    BEGIN_DDX_MAP(CMainDlg)
        DDX_TEXT(IDC_ADDRESS, m_sAddress)
        DDX_CONTROL(IDC_ADDRESS, m_wndEdit)
        DDX_CONTROL(IDC_BACK, m_btnBack)
        DDX_CONTROL(IDC_FORWARD, m_btnFwd)
        DDX_CONTROL(IDC_STOP, m_btnStop)
        DDX_CONTROL(IDC_RELOAD, m_btnReload)
        DDX_CONTROL(IDC_WAITUP, m_wndWait)
        DDX_CONTROL(IDC_IE_STATUS, m_wndIEStatus)
        DDX_CONTROL(IDC_EVENT_LIST, m_wndEventList)
        DDX_CHECK(IDC_LOG_BEFORENAV, m_nLogBeforeNav)
        DDX_CHECK(IDC_LOG_NAVCOMPLETE, m_nLogNavComplete)
        DDX_CHECK(IDC_LOG_STATUSCHG, m_nLogStatusTextChange)
        DDX_CHECK(IDC_LOG_DOWNLOADBEGIN, m_nLogDownloadBegin)
        DDX_CHECK(IDC_LOG_DOWNLOADEND, m_nLogDownloadComplete)
        DDX_CHECK(IDC_LOG_CMDSTATECHG, m_nLogCmdStateChange)
    END_DDX_MAP()

    BEGIN_DLGRESIZE_MAP(CMainDlg)
        DLGRESIZE_CONTROL(IDC_ADDRESS, DLSZ_SIZE_X)
        DLGRESIZE_CONTROL(IDOK, DLSZ_MOVE_X)
        DLGRESIZE_CONTROL(IDCANCEL, DLSZ_MOVE_X)
        DLGRESIZE_CONTROL(ID_APP_ABOUT, DLSZ_MOVE_X)
        DLGRESIZE_CONTROL(IDC_IE, DLSZ_SIZE_X|DLSZ_SIZE_Y)
        DLGRESIZE_CONTROL(IDC_IE_STATUS, DLSZ_SIZE_X|DLSZ_MOVE_Y)
        DLGRESIZE_CONTROL(IDC_EVENT_LIST, DLSZ_SIZE_X|DLSZ_MOVE_Y)
        DLGRESIZE_CONTROL(IDC_LOG_BEFORENAV, DLSZ_MOVE_Y)
        DLGRESIZE_CONTROL(IDC_LOG_NAVCOMPLETE, DLSZ_MOVE_Y)
        DLGRESIZE_CONTROL(IDC_LOG_STATUSCHG, DLSZ_MOVE_Y)
        DLGRESIZE_CONTROL(IDC_LOG_DOWNLOADBEGIN, DLSZ_MOVE_Y)
        DLGRESIZE_CONTROL(IDC_LOG_DOWNLOADEND, DLSZ_MOVE_Y)
        DLGRESIZE_CONTROL(IDC_LOG_CMDSTATECHG, DLSZ_MOVE_Y)
    END_DLGRESIZE_MAP()

    BEGIN_COM_MAP(CMainDlg)
        COM_INTERFACE_ENTRY2(IDispatch, IDispEventSimpleImpl)
    END_COM_MAP()

    BEGIN_SINK_MAP(CMainDlg)
        SINK_ENTRY_INFO(37, DIID_DWebBrowserEvents2, DISPID_BEFORENAVIGATE2, OnBeforeNavigate2, &BeforeNavigate2Info)
        SINK_ENTRY_INFO(37, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2, OnNavigateComplete2, &NavigateComplete2Info)
        SINK_ENTRY_INFO(37, DIID_DWebBrowserEvents2, DISPID_STATUSTEXTCHANGE, OnStatusChange, &StatusChangeInfo)
        SINK_ENTRY_INFO(37, DIID_DWebBrowserEvents2, DISPID_COMMANDSTATECHANGE, OnCommandStateChange, &CommandStateChangeInfo)
        SINK_ENTRY_INFO(37, DIID_DWebBrowserEvents2, DISPID_DOWNLOADBEGIN, OnDownloadBegin, &DownloadInfo)
        SINK_ENTRY_INFO(37, DIID_DWebBrowserEvents2, DISPID_DOWNLOADCOMPLETE, OnDownloadComplete, &DownloadInfo)
    END_SINK_MAP()

    // Web browser event handlers
    void __stdcall OnBeforeNavigate2 (
        IDispatch* pDisp, VARIANT* URL, VARIANT* Flags, VARIANT* TargetFrameName,
        VARIANT* PostData, VARIANT* Headers, VARIANT_BOOL* Cancel );

    void __stdcall OnNavigateComplete2 ( IDispatch* pDisp, VARIANT* URL );
    void __stdcall OnStatusChange ( BSTR bsText );
    void __stdcall OnCommandStateChange ( long lCmd, VARIANT_BOOL vbEnabled );
    void __stdcall OnDownloadBegin();
    void __stdcall OnDownloadComplete();

    // Message handlers
    BOOL PreTranslateMessage(MSG* pMsg);
    BOOL OnIdle();

    BOOL OnInitDialog(HWND hwndFocus, LPARAM lParam);
    void OnDestroy();

    // Command handlers
    void OnAppAbout(UINT uCode, int nID, HWND hWndCtl);
    void OnOK(UINT uCode, int nID, HWND hWndCtl);
    void OnCancel(UINT uCode, int nID, HWND hWndCtl);

    void OnBack(UINT uCode, int nID, HWND hWndCtl);
	void OnForward(UINT uCode, int nID, HWND hWndCtl);
	void OnStop(UINT uCode, int nID, HWND hWndCtl);
	void OnReload(UINT uCode, int nID, HWND hWndCtl);
	void OnLogCheckbox(UINT uCode, int nID, HWND hWndCtl);

    void CloseDialog(int nVal);

protected:
    // Interface to the web browser control
    CComPtr<IWebBrowser2> m_pWB2;

    // Counter used to show the "wait" text
    UINT m_uDownloadEvents;

    // Browser control buttons
    CWindow       m_wndOK;
    CEditImpl     m_wndEdit;
    CBitmapButton m_btnBack, m_btnFwd, m_btnStop, m_btnReload;

    // DDX vars
    CString           m_sAddress;
    CStaticImpl       m_wndWait;
    CStaticImpl       m_wndIEStatus;
    CListViewCtrlImpl m_wndEventList;

    int m_nLogBeforeNav, m_nLogNavComplete, m_nLogStatusTextChange,
        m_nLogDownloadBegin, m_nLogDownloadComplete, m_nLogCmdStateChange;

    // Misc functions
    void AddToList ( LPCTSTR szMsg );
};


/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MAINDLG_H__B193DB4C_786C_4548_B5D8_A2A7FC0D6E33__INCLUDED_)

⌨️ 快捷键说明

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