在某些特殊的应用场合,我们很想要一个类似IE功能的模块,定制自己的功能。
HTML控件现在向我们张开了怀抱。稍稍奇怪的是,它并不完全支持WAP协议。看来,IE还是做了自己的解析。
首先,我们要注册一下控件。把Htmlctrl.h包含进来,调用InitHTMLControl()函数,里面的参数为应用程序句柄。以下代码在MFC中使用:
VERIFY(InitHTMLControl(AfxGetInstanceHandle()));
DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS;
RECT rect;
GetClientRect(&rect);
m_hHtmlWnd = ::CreateWindow (DISPLAYCLASS,
NULL,
dwStyle,
rect.left,
rect.top,
rect.right,
rect.bottom,
m_hWnd,
0,
::AfxGetInstanceHandle(),
NULL);
::SetWindowLong(m_hHtmlWnd, GWL_ID, 12321);
::SetFocus(m_hHtmlWnd);
::SendMessage(m_hHtmlWnd, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)_T(""));
在这里,m_hHtmlWnd是某个Dialog的HWND型成员变量。
然后,在Dialog的WindowProc函数中,使用如下方法:
switch(message)
{
case WM_NOTIFY:
{
WCHAR wszURL[1000] = {0};
NM_HTMLVIEW* pnmHTMLView = (NM_HTMLVIEW*)lParam;
switch (pnmHTMLView->hdr.code)
{
case NM_HOTSPOT://点击Url
break;
case NM_DOCUMENTCOMPLETE://文档显示结束
break;
case NM_INLINE_IMAGE://显示图片
return TRUE;
}
}
break;
default:
break;
}
在上面的几个关键点,NM_HOTSPOT是用户点击了网页链接,通过访问pnmHTMLView->szTarget可以得到网页内容。SendMessage可以将得到的内容赋给控件,控件会自己解析网页元素。如果有图片链接,将会触发NM_INLINE_IMAGE动作。此时亦需要通过访问pnmHTMLView->szTarget来得到图片。如果得到了图片的内容,可以使用下面的代码来显示:
INLINEIMAGEINFO imageInfo;
imageInfo.dwCookie = pnmHTMLView->dwCookie;
imageInfo.bOwnBitmap = FALSE;
imageInfo.hbm = hBitmap;
BITMAP mInfo;
GetObject(hBitmap, sizeof(BITMAP), (LPBYTE)&mInfo);
imageInfo.iOrigWidth = mInfo.bmWidth;
imageInfo.iOrigHeight = mInfo.bmHeight;
::SendMessage(pnmHTMLView->hdr.hwndFrom, DTM_SETIMAGE, 0, (LPARAM)(INLINEIMAGEINFO*)&imageInfo);
上面代码中hBitmap为图片位图句柄。
我在处理图片的时候,遇到的问题是。使用SHLoadImageFile函数后,需使用DeleteObject函数释放句柄内存。否则将有内存泄露。MSDN没有提及这一现象。
如果未得到图片内容,想在网页相应的位置显示一个叉,DTM_SETIMAGE参数应改为DTM_IMAGEFAIL。
值得注意的是,如果我们处理了NM_HOTSPOT或NM_INLINE_IMAGE消息,需要返回TURE或FALSE,不然控件本身会再处理一遍。
相关推荐
windows mobile 第三方控件,WM开发的神器
windows mobile 图片展示控件windows mobile 图片展示控件windows mobile 图片展示控件windows mobile 图片展示控件windows mobile 图片展示控件windows mobile 图片展示控件windows mobile 图片展示控件windows ...
两个例子,两种实现方式实现windows mobile下的透明控件。
WINCE和windowsmobile的背景透明控件 为dll文件,直接添加引用即可
平台:windows mobile 实现思想:在树型控件中加入背景图,此背景图为树型控件所在窗口的背景图的一部分.这样看起来树型控件就透明了. 解决了各种情况下的背景重叠,错位闪硕等问题,是一个完整的ctreectrl类
windows mobile动画按钮,.net cf写的
当前Windows mobile下的皮肤控件还很少,而且实现透明的更加少。本人曾经在Delphi开发过一套透明控件,于是决定把它移植到windows mobile系统下。在仿真器上和三星I718+上测试过,更换皮肤速度优化得相当快了,在...
业内同仁都知道吧 不用解释了吧!windows mobile 透明控件渐变色 很有用很常用哦
windows Mobile下的WindowsMediaPlayer 自定义控件(控件为dll)以及加载控件的事例代码,只需要1行代码即可播放wmv视频~(适用于smartphone和Pocket PC)
非常漂亮的Windows Mobile 进度条控件
windows mobile下面的透明控件应用范例,可以供大家选择自己想要的透明控件。
本人使用Windows Mobile 6操作系统下的多普达P660进行了上位机的编程。现在将调试程序说一下。 使用VS2005进行开发。 控件有3个button,两个TextBox,两个Label和一个SerialPort等。button1打开串口,button2将...
windows mobile手機調整控件位置程式庫
windowsmobile6常用控件的用法,以及特殊效果的实现 也包括实现应用程序打包过程的讲解,图文齐全。
Windows Mobile自定义控件ImageButton以及该控件如何调用.
Windows Mobile怎样使用命令行CMD工具说明,支持Windows Mobile 6.0 6.5,WinCE 5.0 6.0 7.0.
WINCE和Windows Mobile上的透明控件(DLL文件,不是源码,VS2005中直接导入C# 的ToolBox即可使用,无需编译源码),图片按钮,图片标签,支持窗体背景图。
mobile明控件源码实例,供大家学习参考。
WindowsMobile5 源码WindowsMobile5 源码WindowsMobile5 源码WindowsMobile5 源码