分享
 
 
 

在mfc编程中创建web风格的图形用户界面(四)

王朝other·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

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资源这个步骤还是需要重新进行一下的)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有