浏览器内核消息
客户发送一条,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_HOTSPOT或NM_INLINE_IMAGE消息,需要返回TURE或FALSE,不然控件本身会再处理一遍。