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?
- An HTML file composed of image, sound, GIF animation, link,...
- 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?
- Run VC++.
- Click New on the File menu and then choose MFC AppWizard (dll); name it "ResOnly"
- Click finish button in next step.
- In ResourceView tab right-click on the root branch.
- Choose the Import... command.
- Import your HTML file; note only the HTML file.
- Click Save All on the File menu and then close VC++.
- Go to the folder that contains HTML file and all its needed files and copy all files to VC++ project folder (ResOnly).
- 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"
////////////////////
- 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?
- Run VC++.
- Choose New on the File menu and then choose MFC AppWizard (exe).
- In step1 dialogbox, select Single document and press next button till step6. Now you choose
CHtmlView
as Base Class; then press Finish button.
- Open
CHtmlView
derived class; in my project "CShowcaseView
".
- In
OnInitialUpdate()
member function, instead of default parameter of Navigate2
type give: res:
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:".
- In ClassView panel, right-click on the C...View (e.g.
CShowcaseView
) and select Add Virtual Function... command.
- 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.
- 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