在对话框中使用网页输入数据

原创 2001年08月02日 21:45:00

作者的话:使用DHTMLEdit控件在应用程序中显示HTML是一个学习简单但是不很有效的方法,可以用于浏览器编程入门。

此对话框使用了IE5附带的DHTMLEdit控件。

头文件

//{{AFX_INCLUDES()
#include "dhtmledit/dhtmledit.h"
//}}AFX_INCLUDES
#if !defined(AFX_PARAMDLG_H__0655C0B1_BEAD_4F17_AAAC_506C1D07D073__INCLUDED_)
#define AFX_PARAMDLG_H__0655C0B1_BEAD_4F17_AAAC_506C1D07D073__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif
// _MSC_VER > 1000
// ParamDlg.h : header file
//
class   CHtmlparam:public   CObject{
public:
    CString m_strAlt;
    COleVariant m_varVal;
};
#define HTML_TAG_INPUT  _T("INPUT")
#define HTML_TAG_SELECT _T("SELECT")
#define HTML_ATTRIB_NAME    _T("NAME")
#define HTML_ATTRIB_VALUE   _T("VALUE")
#define HTML_ATTRIB_CHECKED _T("checked")
#define HTML_ATTRIB_TYPE    _T("TYPE")
#define HTML_ATTRIB_ALT _T("ALT")
#define HTML_TYPE_CHECKBOX  _T("checkbox")
/////////////////////////////////////////////////////////////////////////////
// CParamDlg dialog

CString HTMLElement_GetValueAttributeName(CHTMLElement* pel);
CString HTMLElement_GetToolTipAttributeName(CHTMLElement*   pel);
CString HTMLElement_GetIDOrName(CHTMLElement*   pel);
BOOL    HTMLElement_IsInputElement(CHTMLElement*    pel);
BOOL    HTMLElement_IsInputCheckBoxElement(CHTMLElement*    pel);

class CParamDlg : public CDialog
{
// Construction
public:
    CParamDlg(CWnd* pParent = NULL);   // standard constructor
    ~CParamDlg();
// Dialog Data
    //{{AFX_DATA(CParamDlg)

    enum { IDD = IDD_PARAM_DLG };
    CDHTMLEdit  m_wndDhtmlEdit;
    //}}AFX_DATA
    CString m_strFilePath;
    CString m_strFileURL;
    COleVariant GetValue(CString    strName);
    void    GetValue(CString    strName,int& iVal);
    void    GetValue(CString    strName,long& lVal);
    void    GetValue(CString    strName,CString& strVal);
    void        SetValue(CString    strName,
        COleVariant varVal,
        LPCTSTR lpszAlt=NULL);//displayed as tooltip
    void        SetValue(CString    strName,
        int iVal,
        LPCTSTR lpszAlt=NULL);//displayed as tooltip
    void        SetValueBool(CString    strName,
        BOOL    bVal,
        LPCTSTR lpszAlt=NULL);//displayed as tooltip

// Overrides
    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CParamDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

    //}}AFX_VIRTUAL
// Implementation
protected:
    CMapStringToOb  m_mapNameToParam;
    BOOL    LoadValues();
    BOOL    SaveValues();
    // Generated message map functions
    //{{AFX_MSG(CParamDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnDocumentCompleteDhtmledit1();
    virtual void OnOK();
    DECLARE_EVENTSINK_MAP()
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};

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

#endif // !defined (AFX_PARAMDLG_H__0655C0B1_BEAD_4F17_AAAC_506C1D07D073__INCLUDED_)


 

实现文件

// ParamDlg.cpp : implementation file
//

#include "stdafx.h"
#include <atlbase.h>
#include <mshtml.h>
#include <mshtmdid.h>
#include "dhtmledit/htmlelementcollection.h"
#include "dhtmledit/htmldocument2.h"
#include "dhtmledit/htmlelement.h"
#include "WorkBench.h"
#include "ParamDlg.h"
#include "global.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CParamDlg dialog


