C++ 代码

多种手机平台开发-----让我们跟苹果一起红起来。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

HTMLVIEW 控件消息

Posted on 2010-01-27 15:45  蔡清华  阅读(204)  评论(0编辑  收藏  举报

浏览器内核消息

客户发送一条,URL

NM_HTMLVIEW *pnmHTMLView

收到的通知顺序

消息号

pnmHTMLView->szTarget

pnmHTMLView->szData

pnmHTMLView->szExInfo

 

NM_BEFORENAVIGATE  

URL

0

0

 

NM_NAVIGATECOMPLETE

URL

0

0

 

NM_INLINE_IMAGE

图片的相对地址

0

0

 

NM_DOCUMENTCOMPLETE

URL

0

0

 

 

 

 

 

 

 

 

 

 

 

 

点击超链接

消息号

pnmHTMLView->szTarget

pnmHTMLView->szData

pnmHTMLView->szExInfo

 

NM_HOTSPOT  

Target 标签内容

0

0

 

NM_BEFORENAVIGATE

URL

0

0

 

NM_NAVIGATECOMPLETE

URL

0

0

 

NM_INLINE_IMAGE

图片的相对地址

0

0

 

NM_DOCUMENTCOMPLETE

URL

0

0

 

 

 

 

 

 

 

 

 

 

 

此时亦需要通 过访问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_HOTSPOTNM_INLINE_IMAGE消息,需要返回TUREFALSE,不然控件本身会再处理一遍。