亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? html_dialog.htm

?? 淺談HTML對話框的實現的Visual C++源代碼
?? HTM
字號:
<p align=center>VC7 HTML Dialog開發實例講解
<p align=center>作者:聞怡洋 <a href="mailto:wyy_cq@copathway.com">wyy_cq@copathway.com</a> 
  <a href="http://www.vchelp.net/">http://www.vchelp.net/</a>
<p align=center>未得到作者同意,不允許任何形式的轉載
<p>開發環境:VS7,Windows XP,Windows 2K
<p>在VS7中添加了一種新的對話框類:CDHtmlDialog,顧名思義就是能夠顯示DHTML內容的對話框,但不同與以前的CHTMLView不同的是添加了對DHTML的支持,能夠響應各種DHTML的事件,而且能夠方便的得到網頁上的各種內容和輸入。在這以前要完成這些功能必須通過復雜的COM接口來完成,而現在MS MFC已經為我們做好了這一切。
<p>在下面我會按照下面的順序講解CDHtmlDialog的用法。但本文也只能對DHTML對話框的功能進行部分的講解,更多更全的說明需要大家自己摸索和查找資料。本文的目的是在于講解如何得到和設置網頁上的各種元素的值,如何處理事件。
<p>此外在閱讀本文前你必須對HTML和DHTML有所了解。
<ul>
  <li><a href=#step1>CDHtmlDialog類的成員函數</a></li>
  <li><a href="#step2">CDHtmlDialog事件處理映射宏</a></li>
  <li><a href=#step3>CDHtmlDialog類的各種DDX幫助宏</a></li>
  <li><a href=#step4>一個簡單的例子</a></li>
  <!--<li><a href=step5>講解MS提供的Scheduler Sample(Demonstrates HTML-Based Dialog Boxes)</a></li>-->
</ul>
<p align="center"><a name=step1></a><strong>類成員函數介紹</strong>
<p align=left><strong>構造函數</strong></p>
<pre>
CDHtmlDialog( );
CDHtmlDialog(
   LPCTSTR lpszTemplateName,
   LPCTSTR szHtmlResID,
   CWnd *pParentWnd = NULL 
);
CDHtmlDialog(
   UINT nIDTemplate,
   UINT nHtmlResID = 0,
   CWnd *pParentWnd = NULL 
);
</pre>
<p>你可以看到和CDialog不同的就在于第二個參數,表示在對話框創建時是否自動加載HTML,這里必須說明的是HTML必須以資源的形式存放,這個參數指明的是資源的ID或名稱。
<p><img src=html_rs.gif>
<p>或者你可以利用 
<pre>
BOOL LoadFromResource(
   LPCTSTR lpszResource 
);
BOOL LoadFromResource(
   UINT nRes 
);
</pre>
<p>將HTML內容在后期進行裝載。
<p align="left"><strong>頁面瀏覽</strong> 
<p>此外一些函數如:OnNavigateComplete,OnBeforeNavigate,Navigate等用于頁面轉換的函數,在以前的CHtmlView中就有這里就不再作講解。 
<p align=left><strong>得到當前URL</strong> 
<pre>
void GetCurrentUrl(
   CString& szUrl 
);
</pre>
<p align=left><strong>得到網頁中的DHTML元素的指定接口</strong> 
<pre>
HRESULT GetElementInterface(
   LPCTSTR szElementId,
   REFIID riid,
   void** ppvObj 
);
</pre>
<p>第一個參數指定,第二個參數指定接口ID,第三個參數返回接口指針。
<p align="left"><strong>得到網頁中的DHTML元素的IHTMLElement接口</strong> 
<pre>
HRESULT GetElement(
   LPCTSTR szElementId,
   IHTMLElement **pphtmlElement 
);
相當于調用 GetElementInterface(szElementId,IHTMLElement,pphtmlElement);
</pre>
<p>這個函數非常的重要,因為如果要得到DHTML的內容就必須通過頁面上的各個元素的屬性來得到,例如:對于Input type=text的屬性value就是輸入的值,對于p的屬性innerText就是段落中的內容。
<p>函數的第二個參數就是元素的名稱。
<p>函數的第二個參數,是一個指向指針的指針,通過它得到IHTMLElement的接口。函數返回值是HRESULT其值的定義符合COM中對返回值的定義。(如果你不了解,可以簡單的檢測返回值是否等于S_OK)
<p align="left"><strong>得到元素的innerText和innerHTML的屬性</strong> 
<pre>
innerHTML屬性:
BSTR GetElementHtml(
   LPCTSTR szElementId 
);
innerText屬性:
BSTR GetElementText(
   LPCTSTR szElementId 
);
相當于調用IHTMLElement接口的gett_innerHTML和get_innerText方法</pre>
<p>與之對應的是設置元素的innerText和InnerHTML屬性:
<pre>
innerHTML屬性:
void SetElementHtml(
   LPCTSTR szElementId,
   BSTR bstrText 
);
innerText屬性:
void SetElementText(
   LPCTSTR szElementId,
   BSTR bstrText 
);
相當于調用IHTMLElement接口的put_innerHTML和put_innerText方法</pre>
<p align="left"><strong>示范代碼</strong> 
<p>假設頁面上的代碼為:&lt;p id=p2&gt;test&lt;/p&gt;,執行下面代碼可以顯示原來的內容和將新內容設置為:abcdefg 
<pre>
	CComPtr&lt;IHTMLElement&gt; spP1;
	HRESULT hr = S_OK;

	// Use the template overload
	hr = GetElementInterface("p2", &spP1);