CParamDlg::CParamDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CParamDlg::IDD, pParent)
{
    //{{AFX_DATA_INIT(CParamDlg)
    //}}AFX_DATA_INIT
    m_strFileURL.Empty();
    m_strFilePath.Empty();
    m_mapNameToParam.RemoveAll();
}
CParamDlg::~CParamDlg()
{
    POSITION    pos=m_mapNameToParam.GetStartPosition();
    CString strKey;
    CObject*    pOb;
    while(pos){
        m_mapNameToParam.GetNextAssoc(pos,strKey,pOb);
        delete  pOb;
    }
}

void CParamDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CParamDlg)
    DDX_Control(pDX, IDC_DHTMLEDIT1, m_wndDhtmlEdit);
    //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CParamDlg, CDialog)
    //{{AFX_MSG_MAP(CParamDlg)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CParamDlg message handlers

BOOL CParamDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
   
    // TODO: Add extra initialization here
    COleVariant varFile,varPrompt;
    varPrompt.vt=VT_BOOL;
    varPrompt.boolVal=FALSE;
    if(!m_strFileURL.IsEmpty())
        varFile=m_strFileURL;
    else
        varFile=m_strFilePath;
    TRY{
        m_wndDhtmlEdit.LoadDocument(&varFile,&varPrompt);
    }
    CATCH(COleDispatchException,pEx)
    {
        CGlobal::ProcessOleDispatchException(pEx);
        return  FALSE;
    }
    AND_CATCH(CException,pEx)
    {
        CGlobal::ProcessException(pEx);
        return  FALSE;
    }
    END_CATCH
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}

BEGIN_EVENTSINK_MAP(CParamDlg, CDialog)
    //{{AFX_EVENTSINK_MAP(CParamDlg)
    ON_EVENT(CParamDlg, IDC_DHTMLEDIT1, 1 /* DocumentComplete */, OnDocumentCompleteDhtmledit1, VTS_NONE)
    //}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CParamDlg::OnDocumentCompleteDhtmledit1()
{
    GetDlgItem(IDOK)->EnableWindow(TRUE);
    //read value from data
    LoadValues();
}

void CParamDlg::OnOK()
{
    // TODO: Add extra validation here
    if(!SaveValues())return;   
    CDialog::OnOK();
}

BOOL    CParamDlg::LoadValues()
{
    TRY{
        CHTMLElementCollection  ecAll=m_wndDhtmlEdit.GetDom().GetAll();
        long    lecLength=ecAll.GetLength();
        COleVariant varIndex,varTemp;//var2 is not used because accessing index,not name
        varIndex.vt=VT_I4;
        CString strElementID,strTemp;
        CHtmlparam* pHtmlparam;
        CObject*    pOb;
        for(int i=0;i<lecLength;i++){
            varIndex.lVal=i;
            CHTMLElement    el(ecAll.item(varIndex,varTemp));
            strTemp=HTMLElement_GetValueAttributeName(&el);
            if(!strTemp.IsEmpty()){//can have values
                strElementID=HTMLElement_GetIDOrName(&el);
                if(m_mapNameToParam.Lookup(strElementID,pOb)){//found
                    pHtmlparam=(CHtmlparam*)pOb;
                    el.setAttribute(strTemp,pHtmlparam->m_varVal,0);
                }
            }
            strTemp=HTMLElement_GetToolTipAttributeName(&el);
            if(!strTemp.IsEmpty()){//can have ToolTip
                varTemp=pHtmlparam->m_strAlt;
                el.setAttribute(strTemp,varTemp,0);
            }

        }
    }
    CATCH(CException,pEx)
    {
        CGlobal::ProcessException(pEx);
        return  FALSE;
    }
    END_CATCH
    return  TRUE;
}

