在某些特殊的应用场合,我们很想要一个类似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,不然控件本身会再处理一遍。
相关推荐
2. **初始化控件**:在HTML或者对应的视图模板中创建mobileSelect元素,并通过JavaScript或C#代码对其进行初始化配置。 3. **设置数据源**:根据需求将数据绑定到控件,可以是静态数据或动态获取的数据。 4. **...
对于Web开发,Windows Mobile支持使用标准的Web技术,如HTML、CSS和JavaScript,但更高级的功能可以通过ASP.NET 2.0来实现。 ASP.NET 2.0是.NET Framework的一部分,它为Web应用开发提供了强大的工具集。在移动环境...
由于Windows Mobile不支持原生的WebBrowser控件加载外部JavaScript库,我们可能需要使用第三方控件或者自定义控件来实现。例如,可以使用.NET Compact Framework中的WebBrowser控件,或者寻找专门为Windows Mobile...
Windows Mobile 6基于Windows Mobile 5.0开发,版本号为5.2,其内核依然使用Windows CE 5.0,并未采用最新的Windows CE 6.0。相较于前代产品,Windows Mobile 6主要引入了以下重要更新: - **支持HTML格式的邮件**...
尽管移动Web 具有一定的优势(如无需安装即可使用),但在Windows Mobile 设备上开发移动Web 应用面临着许多挑战: 1. **屏幕尺寸**:移动设备屏幕较小,需要特别设计用户界面。 2. **网络连接**:移动设备的网络...
根据给定文件的信息,我们可以提炼出一系列关于Windows Mobile实例开发的知识点,重点在于Windows Mobile下的Win32 API应用。以下是对这些知识点的详细介绍: ### 一、开发环境搭建 **概述**: - Windows Mobile...
**Windows Mobile 2nd 开发黄金周(3): 使用ASP.NET 2.0控制移动Web应用程序用户界面和外观设计** 在移动设备上开发应用程序时,优化用户体验和视觉设计至关重要。Windows Mobile平台为开发者提供了丰富的工具和技术...
在本文中,我们将深入探讨如何使用Win32 API进行Windows/Windows Mobile平台上的网络编程,以构建一个简单的网络浏览器作为示例。这个教程主要关注如何利用Microsoft的Win32 Internet函数来实现这一目标,这些函数...
- **Windows Mobile Web**:Windows Mobile操作系统曾是移动市场的重要玩家之一。开发针对该平台的应用程序时,需特别关注其特性和限制。 - **MISC平台**:随着移动通信市场的快速发展,运营商和服务提供商不断...
**jQuery 移动端触屏滑动...在项目中使用Mobiscroll时间控件,首先需要引入相关的CSS和JS文件。通常,你可以通过CDN链接或者下载压缩包到本地来引入。在HTML文件中,你需要在`<head>`标签内添加如下代码: ```html ...
通过使用System.Web.UI.MobileControls命名空间下的控件,如MobilePage和MobileControl,开发者可以轻松地创建自适应布局,这些布局会根据设备的特性和浏览器能力动态调整。例如,`<mobile:Form>` 和 `<mobile:Label...
ASP.NET 2.0中的移动Web控件集成了对多种手机和PDA设备的支持,包括基本的HTML控件以及针对特定设备的优化控件。 移动Web应用程序开发的关键在于适应性。ASP.NET 2.0通过Mobile Device Capabilities(设备特性)类...
在**C#**中封装**jQuery Mobile Controls**是为了更好地适应服务器端编程的需求,使.NET开发者能够更方便地在ASP.NET或Windows Phone等平台上使用jQuery Mobile的功能。C#封装通常涉及到创建自定义控件,这些控件在...
这是windows mobile 手机编程实例一书 目录: MAPI.................................................................................................................................23 线程事件同步..........
3. **可触摸的控件(Touchable Elements)**:jQuery Mobile提供了一系列触摸友好的控件,如滑块(slider)、开关(toggle switch)、下拉菜单(select menu)等,它们都经过优化,能够响应触摸事件。 4. **网格...
- **Microsoft® ASP.NET移动控件**:这些控件专为移动设备设计,它们能够自动调整页面元素的大小、布局和外观,以适应不同的屏幕尺寸和分辨率。 - **ASP.NET 2.0移动特色**:包括了对多种设备和浏览器组合的支持,...
本章节将主要介绍如何在VS2008平台上使用控件,特别是ASP.NET应用中的控件使用方法。 ##### 2.2 控件选择与使用 控件是构成用户界面的基本元素,它们可以实现数据展示、用户输入收集等功能。在VS2008中,控件的...