在mfc编程中创建web风格的图形用户界面(四)
来源:互联网 发布:红毒蛇 知乎 编辑:程序博客网 时间:2024/04/29 07:47
html窗口事件处理
CHtmlView类中缺少了什么?
典型的程序处理脚本都是假定能够从程序界面的各个元素(比如按钮)中接收到事件或者数据输入。所以在我们的程序中,还需要解决html界面与MFC后台程序的信息交互问题。我们不必头疼,其实这个问题也并不复杂,我们可以利用CHtmlView类中的OnBeforeNavigate2函数把html界面中的事件传递给MFC后台代码进行处理。
在html上同样存在事件这个概念。在dhtml中的可能出现的事件模型数量很多。
html事件的发生可以转化为对window.navigate(%line%)的调用。MFC后台代码可以截获到OnBeforeNavigate2函数以参数%line%调用的消息。用参数%line%我们可以传递任何html上的参数给MFC后台代码,以便于程序处理相关的用户操作。比如说,当用户点击ok按钮的时候该事件会被传递给后台,同时,相应文本框中的内容也会传递给后台。以下是一个实例:
--网页中的代码--
...<SCRIPT LANGUAGE="JScript">function onBtnOk(){ var Txt = txtBox.value; // the line from TextBox window.navigate("app:1005@" + Txt); // "app:1005@" – this is the MFC code command prefix. // Txt – data can be transmitted along with the event.}</SCRIPT>;<BODY>...<input type=text style="width:50" id=txtBox ><input type=BUTTON value="Ok" onClick="onBtnOk()" style="width:45%"> // the button has an event handler – the onBtnOk() script function...</BODY></HTML>
--MFC后台的相应处理代码--
void CHtmlCtrl::OnBeforeNavigate2( LPCTSTR lpszURL, DWORD nFlags, LPCTSTR lpszTargetFrameName, CByteArray& baPostedData, LPCTSTR lpszHeaders, BOOL* pbCancel ){ const char APP_PROTOCOL[] = "app:"; int len = _tcslen(APP_PROTOCOL); if (_tcsnicmp(lpszURL, APP_PROTOCOL, len)==0) { // there is a specific Application’s reaction there. OnAppCmd(lpszURL + len); // Event cancellation, otherwise an error will occur. *pbCancel = TRUE; } CHtmlView::OnBeforeNavigate2(lpszURL, nFlags, lpszTargetFrameName, baPostedData, lpszHeaders, pbCancel);}
因为除了html界面以外,MFC本身也有可能成为事件来源,所以必须有相应的MFC代码能够将数据传递给html界面。为了实现这个要求,我们可以采用一种办法,调用html中的脚本函数,将要传递的数据以参数的方式传递给这些函数。这个好主意是由 Eugene Khodakovsky 提出的。
下面是例子:
void CHtmlCtrl::OnDocumentComplete(LPCTSTR lpszURL) {... HRESULT hr; hr = GetHtmlDocument()->QueryInterface(IID_IHTMLDocument, (void**) &m_pDocument); if (!SUCCEEDED(hr)) { m_pDocument= NULL; return; } IDispatch *disp; m_pDocument->get_Script( &disp); // get script object...}
--用来调用html脚本函数并传递参数的MFC代码--
... CStringArray strArray; strArray.Add("Parameter 1"); strArray.Add("Parameter 2"); strArray.Add("Parameter 3"); // the call of "SetParameters" function // from the script, (passing array of strings) m_HtmlCtrl.CallJScript2("SetParameters", strArray);// inside the CallJScript2 function:// GetIDsOfNames() – get the ID number of the script function// Invoke() – call the script-function by the number ...
html脚本是一个强大而简单易用的工具,整个程序的界面和相应的用户操作响应都可以用它来完成。用这种web风格的界面方式使得编程变得更简单。这种方式将MFC对于用户界面事件的响应和处理转到对html脚本进行处理。html的编写和程序后台的编写分开进行有一个好处:即使改变了html代码,也可以避免对MFC程序代码进行重新编译。(这里需要说明一下,不用重新编译代码,但是link资源这个步骤还是需要重新进行一下的)
- 在mfc编程中创建web风格的图形用户界面(四)
- 在mfc编程中创建web风格的图形用户界面(一)
- 在mfc编程中创建web风格的图形用户界面(二)
- 在mfc编程中创建web风格的图形用户界面(三)
- 在mfc编程中创建web风格的图形用户界面(五)
- 在mfc编程中创建web风格的图形用户界面(一)
- 在mfc编程中创建web风格的图形用户界面(二)
- 在WPF中创建可换肤的用户界面
- 在WPF中创建可换肤的用户界面
- 在WPF中创建可换肤的用户界面
- 在WPF中创建可换肤的用户界面
- 在 WPF 中创建可换肤的用户界面
- 在WPF中创建可换肤的用户界面
- VS2010/MFC入门编程十七(多线程的创建,包括工作线程和用户界面线程)
- MFC中用户界面线程和工作者线程的编程实例
- 图形用户界面 菜单栏、工具栏的创建方法
- Java 图形用户界面 树形菜单的创建
- 在Ubuntu Server 中安装图形用户界面
- 世界杯绝对冠军:中国房地产足球队
- RDBMS代码阅读笔记(一)
- pplive CCTV
- 夏天喝什么茶最好?
- EditPlus,从文本编辑器到IDE
- 在mfc编程中创建web风格的图形用户界面(四)
- 从电影《防火墙》看黑客的社会工程学
- 创建数据库 ORA-12571:TNS:包写入程序失败 错误 解决办法
- IP 冲突
- 蒙牛为什么这么猛?---《蒙牛内幕》读书笔记
- 聪明能干的人,是否应该去创业?
- 《铁齿铜牙》主题曲--- 歌词
- Oracle 数据库安装失败 一般解决办法
- 51.com取得成功还需要3员大将