BOOL    CParamDlg::SaveValues()
{
    TRY{
        CHTMLElementCollection  ecAll=m_wndDhtmlEdit.GetDom().GetAll();
        long    lecLength=ecAll.GetLength();
        COleVariant varIndex,varTemp;//var2 is not used because accessing index,not name
        varIndex.vt=VT_I4;
        CString strElementID,strTemp;
        CHtmlparam* pHtmlparam;
        CObject*    pOb;
        for(int i=0;i<lecLength;i++){
            varIndex.lVal=i;
            CHTMLElement    el(ecAll.item(varIndex,varTemp));
            varIndex.lVal=i;
            strTemp=HTMLElement_GetValueAttributeName(&el);
            if(!strTemp.IsEmpty()){//can have values
                strElementID=HTMLElement_GetIDOrName(&el);
                if(m_mapNameToParam.Lookup(strElementID,pOb)){//found
                    pHtmlparam=(CHtmlparam*)pOb;
                    varTemp=el.getAttribute(strTemp,0);
                }
                TRY{
                    pHtmlparam->m_varVal.ChangeType(pHtmlparam->m_varVal.vt,&varTemp);
                }
                CATCH(CException,pEx)
                {
                    CGlobal::ProcessException(pEx);
                    el.InvokeHelper(DISPID_IHTMLELEMENT2_FOCUS,DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
                    return  FALSE;
                }
                END_CATCH
            }
        }
    }
    CATCH(CException,pEx)
    {
        CGlobal::ProcessException(pEx);
        return  FALSE;
    }
    END_CATCH
    return  TRUE;
}
COleVariant CParamDlg::GetValue(CString strName)
{
    COleVariant varRet;
    CHtmlparam* pHtmlparam;
    CObject*    pOb;
    if(m_mapNameToParam.Lookup(strName,pOb)){//found
        pHtmlparam=(CHtmlparam*)pOb;
        varRet=pHtmlparam->m_varVal;
    }
    return  varRet;
}
void    CParamDlg::GetValue(CString strName,int& iVal)
{
    COleVariant var=GetValue(strName);
    var.ChangeType(VT_I4);
    iVal=var.iVal;
}
void    CParamDlg::GetValue(CString strName,long& lVal)
{
    COleVariant var=GetValue(strName);
    var.ChangeType(VT_I4);
    lVal=var.lVal;
}

void    CParamDlg::GetValue(CString strName,CString& strVal)
{
    COleVariant var=GetValue(strName);
    var.ChangeType(VT_BSTR);
    strVal=var.bstrVal;
}


void        CParamDlg::SetValue(CString strName,
    COleVariant varVal,
    LPCTSTR lpszAlt/*=NULL*/)//displayed as tooltip
{
    COleVariant varRet;
    CHtmlparam* pHtmlparam;
    CObject*    pOb;
    if(m_mapNameToParam.Lookup(strName,pOb)){//found
        pHtmlparam=(CHtmlparam*)pOb;
    }
    else{
        pHtmlparam=new  CHtmlparam;
        m_mapNameToParam.SetAt(strName,pHtmlparam);
    }
    pHtmlparam->m_varVal=varVal;
    if(lpszAlt)
        pHtmlparam->m_strAlt=lpszAlt;
}
void        CParamDlg::SetValue(CString strName,
        int iVal,
        LPCTSTR lpszAlt/*=NULL*/)//displayed as tooltip
{
    COleVariant var;
    var.vt=VT_I4;
    var.iVal=iVal;
    SetValue(strName,var,lpszAlt);
}
void        CParamDlg::SetValueBool(CString strName,
        BOOL    bVal,
        LPCTSTR lpszAlt/*=NULL*/)//displayed as tooltip
{
    SetValue(strName,COleVariant((long)bVal,VT_BOOL),lpszAlt);
}
CString     HTMLElement_GetValueAttributeName(CHTMLElement* pel)
{
    CString strValAttribName;
    CString strTagName=pel->GetTagName();
    if(!strTagName.CompareNoCase(HTML_TAG_INPUT)||!strTagName.CompareNoCase(HTML_TAG_SELECT)){
        strValAttribName=HTML_ATTRIB_VALUE;
    }
    if(HTMLElement_IsInputCheckBoxElement(pel))
        strValAttribName=HTML_ATTRIB_CHECKED;
    //to be continued
    return  strValAttribName;
}

CString     HTMLElement_GetToolTipAttributeName(CHTMLElement*   pel)
{
    CString strTipAttribName;
    CString strTagName=pel->GetTagName();
    if(!strTagName.CompareNoCase(HTML_TAG_INPUT))
        strTipAttribName=HTML_ATTRIB_ALT;
    //to be continued
    return  strTipAttribName;
}
CString HTMLElement_GetIDOrName(CHTMLElement*   pel)
{
    COleVariant varTemp;
    CString strElementID=pel->GetId();
    if(strElementID.IsEmpty()){
        varTemp=pel->getAttribute(HTML_ATTRIB_NAME,0);
        varTemp.ChangeType(VT_BSTR);
        strElementID=varTemp.bstrVal;
    }
    return  strElementID;
}
BOOL    HTMLElement_IsInputElement(CHTMLElement*    pel)
{
    CString strTagName=pel->GetTagName();
    return  (!strTagName.CompareNoCase(HTML_TAG_INPUT));
}
BOOL    HTMLElement_IsInputCheckBoxElement(CHTMLElement*    pel)
{
    BOOL    bRet=FALSE;
    if(HTMLElement_IsInputElement(pel)){
        COleVariant varTemp=pel->getAttribute(HTML_ATTRIB_TYPE,0);
        varTemp.ChangeType(VT_BSTR);
        CString strTemp=varTemp.bstrVal;
        if(!strTemp.CompareNoCase(HTML_TYPE_CHECKBOX))
            bRet=TRUE;
    }
    return  bRet;
}

* pHtmlparam;
  CObject* pOb;
  for(int i=0;i<lecLength;i++){
   varIndex.lVal=i;
   CHTMLElement el(ecAll.item(varIndex,varTemp));
   strTemp=HTMLElement_GetValueAttributeName(&el);
   if(!strTemp.IsEmpty()){//can have values
    strElementID=HTMLElement_GetIDOrName(&el);
    if(m_mapNameToParam.Lookup(strElementID,pOb)){//found
     pHtmlparam=(CHtmlparam*)pOb;
     el.setAttribute(strTemp,pHtmlparam->m_varVal,0);
    }
   }
   strTemp=HTMLElement_GetToolTipAttributeName(&el);
   if(!strTemp.IsEmpty()){//can have ToolTip
    varTemp=pHtmlparam->m_strAlt;
    el.setAttribute(strTemp,varTemp,0);
   }

  }
 }
 CATCH(CException,pEx)
 {
  CGlobal::ProcessException(pEx);
  return FALSE;
 }
 END_CATCH
 return TRUE;
}

