利用IE组件进行界面编程
2006-09-15 22:00
549 查看
在codeproject看到一些利用IE组件实现的类和界面,虽然对IE的控制有着许多不爽的地方,但界面看起来的确灵活生动了不少。
我试着写了个CDHtmlDialog的继承类,参考了itreesoft的代码。总结如下:
=========================================================
#define DHTML_EVENT_TAG_ALL(dispid, memberFxn)/
{ DHTMLEVENTMAPENTRY_TAG, dispid, _T("a"), (DHEVTFUNCCONTROL) (DHEVTFUNC) theClass::memberFxn },/
{ DHTMLEVENTMAPENTRY_TAG, dispid, _T("body"), (DHEVTFUNCCONTROL) (DHEVTFUNC) theClass::memberFxn },/
{ DHTMLEVENTMAPENTRY_TAG, dispid, _T("html"), (DHEVTFUNCCONTROL) (DHEVTFUNC) theClass::memberFxn },/
{ DHTMLEVENTMAPENTRY_TAG, dispid, _T("input"), (DHEVTFUNCCONTROL) (DHEVTFUNC) theClass::memberFxn },/
{ DHTMLEVENTMAPENTRY_TAG, dispid, _T("textarea"), (DHEVTFUNCCONTROL) (DHEVTFUNC) theClass::memberFxn },/
//省略对其他tag的处理
//////////////////////////////////////////////////////////////////////////
// 屏蔽下列动作,可以在继承类的 BEGIN_DHTML_EVENT_MAP
// 和 END_DHTML_EVENT_MAP之间放入下列宏
//屏蔽所有招牌的IE动作
#define DHTML_EVENT_CLOSE_IE_EVENT() /
DHTML_EVENT_TAG_ALL(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART, OnHtmlSelectStart ) /
DHTML_EVENT_TAG_ALL(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART, OnHtmlDragStart ) /
DHTML_EVENT_TAG_ALL(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU, OnHtmlContextMenu ) /
DHTML_EVENT_TAG_ALL(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, OnHtmlMouseMove ) /
============================================================
屏蔽的函数处理均类似
HRESULT CDHtmlDlgSpec::OnHtmlContextMenu(IHTMLElement* pElement)
{
HRESULT hr=S_FALSE;
VARIANT_BOOL vbEdit=VARIANT_FALSE;
CComBSTR bsTagName;
hr = pElement->get_tagName(&bsTagName);
if( SUCCEEDED(hr) )
{
//CString sTagName=bsTagName.m_str;
CW2CT szTagName( bsTagName );
CString sMsg;
sMsg.Format("OnHtmlContextMenu <%s>/r/n",szTagName);
OutputDebugString(sMsg);
bsTagName.ToLower();
if(bsTagName=="input" || bsTagName=="textarea")
{
return S_OK;
}
}
//do not pass the event to the IE server/JavaScript
return S_FALSE;
}
看到光标在文字上变成I形状,很不爽,可惜我对com不是很熟悉,可能需要对IHTMLPainterEventInfo::SetCursor 进行处理,希望以后能看到类似的代码。
我试着写了个CDHtmlDialog的继承类,参考了itreesoft的代码。总结如下:
=========================================================
#define DHTML_EVENT_TAG_ALL(dispid, memberFxn)/
{ DHTMLEVENTMAPENTRY_TAG, dispid, _T("a"), (DHEVTFUNCCONTROL) (DHEVTFUNC) theClass::memberFxn },/
{ DHTMLEVENTMAPENTRY_TAG, dispid, _T("body"), (DHEVTFUNCCONTROL) (DHEVTFUNC) theClass::memberFxn },/
{ DHTMLEVENTMAPENTRY_TAG, dispid, _T("html"), (DHEVTFUNCCONTROL) (DHEVTFUNC) theClass::memberFxn },/
{ DHTMLEVENTMAPENTRY_TAG, dispid, _T("input"), (DHEVTFUNCCONTROL) (DHEVTFUNC) theClass::memberFxn },/
{ DHTMLEVENTMAPENTRY_TAG, dispid, _T("textarea"), (DHEVTFUNCCONTROL) (DHEVTFUNC) theClass::memberFxn },/
//省略对其他tag的处理
//////////////////////////////////////////////////////////////////////////
// 屏蔽下列动作,可以在继承类的 BEGIN_DHTML_EVENT_MAP
// 和 END_DHTML_EVENT_MAP之间放入下列宏
//屏蔽所有招牌的IE动作
#define DHTML_EVENT_CLOSE_IE_EVENT() /
DHTML_EVENT_TAG_ALL(DISPID_HTMLELEMENTEVENTS_ONSELECTSTART, OnHtmlSelectStart ) /
DHTML_EVENT_TAG_ALL(DISPID_HTMLELEMENTEVENTS_ONDRAGSTART, OnHtmlDragStart ) /
DHTML_EVENT_TAG_ALL(DISPID_HTMLELEMENTEVENTS_ONCONTEXTMENU, OnHtmlContextMenu ) /
DHTML_EVENT_TAG_ALL(DISPID_HTMLELEMENTEVENTS_ONMOUSEMOVE, OnHtmlMouseMove ) /
============================================================
屏蔽的函数处理均类似
HRESULT CDHtmlDlgSpec::OnHtmlContextMenu(IHTMLElement* pElement)
{
HRESULT hr=S_FALSE;
VARIANT_BOOL vbEdit=VARIANT_FALSE;
CComBSTR bsTagName;
hr = pElement->get_tagName(&bsTagName);
if( SUCCEEDED(hr) )
{
//CString sTagName=bsTagName.m_str;
CW2CT szTagName( bsTagName );
CString sMsg;
sMsg.Format("OnHtmlContextMenu <%s>/r/n",szTagName);
OutputDebugString(sMsg);
bsTagName.ToLower();
if(bsTagName=="input" || bsTagName=="textarea")
{
return S_OK;
}
}
//do not pass the event to the IE server/JavaScript
return S_FALSE;
}
看到光标在文字上变成I形状,很不爽,可惜我对com不是很熟悉,可能需要对IHTMLPainterEventInfo::SetCursor 进行处理,希望以后能看到类似的代码。
相关文章推荐
- Android界面编程之利用单选框和复选框实现对学历和爱好进行选择
- SpringMVC_01 SpringMVC五大组件、SpringMVC编程步骤(不使用注解进行配置)、SpringMVC编程步骤(利用注解进行配置)、参数获取、响应数据
- 利用BackgroundWorker 组件进行异步作业
- 利用Socket进行Java网络编程
- 利用JMF进行多媒体编程
- IE编程2(.net)——通过应用程序打开google并进行搜索
- 02_Android应用界面编程_01_视图(View)组件
- [IE编程] IE中对网页进行截图的编程接口
- iPhone 和 iPad的ios 开发中 利用 WebViewJavascriptBridge组件,通过 UIWebView 对Html进行双向通讯
- Android界面编程——Android布局组件(二)
- 在服务器上使用第三方独立组件对Word/Excel进行编程
- pthread库进行多线程编程 - 组件工厂 - C++博客
- 利用Java技术进行XML编程(续)
- 【笔记】利用java进行xml编程(IBM developerworks )
- 利用 Microsoft .NET Framework 和托管 DirectX .0 进行游戏编程的入门系列文章
- 利用Winsock进行IP通信编程
- Android开发自学笔记(Android Studio)—4.界面编程与View组件简单介绍
- vue 父子组件通信,利用对象进行通信
- Python以文字界面利用pdb进行调试
- 利用LabWindows/CVI进行仪表控制编程示例