65.9K
CodeProject 正在变化。 阅读更多。
Home

DLL 非常简单!第四部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.88/5 (77投票s)

2005年3月17日

3分钟阅读

viewsIcon

165080

downloadIcon

4660

本文介绍如何创建仅包含资源的 DLL,以及如何使用它来创建多媒体应用程序。

Sample Image - pic.gif

引言

如您所知,创建具有声音、动画、网络链接等特殊效果的多媒体应用程序非常耗时。 但有一种方法既快速又吸引人。

方法是:使用仅包含资源的 DLL。

仅包含资源的 DLL 是一个只包含资源(例如图标、位图、字符串和对话框)的 DLL。

需要什么?

  1. 一个由图像、声音、GIF 动画、链接等组成的 HTML 文件。
  2. 将 HTML 文件及其所有需要的文件放在一个文件夹中。

注意:在您的 HTML 文件中,创建两个带有链接 "exit" 和 "execute" 的按钮,如下所示

<p><a hidefocuse href="execute">
<img border="0" src="ExecNorm.gif" ALT="This may execute somethings" 
style="cursor: hand; position: absolute; z-index: 1; left: 45; top: 120"
onmouseover="this.src='ExecHot.gif'" onmouseout="this.src='ExecNorm.gif'" 
width="75" height="43" >
</a></p>

如何创建仅包含资源的 DLL?

  1. 运行 VC++。
  2. 单击文件菜单上的新建,然后选择 MFC AppWizard (dll);将其命名为 "ResOnly"
  3. 在下一步中单击完成按钮。
  4. 在 ResourceView 选项卡中,右键单击根分支。
  5. 选择 导入... 命令。
  6. 导入您的 HTML 文件;注意只导入 HTML 文件。
  7. 单击文件菜单上的全部保存,然后关闭 VC++。
  8. 转到包含 HTML 文件及其所有需要文件的文件夹,并将所有文件复制到 VC++ 项目文件夹 (ResOnly)。
  9. ResOnly 项目文件夹中找到 .rc 文件,并用记事本打开它;指向 HTML 部分。 现在转换
    "IDR_HTML1     HTML     DISCARDABLE     "Skin.htm"
    TO :
    "Skin.htm         HTML     DISCARDABLE     "Skin.htm"

    然后将导入的 HTML 所需的所有文件添加到它下面

    /////////////////////
    Skin.htm HTML DISCARDABLE "Skin.htm"
    BG.gif HTML DISCARDABLE "BG.gif"
    c.gif HTML DISCARDABLE "c.gif"
    ExecHot.gif HTML DISCARDABLE "ExecHot.gif"
    ExecNorm.gif HTML DISCARDABLE "ExecNorm.gif"
    ExitHot.gif HTML DISCARDABLE "ExitHot.gif"
    ExitNorm.gif HTML DISCARDABLE "ExitNorm.gif"
    WMPAUD7.WAV HTML DISCARDABLE "WMPAUD7.WAV"
    pupil.gif HTML DISCARDABLE "pupil.gif"
    whites.gif HTML DISCARDABLE "whites.gif"
    ////////////////////
  10. 保存并关闭记事本,然后打开 VC++ 项目 (ResOnly)。 按生成按钮。 现在您有了一个包含资源的 DLL;事实上,它就是“仅包含资源的 DLL”。

如何在多媒体应用程序中使用创建的仅包含资源的 DLL?

  1. 运行 VC++。
  2. 文件菜单上选择新建,然后选择 MFC AppWizard (exe)。
  3. step1 对话框中,选择单文档并按下一步按钮直到 step6。 现在您选择 CHtmlView 作为 基类;然后按完成按钮。
  4. 打开 CHtmlView 派生类;在我的项目中是 "CShowcaseView"。
  5. OnInitialUpdate() 成员函数中,不要给出 Navigate2 类型的默认参数,而是给出
    res:// [Resource-Only Dll Name] // [Html file name]

    例如:res://ResOnly.dll//Skin.htm

    什么是 OnInitialUpdate()

    此成员函数在视图首次附加到文档之后但在视图最初显示之前由框架调用。 在这里,您调用 Navigate2 函数并强制视图表示 Skin.htm 文件。 通过 "res:",您可以引用嵌入在动态链接库 (.dll) 文件资源中的 HTML 页面。 它是一种类似 "http:" 的协议。

  6. 在 ClassView 面板中,右键单击 C...View (例如 CShowcaseView) 并选择 添加虚拟函数... 命令。
  7. 在相关对话框中选择 OnBeforeNavigate2 并按 添加和编辑 按钮。 OnBeforeNavigate2 成员函数由框架调用,以在 Web 浏览器中发生导航之前引发事件。 通过此函数,我们可以引导 Web 浏览器到我们想要的 URL。

    OnBeforeNavigate2 有一些参数。 首先是要导航到的目标 URL,最后是指向取消标志的指针; 应用程序可以将此参数设置为非零值以取消导航操作。

  8. 在 TODO 注释之后键入以下代码片段
    CString url=lpszURL;
    if (url.Right(4) == _T("exit"))
     {
         *pbCancel = TRUE;
         keybd_event( VK_MENU, 0, 0, 0 );
         keybd_event( VK_F4, 0, 0, 0 );
         keybd_event( VK_F4, 0, KEYEVENTF_KEYUP, 0 );
         keybd_event( VK_MENU, 0, KEYEVENTF_KEYUP, 0 );
     }
     else if(url.Right(7) == _T("execute"))
     {
         *pbCancel = TRUE;
         MessageBox("This button could execute some commands.");
     }

很明显,它会测试 URL。 如果最后一段是 "exit",它将终止程序;但如果是 "execute";它会做你想做的事情。

现在它准备好了。 如果你的操作正确,它应该像我的演示 exe 文件一样。

感谢大师 Paul DiLascia。

不要忘记访问我的网站 www.pishro-narmafzar.com

© . All rights reserved.