BOOL CParamDlg::SaveValues()
{
 TRY{
  CHTMLElementCollection ecAll=m_wndDhtmlEdit.GetDom().GetAll();
  long    lecLength=ecAll.GetLength();
  COleVariant varIndex,varTemp;//var2 is not used because accessing index,not name
  varIndex.vt=VT_I4;
  CString strElementID,strTemp;
  CHtmlparam* pHtmlparam;
  CObject* pOb;
  for(int i=0;i<lecLength;i++){
   varIndex.lVal=i;
   CHTMLElement el(ecAll.item(varIndex,varTemp));
   varIndex.lVal=i;
   strTemp=HTMLElement_GetValueAttributeName(&el);
   if(!strTemp.IsEmpty()){//can have values
    strElementID=HTMLElement_GetIDOrName(&el);
    if(m_mapNameToParam.Lookup(strElementID,pOb)){//found
     pHtmlparam=(CHtmlparam*)pOb;
     varTemp=el.getAttribute(strTemp,0);
    }
    TRY{
     pHtmlparam->m_varVal.ChangeType(pHtmlparam->m_varVal.vt,&varTemp);
    }
    CATCH(CException,pEx)
    {
     CGlobal::ProcessException(pEx);
     el.InvokeHelper(DISPID_IHTMLELEMENT2_FOCUS,DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
     return FALSE;
    }
    END_CATCH
   }
  }
 }
 CATCH(CException,pEx)
 {
  CGlobal::ProcessException(pEx);
  return FALSE;
 }
 END_CATCH
 return TRUE;
}
COleVariant CParamDlg::GetValue(CString strName)
{
 COleVariant varRet;
 CHtmlparam* pHtmlparam;
 CObject* pOb;
 if(m_mapNameToParam.Lookup(strName,pOb)){//found
  pHtmlparam=(CHtmlparam*)pOb;
  varRet=pHtmlparam->m_varVal;
 }
 return varRet;
}
void CParamDlg::GetValue(CString strName,int& iVal)
{
 COleVariant var=GetValue(strName);
 var.ChangeType(VT_I4);
 iVal=var.iVal;
}
void CParamDlg::GetValue(CString strName,long& lVal)
{
 COleVariant var=GetValue(strName);
 var.ChangeType(VT_I4);
 lVal=var.lVal;
}

void CParamDlg::GetValue(CString strName,CString& strVal)
{
 COleVariant var=GetValue(strName);
 var.ChangeType(VT_BSTR);
 strVal=var.bstrVal;
}


void  CParamDlg::SetValue(CString strName,
 COleVariant varVal,
 LPCTSTR lpszAlt/*=NULL*/)//displayed as tooltip
{
 COleVariant varRet;
 CHtmlparam* pHtmlparam;
 CObject* pOb;
 if(m_mapNameToParam.Lookup(strName,pOb)){//found
  pHtmlparam=(CHtmlparam*)pOb;
 }
 else{
  pHtmlparam=new CHtmlparam;
  m_mapNameToParam.SetAt(strName,pHtmlparam);
 }
 pHtmlparam->m_varVal=varVal;
 if(lpszAlt)
  pHtmlparam->m_strAlt=lpszAlt;
}
void  CParamDlg::SetValue(CString strName,
  int iVal,
  LPCTSTR lpszAlt/*=NULL*/)//displayed as tooltip
{
 COleVariant var;
 var.vt=VT_I4;
 var.iVal=iVal;
 SetValue(strName,var,lpszAlt);
}
void  CParamDlg::SetValueBool(CString strName,
  BOOL bVal,
  LPCTSTR lpszAlt/*=NULL*/)//displayed as tooltip
{
 SetValue(strName,COleVariant((long)bVal,VT_BOOL),lpszAlt);
}
CString  HTMLElement_GetValueAttributeName(CHTMLElement* pel)
{
 CString strValAttribName;
 CString strTagName=pel->GetTagName();
 if(!strTagName.CompareNoCase(HTML_TAG_INPUT)||!strTagName.CompareNoCase(HTML_TAG_SELECT)){
  strValAttribName=HTML_ATTRIB_VALUE;
 }
 if(HTMLElement_IsInputCheckBoxElement(pel))
  strValAttribName=HTML_ATTRIB_CHECKED;
 //to be continued
 return strValAttribName;
}

CString  HTMLElement_GetToolTipAttributeName(CHTMLElement* pel)
{
 CString strTipAttribName;
 CString strTagName=pel->GetTagName();
 if(!strTagName.CompareNoCase(HTML_TAG_INPUT))
  strTipAttribName=HTML_ATTRIB_ALT;
 //to be continued
 return strTipAttribName;
}
CString HTMLElement_GetIDOrName(CHTMLElement* pel)
{
 COleVariant varTemp;
 CString strElementID=pel->GetId();
 if(strElementID.IsEmpty()){
  varTemp=pel->getAttribute(HTML_ATTRIB_NAME,0);
  varTemp.ChangeType(VT_BSTR);
  strElementID=varTemp.bstrVal;
 }
 return strElementID;
}
BOOL HTMLElement_IsInputElement(CHTMLElement* pel)
{
 CString strTagName=pel->GetTagName();
 return (!strTagName.CompareNoCase(HTML_TAG_INPUT));
}
BOOL HTMLElement_IsInputCheckBoxElement(CHTMLElement* pel)
{
 BOOL bRet=FALSE;
 if(HTMLElement_IsInputElement(pel)){
  COleVariant varTemp=pel->getAttribute(HTML_ATTRIB_TYPE,0);
  varTemp.ChangeType(VT_BSTR);
  CString strTemp=varTemp.bstrVal;
  if(!strTemp.CompareNoCase(HTML_TYPE_CHECKBOX))
   bRet=TRUE;
 }
 return bRet;
}

在对话框中使用网页输入数据

作者的话:使用DHTMLEdit控件在应用程序中显示HTML是一个学习简单但是不很有效的方法,可以用于浏览器编程入门。此对话框使用了IE5附带的DHTMLEdit控件。头文件//{{AFX_INC...
  • hejishan
  • hejishan
  • 2008年03月11日 11:18
  • 202

Qt 学习之路 2(14):对话框数据传递

对话框的出现用于完成一个简单的或者是短期的任务。对话框与主窗口之间的数据交互相当重要。本节将讲解如何在对话框和主窗口之间进行数据交互。按照前文的讲解,对话框分为模态和非模态两种。我们也将以这两种为例,...
  • lmhuanying1012
  • lmhuanying1012
  • 2017年09月24日 08:35
  • 88

在网页中使用对话框

html>head>script>function openDialog(){ var left = screen.width/2 - 340/2; var top = scree...
  • redv
  • redv
  • 2004年09月15日 17:39
  • 915

VC在对话框中显示网页并对网页进行操作

VC对话框程序中显示网页有两种方法: (1) 利用Active控件。 1. 添加"Microsoft web浏览器"控件:Add to Project        ->Compon...
  • keebai
  • keebai
  • 2015年01月12日 15:11
  • 437

实现网页在显示对话框时网页的内容不可操作

        width: 100%; height: 100%; position: absolute; left: 0px; top: 0px; z-index: 50000;"        ...
  • fmideal
  • fmideal
  • 2007年04月15日 21:53
  • 594

在Java中使用键盘输入数据【总结篇】

在Java中不像C语言中那么方便直接使用scanf(),下面是我积累的一些方法: 1.控制台输入数据 1.1 主方法的形式参数 1.2 利用字节输入流 1.3 利用...
  • rart2008
  • rart2008
  • 2010年06月07日 17:26
  • 3427

web网页对话框的一些设置

1.实现点击跳出网页对话框例子 html中利用图片进行跳转,代码如下: 编写自定义的JavaScript函数opendialog(),采用的是window.showModalDialog(...
  • DOUZHENG8433
  • DOUZHENG8433
  • 2016年12月22日 19:37
  • 1086

R:使用文本编辑器手动输入数据

R中的函数edit()会自动调用一个允许手动输入数据的文本编辑器。具体步骤如下: (1)创建一个空数据框(或矩阵),其中变量名和变量的模式需要与理想中的最终数据集一致; (2)针对这个数据对象调用...
  • thoixy
  • thoixy
  • 2014年10月27日 13:33
  • 3909

在MFC对话框中显示html网页

头文件: [cpp] view plain copy  print? #pragma once   #include    #include   ...
  • u011473714
  • u011473714
  • 2017年02月22日 23:47
  • 799

怎样让弹出对话框居中显示

方法一:function opW(){var ye=window.open(,yexj00,width=400,height=200); ye.moveTo((screen.availWidth-40...
  • Terry001
  • Terry001
  • 2007年06月26日 02:08
  • 1947
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在对话框中使用网页输入数据
举报原因:
原因补充:

(最多只允许输入30个字)