Windows Mobile下使用HTML控件

2016-02-19 19:24 9 1 收藏

下面是个超简单的Windows Mobile下使用HTML控件教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - Web开发 】

  在某些特殊的应用场合,我们很想要一个类似IE功能的模块,定制自己的功能。

  HTML控件现在向我们张开了怀抱。稍稍奇怪的是,它并不完全支持WAP协议。看来,IE还是做了自己的解析。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  首先,我们要注册一下控件。把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型成员变量。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  然后,在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,不然控件本身会再处理一遍。

来源:http://www.tulaoshi.com/n/20160219/1620905.html

延伸阅读
constructor TZFPlayCard.Create(AOwner: TComponent);?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> var   x, y: integer; begin   inherited Create(AOwner);   FCardId := 1;   cdtInit(x, y);   SetBounds(0, 0, x, y);   ControlStyle...
使用CommonDialog控件 CommonDialog控件提供诸如打开和保存文件、设置打印选项、选择颜色和字体等操作的一组标准对话框。运行Windows帮助引擎时,控件还能够显示帮助。 CommonDialog控件在VisualBasic和MicrosoftWindows动态连接库Commdlg.dll例程之间提供了接口。为了用该控件创建对话框,必须要求Commdlg.dll在Microsof...
草木瓜 一、提要     ProC是Oracle数据库提供的开发接口,支持多种语言。ProC虽然调试维护起来十分不便,但是依靠其结构化清晰的嵌入式SQL,也成为了C/C++语言访问控制数据库的常用方式。     本文首先介绍Windows平台下,使用Visual C++ 6.0 和 Visual C++ .Net配置ProC的开发环境。 二、数据库环境 &...
使用 DataGrid 控件 DataGrid 控件是一种类似于电子数据表的绑定控件,可以显示一系列行和列来表示 Recordset 对象的记录和字段。可以使用 DataGrid 来创建一个允许最终用户阅读和写入到绝大多数数据库的应用程序。DataGrid 控件可以在设计时快速进行配置,只需少量代码或无需代码。当在设计时设置了DataGrid 控件的 DataSource 属性...
按钮控件的使用 作者:杜修杏 下载本文示例代码 最近有不少朋友发信到我的邮箱,其中有高手也有菜鸟,也许他们问的问题我还不能一一解答,但是他们的来信的确让我感受到极大的鼓舞。今天忙里偷闲,翻译了一片外国的文章,献给那些摸索中的菜鸟们。 下面将通过一个最简单的程序来说明Windows的...

经验教程

359

收藏

95
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部