// 或者 hr = GetElement(&quot;p2&quot;, &amp;spP1);
// 或者 hr = GetElementInterface(&quot;p2&quot;, IID_IHTMLElement, reinterpret_cast&lt;void**&gt;(&amp;spP1));
if(S_OK == hr)
	{
		BSTR bStr;
		spP1->get_innerHTML(&bStr);
		CString szTemp;
		szTemp = bStr;
		AfxMessageBox(szTemp);

		CString strTable="abcdefg";
		BSTR bstrTable = strTable.AllocSysString();
		spP1->put_innerHTML(bstrTable);
	}
或者利用SetElementHtml和SetElementText來進行設置:
	BSTR bStr;<br>	bStr = GetElementHtml(&quot;p2&quot;);<br>	CString szTemp;<br>	szTemp = bStr;<br>	AfxMessageBox(szTemp);<br>	CString strTable=&quot;ABCDEFG&quot;;<br>	BSTR bstrTable = strTable.AllocSysString();<br>	//spP1-&gt;put_innerHTML(bstrTable);<br>	SetElementHtml(&quot;p2&quot;,bstrTable);
</pre>
<p align="center"><a name=step2 id="step2"></a> <strong>事件處理映射宏</strong>
<p><strong>基本格式</strong></p>
<pre>
BEGIN_DHTML_EVENT_MAP(className )
DHTML_EVENT_ONCLICK(elemName, memberFxn ) //處理onclick事件
DHTML_EVENT_ONFOCUS(elemName, memberFxn ) //處理onfocus事件
DHTML_EVENT_ONKEYDOWN(elemName, memberFxn ) //處理onkeydown事件
DHTML_EVENT_ONMOUSEMOVE(elemName, memberFxn ) //處理mousemove事件
DHTML_EVENT_ONMOUSEOUT(elemName, memberFxn ) //處理mousemoveout事件
等等………
END_DHTML_EVENT_MAP()
</pre>
<p>更詳細的說明可以查閱MSDN中DHTML Event Map Macros部分。MSDN中對可以處理的事件進行了詳細的說明。DHTML中的事件與Windows中消息不是同一個概念,雖然映射宏的形式很相同。 
<p><strong>添加映射處理代碼</strong>
<p>我在VC7中沒有發現自動添加各種事件映射的方法,只能通過手工添加代碼的方式。
<pre>
定義事件處理函數:
	函數原型為:HRESULT urClass::OnXXXXX(IHTMLElement* /*pElement*/)
添加消息映射:
	BEGIN_DHTML_EVENT_MAP(urClass)
		DHTML_EVENT_ONCLICK(_T("id name"), OnXXXXX)
	END_DHTML_EVENT_MAP()
	
下面是一段示范代碼:
// mydlg.h
class CmydhtmlDlg : public CDHtmlDialog
{
// 構造
public:
	CmydhtmlDlg(CWnd* pParent = NULL);	// 標準構造函數

// 對話框數據
	enum { IDD = IDD_MYDHTML_DIALOG, IDH = IDR_HTML_MYDHTML_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持

