Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

DLLs are Simple! Part 4

0.00/5 (No votes)
17 Mar 2005 1  
This article describes how to create a Resource-Only DLL and how to using it for creating multimedia applications.

Sample Image - pic.gif

Introduction

As you know, creating multimedia applications with special effect like sound, animation, web-link and so on is time-consuming. But there is a method that is rapid and engaging.

Method is : Using Resource-Only DLL.

A resource-only DLL is a DLL that contains nothing but resources, such as icons, bitmaps, strings, and dialog boxes.

What is necessary?

  1. An HTML file composed of image, sound, GIF animation, link,...
  2. Bring the HTML file and all its needed files together in a folder.

Note: In your HTML file, create two buttons with links "exit" and "execute" like below :

<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>

How to create a Resource-Only DLL?

  1. Run VC++.
  2. Click New on the File menu and then choose MFC AppWizard (dll); name it "ResOnly"
  3. Click finish button in next step.
  4. In ResourceView tab right-click on the root branch.
  5. Choose the Import... command.
  6. Import your HTML file; note only the HTML file.
  7. Click Save All on the File menu and then close VC++.
  8. Go to the folder that contains HTML file and all its needed files and copy all files to VC++ project folder (ResOnly).
  9. In ResOnly project folder find .rc file and open it with notepad; point to HTML section. Now convert:
    "IDR_HTML1     HTML     DISCARDABLE     "Skin.htm"
    TO :
    "Skin.htm         HTML     DISCARDABLE     "Skin.htm"

    Then add all needed files for imported HTML just below it:

    /////////////////////
    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. Save and close notepad and open VC++ Project (ResOnly). Press Build button. Now you have a DLL containing resources; in fact, it is the "Resource-Only DLL".

How to use created Resource-Only DLL in multimedia App?

  1. Run VC++.
  2. Choose New on the File menu and then choose MFC AppWizard (exe).
  3. In step1 dialogbox, select Single document and press next button till step6. Now you choose CHtmlView as Base Class; then press Finish button.
  4. Open CHtmlView derived class; in my project "CShowcaseView".
  5. In OnInitialUpdate() member function, instead of default parameter of Navigate2 type give:
    res:// [Resource-Only Dll Name] // [Html file name]

    e.g. : res://ResOnly.dll//Skin.htm

    What is OnInitialUpdate()?

    This member function is called by the framework after the view is first attached to the document, but before the view is initially displayed. Here you call Navigate2 function and force view for representing Skin.htm file. By "res:", you can refer to an HTML page embedded in the resources of a dynamic-link library (.dll) file. It is a protocol like "http:".

  6. In ClassView panel, right-click on the C...View (e.g. CShowcaseView) and select Add Virtual Function... command.
  7. In related dialogbox choose OnBeforeNavigate2 and press Add and Edit button. OnBeforeNavigate2 member function is called by the framework to cause an event to fire before a navigation occurs in the web browser. By this function, we can lead web browser to the URL we want.

    OnBeforeNavigate2 have some parameters. First of all is target URL to navigate to, and end of all is a pointer to a cancel flag; an application can set this parameter to nonzero to cancel the navigation operation.

  8. Type the below code snippet after TODO comment:
    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.");
     }

It is clear, it tests URL. If the last segment was "exit", it would have terminated program; but it was "execute"; it does something that you want.

Now it is ready. If you act correctly, that must be like my demo exe file.

Thankfully greet guru Paul DiLascia.

Don't remember to visit my website www.pishro-narmafzar.com

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here