`
guowee
  • 浏览: 179137 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Developing in C++ with the HTML Viewer Control

阅读更多

[转载自MSDN:http://msdn.microsoft.com/en-us/library/ms838684.aspx]

Microsoft Internet Explorer for the Pocket PC lets you browse the wireless Web and view offline Web files. However the HTML Viewer Control gives these abilities and more to any application.

Applies to:
   Microsoft Windows Powered Pocket PC 2000
   Microsoft eMbedded Visual C++ version 3.0
   VOImage classes (optional) available for free from Virtual Office Systems, Inc
   GIF, JPG, and other types of files

Languages Supported
English

Creating the HTML Viewer Control

Before you can create a control you need a project with a main window. The following steps walk you through creating both your project and the HTML Viewer Control.

  1. From the Microsoft eMbedded Visual C++ 3.0 menu, select File and then select New .
  2. Select Projects and then, from the list of available project types, select WCE Pocket PC Application .
  3. In the Project Name edit control box, enter HTMLControl and click OK to start the project wizard.
  4. Select A Typical 'Hello World!' Application and then click Finish .
  5. In the confirmation dialog box, click OK to generate the source files. You now have a buildable project.
  6. From the Target Platform drop-down list box, select Win32 (WCE x86em) Debug , as shown in Figure 1. (This can also be done by selecting Build and then Set Active Configuration from the menu and selecting the desired target platform.)

    Figure 1: Select the target platform.

  7. Add the following code (the lines of code you need to add are in red, the other lines are there for reference only) near the top of the HTMLCONTROL.CPP file:
    #include <sipapi.h>
    #include <htmlctrl.h>
     
    #define IDC_HTMLVIEW     10 
    #define MAX_LOADSTRING   100
    
  8. Add the following global variable at the top of the HTMLCONTROL.CPP file:
    HWND     hwndCB; // The command bar handle
    HWND     hwndHTML;      // HTML Control
     
    static SHACTIVATEINFO s_sai;
    
  1. Add the following function at the end of the HTMLCONTROL.CPP file:
    HWND CreateHTMLControl(HWND hwndParent)
    {
        RECT rc;
        DWORD dwStyle = WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_CLIPSIBLINGS;
     
        if(!InitHTMLControl( hInst ))
            MessageBox(hwndParent, TEXT("Unable to initialize HTML control"), 
                TEXT("Error"), MB_OK);
     
        GetClientRect (hwndParent, &rc);
     
        return CreateWindow (DISPLAYCLASS, NULL, dwStyle, rc.left, rc.top, 
                 rc.right - rc.left, rc.bottom - rc.top, hwndParent, 
                 (HMENU)IDC_HTMLVIEW, hInst, NULL);
    }
    
  2. Call the CreateHTMLControl() function after the call to CreateRpCommandBar () in the WM_CREATE processing code, and pass the hWnd of the application window as the hwndParent parameter. Your WM_CREATE code should now look like this (new code is in red):
    case WM_CREATE:
        hwndCB = CreateRpCommandBar(hWnd);
        hwndHTML = CreateHTMLControl(hWnd);
        SetFocus (hwndHTML);
        break;
    
  3. Add the following code to the message switch of the WndProc() function (this will cause the HTML control to resize any time the parent window is resized):
    case WM_SIZE:
        if(IsWindow(hwndHTML))
            SetWindowPos(hwndHTML, 0, 0, 0, LOWORD(lParam), 
                HIWORD(lParam) - MENU_HEIGHT, 
                SWP_NOZORDER | SWP_NOMOVE);
        break;
    

Populating the HTML Viewer Control

Before populating the list control with HTML code, you should decide if you want to work with Unicode or single-byte text. Depending on which one you choose, you will send either the DTM_ADDTEXT or the DTM_ADDTEXTW message to the control. The one you use determines the format of text parameters in notification messages sent from the control to your application. I'll assume you want to use Unicode, because that is the default character set for most Pocket PC character strings.

To set the contents of the HTML Viewer Control, you need to:

  1. First clear the contents of the HTML Viewer Control by sending it a WM_SETTEXT message and an empty string.
  2. Send the HTML code to the HTML Viewer Control in one or more DTM_ADDTEXTW messages.
  3. Send the HTML Viewer Control a DTM_ENDOFSOURCE message.

The HTML code can come from a file, your code, or the Internet. To keep it simple, let's just generate the code in your sample project. Add the following code to your WM_CREATE message handler, after the SetFocus() line and before the break (the optional DTM_ENABLESHRINK message tells the control to attempt to fit the contents of the HTML page to the control width if possible):

BOOL    fFitToPage = TRUE;
PostMessage(hwndHTML, DTM_ENABLESHRINK, 0, fFitToPage);
 
SendMessage(hwndHTML, WM_SETTEXT, 0, (LPARAM)"");
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("<HTML><TITLE>Test</TITLE>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("<BODY><P>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("<h1>Heading</h1>Normal Text<BR>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("<A HREF=\"www.voscorp.com\"><IMG SRC=\"\\Pic.gif\"></A>"));
SendMessage(hwndHTML, DTM_ADDTEXTW, FALSE, (LPARAM)TEXT("</BODY></HTML>"));
SendMessage(hwndHTML, DTM_ENDOFSOURCE, 0, (LPARAM)NULL);

You will now have a control that contains the text (including the header style) from your HTML code, but if you run the application at this point you will notice that the image (\PIC.GIF ) is not displayed (as shown in Figure 2). To display images, your application needs to load the images in response to a notification event from the HTML Viewer Control.

Figure 2: HTML View Control without images.

Processing HTML Viewer Control Events

There are several notification messages from the HTML Viewer Control that you may wish to process. If you have no need for images, you may choose not to process the NM_INLINE_IMAGE message. Likewise, you may not want to process sounds, so you may choose not to process the NM_INLINE_SOUND message. Of course, anything you choose not to process will not be available to your users via the control.

To avoid having the (rather lengthy) code to handle the loading of GIF, JPG, BMP, and other code using IMGDECMP, this code assumes you are using the free VOImage class libraries from Virtual Office Systems, Inc to do the dirty work. To add image processing to your code, follow these steps:

  1. Add IMGDECMP.LIB to your list of library files to link to by selecting Project , then Settings , and then Link from the menu.

    Note that SHLoadImageFile and SHLoadImageResource should be used for Windows Mobile-based devices.

  2. Select All Configurations from the drop-down list box, and add IMGDECMP.LIB to the Object/Library Modules edit box.
  3. Add the VOIMAGE.CPP and VOIMAGE.H files to your project by selecting Project , then Add to Project , and then Files from the menu.
  4. Add a global CVOImage class variable to the HTMLCONTROL.CPP file like this:
    HWND             hwndHTML;               // HTML Control
    CVOImage          img;          // Interface to IMGDECMP.DLL
     
    static SHACTIVATEINFO s_sai;
    
  5. Add a WM_NOTIFY message to your window message procedure like this:
    case WM_NOTIFY:
        switch(wParam) 
        {
            case IDC_HTMLVIEW:
            {
                NM_HTMLVIEW* pnm = (NM_HTMLVIEW*)lParam;
      
            switch(pnm->hdr.code) 
            {
                case NM_INLINE_IMAGE:
                {
                    HDC dc = GetDC(hWnd);
                    if(img.Load(dc, pnm->szTarget))
                    {
                        INLINEIMAGEINFO      imgInfo;
                        imgInfo.dwCookie = pnm->dwCookie;
                        imgInfo.iOrigHeight = img.GetHeight();
                        imgInfo.iOrigWidth = img.GetWidth();
                        imgInfo.hbm = img.Copy();    
                        imgInfo.bOwnBitmap = FALSE;
                        SendMessage(hwndHTML, DTM_SETIMAGE, 0, 
                             (LPARAM)&imgInfo);   
                    }
                    else
                        SendMessage(hwndHTML, DTM_IMAGEFAIL, 0, 
                                pnm->dwCookie);
                    ReleaseDC(hWnd, dc);
                    break;
                    } // end case NM_INLINE_IMAGE:
                } // end switch(pnm->hdr.code)
            } // End case IDC_HTMLVIEW:
        } // End switch(wParam)
    break;
    

    Note that we pass a copy of the HBITMAP to the DTM_SETIMAGE message by using the Copy() method of the VOImage object and setting bOwnBitmap to TRUE. This allows us to reuse the same VOImage object for multiple image files, and instructs the control to clean up the HBITMAP objects we have passed to it instead of relying on the calling code to do the cleanup.

  6. As desired, add case handlers for the NM_INLINE_SOUND message, NM_HOTSPOT (received when the user clicks on an HTML link), and any other HTML Viewer Control notification message type. You may want to process the NM_HOTSPOT message, displaying different HTML code depending on what was clicked.

Conclusion

The HTML Viewer Control allows you to include the rich interfaces to your application that users are used to seeing in Web browsers. What you do with the control is of course up to you, but as you can see in Figure 3, you can have quite an impressive interface with very little coding.

Figure 3: HTML View Control with images.

 

分享到:
评论

相关推荐

    EurekaLog_7.5.0.0_Enterprise

    5)....Added: Exception2HRESULT in EAppDLL to simplify developing DLLs with "DLL" profile 6)....Added: Use ShellExecute option for mailto send method 7)....Added: "Mandatory e-mail only when sending" ...

    Visual C++ 编程资源大全(英文源码 系统)

    demo.zip Some simple functions for system stats(34KB)&lt;END&gt;&lt;br&gt;34,SysEvent.zip WindowsNT Event Log Viewer(59KB)&lt;END&gt;&lt;br&gt;35,SysMangr.zip This article presents a comprehensive system control ...

    vxworks_kernel_programmers_guide_6.9

    System Viewer Instrumentation Support ...................................................... 17 Real-Time Process Support .................................................................................

    基于springboot框架的毕业设计系统的开发(完整Java源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip

    在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对学生毕业设计信息管理的提升,也为了对学生毕业设计信息进行更好的维护,毕业设计系统的出现就变得水到渠成不可缺少。通过对毕业设计系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 毕业设计系统通过MySQL数据库与Spring Boot框架进行开发,毕业设计系统能够实现教师管理,公告类型管理,班级管理,课题信息管理,任务类型管理,选题申请管理,学院管理,课题任务管理,最终成绩管理,公告信息管理,学生管理等功能。 通过毕业设计系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源

    hegaojian_WanAndroid_1742851819.zip

    hegaojian_WanAndroid_1742851819.zip

    《基于YOLOv8的违章停车识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    使用matlab基于卷积神经网络实现的汉语短句语音识别,输出拼音( 我正在学torch,这个已停止更.zip

    毕业设计

    移动开发_iOS_OpenUrl_快捷方式创建技术_App桌_1742856949.zip

    移动开发_iOS_OpenUrl_快捷方式创建技术_App桌_1742856949.zip

    《基于YOLOv8的体育发展识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    uappkit_uapp_1742847088.zip

    app开发

    蓝桥杯python相关资源

    蓝桥杯python相关资源

    招聘_实时聊天_APP_React_Redux_前后端分离_1742854279.zip

    招聘_实时聊天_APP_React_Redux_前后端分离_1742854279.zip

    《基于YOLOv8的玩具产品分析系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    vscode1.98.1版本,适用于macos

    vsco1.98.1版本,适用于macos

    《基于YOLOv8的体育产业监测系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    Kotlin_基础篇教程_函数与类实践_开发参考_1742851889.zip

    Kotlin_基础篇教程_函数与类实践_开发参考_1742851889.zip

    电子发票统计并生成表格

    电子发票统计并生成表格

    IIS重写IIS rewirte的插件ARR(Application Request Routing) Microsoft Application Request Routing 3.0 (x64)

    网上很多都是IIS7的教程ARR,对IIS10来说已经无效了。这个是最新的插件IIS重写IIS rewirte的插件ARR(Application Request Routing)

    linux相关课程学习笔记

    linux系统相关知识、shell编程相关知识、虚拟机安装及配置

    毕业设计神器!最新学生成绩管理系统源码(thinkphp6 框架),让你的毕设轻松出彩

    还在为毕业设计选题纠结?这款基于 thinkphp6 框架 开发的学生成绩管理系统源码,前端采用 X - adminV2.2,功能完备、结构清晰,完美适配毕业设计需求,助你在答辩中脱颖而出! 功能全面,轻松应对毕设考核 全流程管理模块:覆盖系统信息设置、单位信息管理、类别管理,以及学期、班级、学科等基础配置,更有管理员、权限、角色管理,完整呈现系统设计与实现的深度。 智能化成绩处理:支持考试信息自定义,灵活设置学科分数线;一键生成考试号、试卷标签、成绩采集表。多样化成绩录入(在线、表格、扫码枪)、实时查看成绩列表与图表,统计结果以柱形图、折线图、雷达图等形式展示,搭配学生历次成绩对比(表格 + 折线图),充分展现数据处理与分析能力。 精细化权限设计:区分教师、学生双身份登录,按职务、任务分工细化数据权限,体现系统安全性与合理性,为毕设增添专业亮点。 三大核心优势,锁定高分 极简操作,演示无忧:界面简洁直观,操作流程优化至 “三步到位”,答辩演示流畅自然,轻松征服导师。 热门技术栈,学习轻松:基于流行的 thinkphp6 框架,前端 X - adminV2.2,前后端分离。

Global site tag (gtag.js) - Google Analytics