	HRESULT OnButtonOK(IHTMLElement *pElement);
	HRESULT OnButtonCancel(IHTMLElement *pElement);
	HRESULT OnButtonTest1(IHTMLElement *pElement);
	HRESULT OnButtonTest2(IHTMLElement *pElement);
	HRESULT OnButtonTest3(IHTMLElement *pElement);
	HRESULT OnSelectTest1(IHTMLElement *pElement);
	HRESULT OnDivMouseMove1(IHTMLElement *pElement);
	HRESULT OnDivMouseOut1(IHTMLElement *pElement);

//mydlg.cpp
BEGIN_DHTML_EVENT_MAP(CmydhtmlDlg)
	DHTML_EVENT_ONCLICK(_T("ButtonOK"), OnButtonOK)
	DHTML_EVENT_ONCLICK(_T("ButtonCancel"), OnButtonCancel)
	DHTML_EVENT_ONCLICK(_T("Test1"), OnButtonTest1)
	DHTML_EVENT_ONCLICK(_T("Test2"), OnButtonTest2)
	DHTML_EVENT_ONCLICK(_T("Test3"), OnButtonTest3)
	DHTML_EVENT_ONCHANGE(_T("s1"), OnSelectTest1)
	DHTML_EVENT_ONMOUSEMOVE(_T("d1"), OnDivMouseMove1 )
	DHTML_EVENT_ONMOUSEOUT(_T("d1"), OnDivMouseOut1 )
END_DHTML_EVENT_MAP()

HRESULT CmydhtmlDlg::OnButtonOK(IHTMLElement* /*pElement*/)
{
	OnOK();
	return S_OK;
}

HRESULT CmydhtmlDlg::OnButtonCancel(IHTMLElement* /*pElement*/)
{
	OnCancel();
	return S_OK;
}

HRESULT CmydhtmlDlg::OnButtonTest1(IHTMLElement* /*pElement*/)
{
	AfxMessageBox("test1 button clicked");
	return S_OK;
}

HRESULT CmydhtmlDlg::OnSelectTest1(IHTMLElement* /*pElement*/)
{
	TRACE("select1 changed\n");
	return S_OK;
}

HRESULT CmydhtmlDlg::OnDivMouseMove1(IHTMLElement* /*pElement*/)
{
	TRACE("div1 mouse move\n");
	return S_OK;
}

HRESULT CmydhtmlDlg::OnDivMouseOut1(IHTMLElement* /*pElement*/)
{
	TRACE("div1 mouse out\n");
	return S_OK;
}
</pre>
<p align="center"><strong><a name=step3 id="step3"></a>各種DDX幫助宏 </strong> 
<p><strong>DDX宏介紹 </strong>
<p>如同CDialog類一樣,CHtmlDialog也提供各種DDX幫助宏來與HTML頁面上的控件交換數據。
<p>遺憾的是VS7中無法為CDHTMLDialog 的子類自動添加DDX變量,必須通過手工添加。
<p><strong>設置innerText和innerHTML屬性</strong>
<pre>DDX_DHtml_ElementInnerText(
   CDataExchange* dx,
   LPCTSTR name,
   CString&amp; var 
   )
DDX_DHtml_ElementInnerHtml(
   CDataExchange* dx,
   LPCTSTR name,
   CString& var 
)
相當與前面提到的設置和獲取innerText,innerHTML屬性。
</pre>
<p><strong>獲取和設置控件中的值</strong> 
<p>在DHTML中利用“對象名程.value”可以得到控件中輸入的值,利用DDX也同樣可以得到。
<pre>
DDX_DHtml_ElementValue(
   CDataExchange* dx,
   LPCTSTR name,
   var 
)
用于在控件和對象之間交換數據。
</pre>
<p>使用方法
<p>假設HTML文件中代碼如下
<pre>&lt;p id=&quot;p4&quot;&gt;&lt;b&gt;p4 for ddx&lt;/b&gt;&lt;/p&gt;
&lt;input type=&quot;text&quot; ID=&quot;input1&quot; size=&quot;20&quot; value=&quot;input1 for ddx&quot; NAME=&quot;input1&quot;&gt;
&lt;input type=&quot;text&quot; ID=&quot;input2&quot; size=&quot;20&quot; value=&quot;101&quot; NAME=&quot;input2&quot;&gt;

在H文件中添加變量定義:
public: //DDX
	CString m_szP4,m_szInput1;
	int m_iInput2;

在類的構造函數中賦初值:
CmydhtmlDlg::CmydhtmlDlg(CWnd* pParent /*=NULL*/)
	: CDHtmlDialog(CmydhtmlDlg::IDD, CmydhtmlDlg::IDH, pParent)
	{
		m_hIcon = AfxGetApp()-&gt;LoadIcon(IDR_MAINFRAME);
		m_szP4 = &quot;test for p4&quot;;
		m_szInput1= &quot;test for input1&quot;;
		m_iInput2 = 101;
	}

在CPP文件中的void CmydhtmlDlg::DoDataExchange(CDataExchange* pDX)函數中添加代碼:
void CmydhtmlDlg::DoDataExchange(CDataExchange* pDX)
{
	CDHtmlDialog::DoDataExchange(pDX);
	//// for html ddx
	DDX_DHtml_ElementInnerHtml(pDX,"p4",m_szP4); //對應 p4
	DDX_DHtml_ElementValue(pDX,"input1",m_szInput1); //對應 input1
	DDX_DHtml_ElementValue(pDX,"input2",m_iInput2); //對應 input2
}
使用是與CDialog一樣利用UpdateData。
HRESULT CmydhtmlDlg::OnButtonTest4(IHTMLElement* /*pElement*/)
{
	UpdateData();
	TRACE("p4=%s\n",m_szP4);
	CString szTemp=m_szP4;
	m_szP4 =m_szInput1;
	m_szInput1=szTemp; //對換p4和input1中內容
	m_iInput2 ++; //將input2中數字加一
	UpdateData(FALSE);
	return S_OK;
}

</pre>
<div align="center">
  <p><a name=step4 id="step4"></a><strong>一個簡單的例子</strong> </p>
  <p align="left">最后介紹一下如何利用VC7創建一個利用CDHtmlDialog的工程。</p>
  <p align="left">首先創建工程,進行如下設置:<br>
    <img src=create_prj.gif><br>
    在資源管理中修改HTML文件:<br>
    <img src=edit_html.gif><br>
    最后添加自己的代碼。我提供的例子中所使用的函數在上面都已經提到。大家可以下載這份<a href=html_dialog.zip>例子</a>去進行一定的參考</p>
  <p align="right">&nbsp;</p>
  <p align="right">&nbsp;</p>
  <p align="right">聞怡洋 2002-09-10</p>
  <p align="right">wyy_cq@copathway.com </p>
  <p align="right"><a href="http://www.vchelp.net/">http://www.vchelp.net/</a></p>
  <p align="left"></p>
  </div>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
极品销魂美女一区二区三区| 国产精品久久久久久妇女6080| 成人av电影免费观看| 久久精品国产77777蜜臀| 天天射综合影视| 亚洲午夜一区二区三区| 一区二区不卡在线播放| 一区二区免费在线播放| 亚洲黄色小说网站| 一区二区三区四区不卡视频| 亚洲自拍另类综合| 亚洲一区在线播放| 亚洲电影一区二区三区| 五月天欧美精品| 轻轻草成人在线| 极品少妇一区二区三区精品视频 | 99久久精品情趣| 成人午夜电影久久影院| 不卡电影一区二区三区| 99久久精品国产一区| 色综合一区二区三区| 色综合欧美在线| 99精品视频一区二区| 日本韩国视频一区二区| 欧美日韩国产一级片| 91精品国产色综合久久ai换脸| 日韩女优电影在线观看| 久久网站热最新地址| 亚洲天堂精品视频| 亚洲一区二区综合| 免费成人性网站| 99久久伊人精品| 日韩视频一区在线观看| 国产情人综合久久777777| 亚洲精品国产一区二区精华液| 日韩av中文字幕一区二区| 久久国产婷婷国产香蕉| 不卡在线视频中文字幕| 欧美日本视频在线| 国产精品三级电影| 无吗不卡中文字幕| 成人妖精视频yjsp地址| 欧美在线免费观看亚洲| 久久综合久色欧美综合狠狠| 一区二区三区日韩欧美精品| 韩国一区二区三区| 在线欧美日韩精品| 久久精品一区二区三区四区| 午夜欧美2019年伦理| 成人av电影在线观看| 日韩欧美卡一卡二| 一区二区三区 在线观看视频| 国产福利电影一区二区三区| 欧美一区二区日韩| 亚洲摸摸操操av| 国产精品99久久久久久似苏梦涵| 欧美丝袜丝nylons| 欧美国产欧美综合| 久久精品噜噜噜成人av农村| 欧美日韩成人综合天天影院| 椎名由奈av一区二区三区| 久久99精品久久只有精品| 欧美日韩免费不卡视频一区二区三区| 国产精品久线在线观看| 久草在线在线精品观看| 欧美美女bb生活片| 一二三四社区欧美黄| 成人免费的视频| 国产午夜精品久久| 久久精品国产一区二区| 日韩一区和二区| 日本强好片久久久久久aaa| 欧美三级在线播放| 亚洲国产综合在线| 91黄色激情网站| 一区二区三区免费在线观看| 91麻豆视频网站| 亚洲国产精品传媒在线观看| 国产不卡视频一区二区三区| 欧美国产视频在线| 成人av网站在线| 亚洲美女一区二区三区| 91在线视频播放地址| 亚洲欧美一区二区三区孕妇| 91一区一区三区| 中文字幕欧美一| 色老汉av一区二区三区| 一区二区三区欧美日韩| 欧美色区777第一页| 无码av中文一区二区三区桃花岛| 欧美精品丝袜久久久中文字幕| 日韩高清不卡一区| 日韩欧美国产麻豆| 国产一区二区三区四区五区入口| 久久先锋影音av鲁色资源| 国产精品99久久久久久似苏梦涵| 中文字幕综合网| 777午夜精品视频在线播放| 久久99久久精品欧美| 国产精品网曝门| 欧美性猛交一区二区三区精品| 日韩中文字幕亚洲一区二区va在线| 欧美tickle裸体挠脚心vk| 国产美女视频一区| 亚洲欧美精品午睡沙发| 欧美日韩国产精选| 久久国产精品一区二区| 亚洲欧美综合另类在线卡通| 欧美区视频在线观看| 九九视频精品免费| 自拍偷拍欧美精品| 欧美一二三区精品| 91蜜桃传媒精品久久久一区二区| 日日骚欧美日韩| 国产日韩av一区二区| 精品视频全国免费看| 国产精品一区二区在线观看不卡| 亚洲欧美另类小说视频| 欧美精品一区在线观看| 色哟哟亚洲精品| 国产一区二区三区在线观看免费| 一区二区三区精品久久久| 亚洲精品一区二区三区福利 | 一本色道**综合亚洲精品蜜桃冫 | www.久久精品| 日本伊人色综合网| 国产精品电影一区二区| 日韩美女视频在线| 色婷婷香蕉在线一区二区| 国产精品911| 蜜桃一区二区三区四区| 亚洲日穴在线视频| 久久久久久97三级| 91麻豆精品国产91久久久使用方法 | 亚洲美女在线国产| 久久网这里都是精品| 欧美一区二区三区色| 色综合天天综合狠狠| 岛国一区二区在线观看| 激情六月婷婷久久| 日本视频中文字幕一区二区三区| 亚洲精品日产精品乱码不卡| 日本一区二区免费在线| 2024国产精品| 精品久久久久久综合日本欧美| 欧美高清hd18日本| 欧美午夜精品一区二区蜜桃| 日本乱人伦aⅴ精品| 成人深夜在线观看| 国产精品99久久久久久宅男| 国产一区二区女| 狠狠久久亚洲欧美| 精品一区二区日韩| 久久精品国产**网站演员| 美女被吸乳得到大胸91| 日产欧产美韩系列久久99| 日韩高清不卡一区二区三区| 麻豆一区二区三区| 丝瓜av网站精品一区二区| 五月天亚洲婷婷| 蜜臀av一区二区在线免费观看| 久久国产精品72免费观看| 精品制服美女久久| 国产精品一二三四五| 国产寡妇亲子伦一区二区| 成人av网站在线| 欧美在线播放高清精品| 欧美午夜精品一区| 欧美一级免费大片| 精品福利av导航| 国产精品热久久久久夜色精品三区| 国产欧美视频一区二区| 日本一区二区动态图| 亚洲美女淫视频| 视频一区欧美精品| 国产一区二区三区香蕉 | 亚洲在线观看免费| 亚洲h在线观看| 久久国产精品99精品国产| 国产精品亚洲成人| 成人av资源站| 制服丝袜国产精品| 久久精品夜夜夜夜久久| 亚洲天堂久久久久久久| 蜜臂av日日欢夜夜爽一区| 国产精品自产自拍| 91麻豆产精品久久久久久| 884aa四虎影成人精品一区| 国产午夜精品一区二区三区嫩草 | 国产精品女同一区二区三区| 亚洲狠狠丁香婷婷综合久久久| 日本一不卡视频| 99精品一区二区三区| 91精品国产综合久久精品麻豆 | 亚洲欧美电影院| 免费观看一级特黄欧美大片| 菠萝蜜视频在线观看一区| 欧美人与性动xxxx| 中文字幕中文乱码欧美一区二区| 免费av成人在线|