Home

Application Online Help

 

Providing Help 

 

Introduction

Providing help is one of the most neglected areas of development, especially for beginning programmers. There are various reasons to this. Some programmers tend to think that help is such a small job that it should be left to non-programmers. This has never been a valid argument since the person who creates an application knows it better than anybody. This means that asking someone else to create help for an application would only slow the process because the other person would need to have new and more information about the application. Another reason is that, most programmers who want to take care of programming when creating an application think that they are working double to create a single program. This drives them to set this aspect aside and continue only with the application, thinking that they can come back to taking care of help when the application is complete. What makes this unrealistic is that, sometimes when they finish the application, they are "tired".

There are various small but effective techniques you can use to provide help in your application: never neglect help.

 

Practical LearningPractical Learning: Introducing Help

  1. Start a Windows Forms Application named CIC1
  2. In the Properties window, change the form's Text to Clarksville Ice Cream
  3. On the main menu, click Project -> Add Resource
  4. Click Icon and click New
  5. In the Properties window, change its ID to IDI_CIC1 and its file name to cic1.ico
  6. Design as follows:

    Icon Design 32x32
  7. Right-click an empty area in the design section and click New Image Type
  8. Double-click 16x16, 16 colors
  9. Design the 16x16 version of the icon as follows:
     
    Icon Design 16x16
  10. In the Properties window, click the Icon field and click its ellipsis button. Then select the cic1.ico and click Open
  11. Design the form as follows:
     
    Control Name Text Additional Properties
    GroupBox      
    Label   Order Date:  
    DateTimePicker dtpOrderDate   Format: Short
    Label   Order Time:  
    DateTimePicker dtpOrderTime   Format: Time
    ShowUpDown: True
    Label   Flavor:  
    ComboBox cboFlavors   DropDownStyle: DropDownList
    Label   Container:  
    ComboBox cboContainers   DropDownStyle: DropDownList
    Label   Ingredient:  
    ComboBox cboIngredients   DropDownStyle: DropDownList
    Label   Scoops:  
    TextBox txtScoops 1 TextAlign: Right
    Label   Order Total:  
    TextBox txtOrderTotal 0.00 TextAlign: Right
    Button btnCalcTotal Calculate Total  
    Button btnNewOrder New Order  
    Button btnClose Close  
  12. Click the combo box to the right of the Flavor label. Then, in the Properties, click the ellipsis button Ellipsis of Items property and create the list with:
     
    Vanilla
    Cream of Cocoa
    Chocolate Chip
    Cherry Coke
    Butter Pecan
    Chocolate Cookie
    Chunky Butter
    Organic Strawberry
    Chocolate Brownies
    Caramel Au Lait
  13. Click OK
  14. Click the combo box to the right of the Container label. Then, in the Properties, click the ellipsis button Ellipsis of Items property and create the list with:
     
    Cone
    Cup
    Bowl
  15. Click OK
  16. Click the combo box to the right of the Ingredient label. Then, in the Properties, click the ellipsis button Ellipsis of Items property and create the list with:
     
    None
    Peanuts
    Mixed Nuts
    M & M
    Cookies
  17. Click OK
  18. Double-click the Calculate Total button to access its Click event
  19. Implement it as follows:
     
    private: System::Void btnCalcTotal_Click(System::Object *  sender, System::EventArgs *  e)
     {
    	 String *Container;
    	 double PriceContainer  = 0.00,
    	         PriceIngredient = 0.00,
    	         PriceScoops     = 0.00,
    	         OrderTotal      = 0.00;
    	 int SelectedIngredient  = -1,
    		 NumberOfScoops      = 1;
    
    	 // First find out what container the customer requested
    	 Container = this->cboContainers->Text;
    
    	 // The price of a container depends on which one the customer selected
    	 if( Container == "Cone" )
    		 PriceContainer = 0.55;
    	 else if( Container == "Cup" )
    		 PriceContainer = 0.75;
    	 else
    		 PriceContainer = 1.15;
    
    	 // Find out if the customer wants any ingredient at all
    	 SelectedIngredient = this->cboIngredients->SelectedIndex;
    
    	 // If the customer selected an ingredient, which is not "None", add $.95
    	 if( SelectedIngredient > 1 )
    		 PriceIngredient = 0.95;
    
    	 try 
    	 {
    		 // Get the number of scoops
    		 NumberOfScoops = this->txtScoops->Text->ToInt32(0);
    
    		 if( NumberOfScoops == 2 )
    			 PriceScoops = 2.55;
    		 else if( NumberOfScoops == 3 )
    			 PriceScoops = 3.25;
    		 else
    			 PriceScoops = 1.85;
    	 }
    	 catch(FormatException *)
    	 {
    		 MessageBox::Show(String::Concat("The value you entered for the scoops is not valid",
                               		             "\nOnly natural numbers such as 1, 2, or 3 are allowed",
    												 "\nPlease try again"));
    	 }
            
    	 // Make sure the user selected a flavor, otherwise, there is no reason to process an order
    	 if( this->cboFlavors->SelectedIndex > 0 )
    		 OrderTotal = PriceScoops + PriceContainer + PriceIngredient;
    
    	 this->txtOrderTotal->Text = OrderTotal.ToString("C");
    }
  20. Double-click the New Order button to access its Click event and implement it as follows:
     
    private: System::Void btnNewOrder_Click(System::Object *  sender, System::EventArgs *  e)
    {
    	// If the user clicks New Order, we reset the form with the default values
    	 this->dtpOrderDate->Value = DateTime::Today;
    	 this->dtpOrderTime->Value = DateTime::Now;
    	 this->cboFlavors->SelectedIndex = -1;
    	 this->cboContainers->SelectedIndex = -1;
    	 this->cboIngredients->SelectedIndex = 0;
    	 this->txtScoops->Text = "1";
    	 this->txtOrderTotal->Text = "0.00";
     }
  21. Double-click the Close button and implement its Click event as follows:
     
    private: System::Void btnClose_Click(System::Object *  sender, System::EventArgs *  e)
    {
    	 Close();
    }
  22. Test the application. Here is an example:
     
    OOPS!!!
  23. Close the form and return to Visual Studio
 

Status Bar Messages

One way you can provide simple help consists of displaying short indicative messages on a status bar. To do this, you can first create sections, called panels, on a status bar and then display the necessary messages in the section of your choice. The message can be anything but it should consist of just a few words to fit in its section without going over board.

 

Practical LearningPractical Learning: Helping Through a Status Bar

  1. Display the form and expand its bottom border a little bit
  2. On the Toolbox, click StatusBar and click the bottom section of the form
  3. In the Properties window, set the ShowPanels property to True
  4. To create the sections of the status bar, click the ellipsis button of the Panels field
  5. In the StatusBarPanel Collection Editor, click Add and change the following values:
    Width: 340
    Text: Ready
  6. Click Add and change the following value:
    Width: 60
    Text:
    Delete the text
  7. Click OK
     
  8. In the form, click the dtpOrderDate control, that is, the combo box on the right side of the Order Date label
  9. In the Properties window, click the Events button and double-click MouseMove
  10. Return to the form
  11. In the same way, initiate the MouseMove event of the dtpOrderTime date time picker, the cboFlavors combo box, the cboContainers combo box, the cboIngredients combo box, the txtScoops text box, and the txtOrderTotal text box
  12. Implement the events as follows:
     
    private: System::Void dtpOrderDate_MouseMove(System::Object *  sender, System::Windows::Forms::MouseEventArgs *  e)
    		 {
    			 this->statusBar1->Panels->Item[0]->Text = S"Specify the date this order was processed";
    		 }
    
    private: System::Void dtpOrderTime_MouseMove(System::Object *  sender, System::Windows::Forms::MouseEventArgs *  e)
    		 {
    			 this->statusBar1->Panels->Item[0]->Text = S"Specify the time this order was processed";
    		 }
    
    private: System::Void cboFlavors_MouseMove(System::Object *  sender, System::Windows::Forms::MouseEventArgs *  e)
    		 {
    			 this->statusBar1->Panels->Item[0]->Text = S"Select the customer's desired flavor";
    		 }
    
    private: System::Void cboContainers_MouseMove(System::Object *  sender, System::Windows::Forms::MouseEventArgs *  e)
    {
    	this->statusBar1->Panels->Item[0]->Text = S"Select the type of object that will contain the ice cream";
    }
    
    private: System::Void cboIngredients_MouseMove(System::Object *  sender, System::Windows::Forms::MouseEventArgs *  e)
    		 {
    			 this->statusBar1->Panels->Item[0]->Text = S"Select an ingredient to spice the ice cream";
    		 }
    
    private: System::Void txtScoops_MouseMove(System::Object *  sender, System::Windows::Forms::MouseEventArgs *  e)
    		 {
    			 this->statusBar1->Panels->Item[0]->Text = S"Select the number of scoops to fill the container";
    		 }
    
    private: System::Void txtOrderTotal_MouseMove(System::Object *  sender, System::Windows::Forms::MouseEventArgs *  e)
    		 {
    			 this->statusBar1->Panels->Item[0]->Text = S"This displays the total of the order";
    		 }
  13. Test the application
     
    Messages of the Status Bar
  14. After using it, close the form and return to Visual Studio
 

Tool Tips

A tool tip is a small yellow box that displays a word or a group of words when the user positions the mouse on top of a control:

tool tip example

To create a tool tip system in a Visual Studio application, first add a ToolTip control to a form. After adding a ToolTip control, the form and all controls on it receive a new field in the Properties window. If the new ToolTip control is called ToolTip1, the new field in the Properties window for each control is ToolTip on ToolTip1. To display a tool tip for a control, first click it on the form. Then, in the Properties window, click ToolTip on ToolTip1, and type the desired tool tip.

 

Practical LearningPractical Learning: Adding Tool Tips

  1. To prepare for tool tips, on the Toolbox, click ToolTip and click the form
  2. On the form, click each control and, in the Properties window, set its ToolTip On ToolTip1 property as follows:
     
    Control ToolTip On ToolTip1
    dtpOrderDate Click the arrow to select a date
    dtpOrderTime Click each section, then click one of the arrows to change its value
    cboFlavors Click the arrow to display a list, then select a flavor from the list
    cboContainers Click to display the list of containers and select one
    cboIngedients Display the list of ingredients and make the customer's choice
    txtScoops Enter the number of scoops (1, 2, or 3) to fill the container
    txtOrderTotal This displays the total amount of this order
    btnCalcTotal Click here to calculate the total of the order
    btnNewOrder Click here to reset the form
    btnClose Click here to Close the form
  3. Test the application
     
    Using Tool Tips
  4. Close it and return to Visual Studio
 

Online Help

 

Introduction

Online help is the system of providing help files with an application. Online help is usually available from the main menu through a menu group created under a Help category.

In the past, the techniques to provide or program online help were not always easy. The early implementations of help were created in a system called WinHelp. This required using a Rich Text Format (rtf) file and appropriately formatting it. It is possible that, when folks at Microsoft developed WinHelp, they had only Microsoft Word in mind. It was difficult to get the required file ready if you were using another application such as WordPad or WordPerfect... Creating the help file was not enough. Once the file was ready, it had to be added to the application, and appropriately. This back and forth gymnastic was a great motivation for neglect. As if these difficulties were not enough, or because of these difficulties, Microsoft created another system called HTML Help. This neither solved most problems nor created an easier solution. At this time, this HTML Help is widely used and many companies, such as AutoDesk (AutoCAD) and Macromedia to name just two, have adopted it . Many companies such as Borland, Jasc, just to name two, are still using WinHelp. This indicates that HTML Help didn't solve all problems and was not anonymously adopted.

Because HTML Help is the most supported help system by Microsoft, we will use it. Also, it is easier to use HTML Help in a Microsoft Visual Studio application than to use WinHelp.

 

Practical LearningPractical Learning: Introducing Online Help

  1. To create a new form, on the main menu, click Project -> Add Windows Form...
  2. In the Add New Item dialog box, change the name of the form to Calculation and press Enter
  3. Design the new form as follows:
     
    Clarksville Ice Scream - Difference Calculation
    Control Name Text Additional Properties
    Label   Order Total:  
    TextBox txtOrderTotal 0.00 TextAlign: Right
    Label   Amount Tended:  
    TextBox txtAmountTended 0.00 TextAlign: Right
    Button btnCalculate Calculate  
    Label   Difference:  
    TextBox txtDifference 0.00 TextAlign: Right
    Button btnClose Close  
  4. Double-click both buttons and implement their Click events as follows:
     
    private void btnCalculate_Click(object sender, System.EventArgs e)
    		{
    			decimal TotalOrder,
    				    AmountTended = 0.00M,
    				    Difference;
    
    			// Get the value of the total order. Actually, this value will be provided by the main form
    			TotalOrder = decimal.Parse(this.txtOrderTotal.Text);
    	
    			try 
    			{
    				// The amount tended will be entered by the user
    				AmountTended = decimal.Parse(this.txtAmountTended.Text);
    			}
    			catch(FormatException)
    			{
    				MessageBox.Show("The amount you entered is not valid - Please try again!");
    			}
    
    			// Calculate the difference of both values, assuming that the amount tended is higher
    			Difference = AmountTended - TotalOrder;
    
    			// Display the result in the Difference text box
    			this.txtDifference.Text = Difference.ToString();
    		}
    
    		private void btnClose_Click(object sender, System.EventArgs e)
    		{
    			Close();
    		}
  5. Display the first form (Form1.cs [Design])
  6. Add a new button to the bottom-right side of the form
  7. Change its values in the Properties window as follows:
    Name:    btnDifference
    Text:     Difference
    Enabled: False
    ToolTip on ToolTip1: Click to calculate the amount owed to the customer
  8. Double-click the Calculate Difference button and implement its Click event as follows:
     
    #pragma once
    
    #include "Calculation.h"
    
    namespace CIC1
    {	
    
    		
    		 }
    
    private: System::Void btnDifference_Click(System::Object *  sender, System::EventArgs *  e)
    		 {
    			 // Declare a variable for the Calculation form
    			Calculation *dlgCalculation = new Calculation();
    
    			// Transfer the current value of the Order Total text box from the main form to the other form
    			dlgCalculation->txtOrderTotal->Text = this->txtOrderTotal->Text;
    			// Display the other form
    			dlgCalculation->ShowDialog();
    		 }
    
    };
    }
  9. Change the Click events of the Calculate Total  and the New Order buttons as follows:
     
    private: System::Void btnCalcTotal_Click(System::Object *  sender, System::EventArgs *  e)
    			 {
    				 String *Container;
    				 double PriceContainer  = 0.00,
    				         PriceIngredient = 0.00,
    				         PriceScoops     = 0.00,
    				         OrderTotal      = 0.00;
    				 int SelectedIngredient  = -1,
    					 NumberOfScoops      = 1;
    
    				 // First find out what container the customer requested
    				 Container = this->cboContainers->Text;
    
    				 // The price of a container depends on which one the customer selected
    				 if( Container == S"Cone" )
    					 PriceContainer = 0.55;
    				 else if( Container == S"Cup" )
    					 PriceContainer = 0.75;
    				 else
    					 PriceContainer = 1.15;
    
    				 // Find out if the customer wants any ingredient at all
    				 SelectedIngredient = this->cboIngredients->SelectedIndex;
    
    				 // If the customer selected an ingredient, which is not "None", add $.95
    				 if( SelectedIngredient > 1 )
    					 PriceIngredient = 0.95;
    
    				 try 
    				 {
    					 // Get the number of scoops
    					 NumberOfScoops = this->txtScoops->Text->ToInt32(0);
    
    					 if( NumberOfScoops == 2 )
    						 PriceScoops = 2.55;
    					 else if( NumberOfScoops == 3 )
    						 PriceScoops = 3.25;
    					 else
    						 PriceScoops = 1.85;
    				 }
    				 catch(FormatException *)
    				 {
    					 MessageBox::Show(String::Concat(S"The value you entered for the scoops is not valid",
                                     		             S"\nOnly natural numbers such as 1, 2, or 3 are allowed",
    													 S"\nPlease try again"));
    				 }
            
    				 // Make sure the user selected a flavor, otherwise, there is no reason to process an order
    				 if( this->cboFlavors->SelectedIndex > 0 )
    				 {
    					 OrderTotal = PriceScoops + PriceContainer + PriceIngredient;
    					 this->txtOrderTotal->Text = OrderTotal.ToString();
    					 // Once an order has been processed, the user should be able to calculate the difference
    					 this->btnDifference->Enabled = true;
    				 }
    			 }
    
    private: System::Void btnNewOrder_Click(System::Object *  sender, System::EventArgs *  e)
    		 {
    			 // If the user clicks New Order, we reset the form with the default values
    			 this->dtpOrderDate->Value = DateTime::Today;
    			 this->dtpOrderTime->Value = DateTime::Now;
    			 this->cboFlavors->SelectedIndex = -1;
    			 this->cboContainers->SelectedIndex = -1;
    			 this->cboIngredients->SelectedIndex = 0;
    			 this->txtScoops->Text = S"1";
    			 this->txtOrderTotal->Text = S"0.00";
    			 
    			 // When the customer form is reset, the Difference button should be disabled
    			 this->btnDifference->Enabled = false;
    		 }
  10. Test the application. Here is an example:
     
    Clarksville Ice Scream
  11. After using it, close it and return to Visual Studio
 

The Help Provider

Context-sensitive help allows the user to get local help on a particular control. This works by the user who can first click a control and then press Shift+F1. This displays a yellow box with a word or a group of words:

Microsoft Access - Context-Sensitive Help

This help is easier to provide in a dialog box because a dialog has a feature not available on a form. It consists of adding a button with a question mark and then creating the words that would display eventually. When you create this type of dialog box, the user can click the question marked button and click a control. The user can also press Shift+F1. This causes the mouse pointer to be equipped with a question mark. The user can then click a control and a yellow box would appear for that control, providing help.


Help

To make it easy to provide online help in a Visual Studio application, the .NET Framework provides the HelpProvider control. After adding this control to the application, the form and all controls on it receive a new property labeled HelpString On HelpProvider1. You can then type the desired string in the field of the Properties window for each control that would display context-sensitive help.

 

Practical LearningPractical Learning: Using Context-Sensitive Help

  1. Display the Calculation form and click an unoccupied area to select the form
  2. Change the following values of the form in the Properties window:
    FormBorderStyle: Fixed Dialog
    HelpButton: True
    MaximizeBox: False
    MinimizeBox: False
    ShowInTaskbar: False
  3. On the Toolbox, click HelpProvider and click the form
     
  4. Using the Properties window, change the following values for the indicated controls:
     
    Control HelpString On HelpProvider1
    txtOrderTotal This is the total amount of the current order
    txtAmountTended This is the amount the customer tended
    btnCalculate Click here to calculate the difference between the amount tended and the total price of the order
    txtDifference This displays the difference between the amount tended and the total of the order
    btnClose Click here to close the dialog box
  5. Execute the application
  6. When it displays, process an order and click the Calculate Difference button
  7. In the Calculation dialog box, click the question mark button in the title bar and click on the text boxes or buttons
     
  8. After using the application, close the forms and return to Visual Studio
  9. Display the main form (Form1.h [Design])
  10. To add a menu to the application, on the Toolbox, click MainMenu and click the form
  11. On the form, click Type Here. Type &File and press the down arrow key
  12. Type E&xit and press Enter
  13. On the right side of File (on the form), click Type Here
  14. Type &Help and press the down arrow key
  15. Type &Contents... and press the down arrow key
  16. Type &Index... and press the down arrow key
  17. Type &Search... and press Enter
     
  18. On the form, click File and double-click Exit
  19. Implement its event as follows:
     
    private: System::Void menuItem2_Click(System::Object *  sender, System::EventArgs *  e)
    		 {
    			 Close();
    		 }
  20. Test the application then close it and return to Visual Studio
 

Introduction to HTML Help

The online help we described above provides only small yellow boxes. It is called context-sensitive because it provides its assistance on only a control of the form. Another technique, in fact highly supported with any commercial program, consists of providing an external application that resembles a book. This allows the user to get more detailed information about almost any aspect of the application. To provide online help in a Visual Studio application, you can use an external system. This consists of creating a complete application whose only purpose is to describe another application. This means that, in the beginning, both applications are not related in any way. With HTML Help, you must first create HTML files. You create these files anyway you like but, in this case, they are meant to provide support for a specific application. Therefore, when creating the files, try to divide them by issues. For example, you can create a file for each form of your application and use that file to describe what the form or dialog box is used for. You still can use any approach to create the files you would need. Experience will guide you eventually into knowing what to put in those files.

After creating the HTML files, you can open HTML Help Workshop which is a complete but separate application. This application is freely available from Microsoft and you can download it from the MSDN web site.

 

Practical LearningPractical Learning: Creating an HTML Help File

  1. Using Windows Explorer or My Computer, create a folder named cis
  2. Inside of the cis folder, create a folder named images
  3. Save the following pictures in the cis\images folder:
     
    Main Form
    Customer Processing Order Form
    Order Form
  4. Start Notepad and create a Cascading Style Sheet file to format the body tag and the main title of the pages. Here is an example:
     
    body
    {
    	font-size: 10pt;
    	color: black;
    	margin-top: 0pt;
    	margin-left: 0pt;
    	font-family: Verdana, Tahoma, Arial, Sans-Serif;
    }
    
    .maintitle
    {
    	font-weight: bold;
    	font-size: 24pt;
    	color: blue;
    	font-family: Garamond, Georgia, 'Times New Roman' , Serif;
    }
  5. Save the file as cis.css in the cis folder
  6. Start another file with the following contents
     
    <html>
    
    <head>
    
    <link rel="stylesheet" type="text/css" href="cis.css">
    
    <title>Overview of Clarksville Ice Cream</title>
    </head>
    
    <body>
    
    <table border="0" width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <td width="100%" align="center"><p class="maintitle">Overview of Clarksville Ice Cream</p></td>
      </tr>
      <tr>
        <td width="100%" bgcolor="#0000FF" height="2"></td>
      </tr>
    </table>
    
    <p>&nbsp;</p>
    <center><img border="0" src="images/main1.gif" alt="The main window of the application" width="424" height="295"></center>
    <p>Clarksville Ice Cream is a computer application used to process customers
    orders. It allows an employee to receive requests from a customer, based on what
    is available in the menu. When the order is complete, an Ice Cream is
    &quot;prepared&quot; and handed to the customer. As a commercial business, the
    application calculates the total amount. The amount is read to the customer who
    hands money to the clerk to complete the transaction</p>
    
    </body>
    
    </html>
  7. Save it as introduction.htm
  8. Start another file with the following contents
     
    <html>
    
    <head>
    
    <link rel="stylesheet" type="text/css" href="cis.css">
    
    <title>Customer Order Form</title>
    </head>
    
    <body>
    
    <table border="0" width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <td width="100%" align="center">
          <p class="maintitle">Customer Order Form</p>
        </td>
      </tr>
      <tr>
        <td width="100%" bgcolor="#0000FF" height="2"></td>
      </tr>
    </table>
    
    <p>&nbsp;</p>
    <p>The main or opening window of this application displays a form used to
    process customers orders. The top section of the form, also called the title
    bar, is equipped with a menu called the main menu. this menu allows the user to
    start a new order or to close the application. To use this main menu, you can
    click one of the top-level words such as File. This causes the menu category of
    your choice to expand:</p>
    <center><img border="0" src="images/main2.gif" alt="The main menu" width="424" height="295"></center>
    <p>After using a menu item, you can click it or click somewhere else to collapse
    it.</p>
    
    <p>The other objects on the main form allow the user to process an order by
    selecting items from the Windows controls. Once an order is ready, the user can
    click the Calculate Total button. This evaluates the total price of the order
    and displays it in the text box on the right side of Order Total.</p>
    
    <p>To start a new customer order, the user can click the New Order button. This
    resets all controls on the form:</p>
    
    <center><img border="0" src="images/main3.gif" alt="Customer Form Reset" width="424" height="295"></center>
    
    <p>When an order has been calculated, the user can click the Calculate
    Difference button to evaluate the diffence.</p>
    
    </body>
    
    </html>
  9. Save it as mainform.htm
  10. Start another file with the following contents
     
    <html>
    
    <head>
    
    <link rel="stylesheet" type="text/css" href="cis.css">
    
    <title>Difference Calculation</title>
    </head>
    
    <body>
    
    <table border="0" width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <td width="100%" align="center">
          <p class="maintitle">Difference Calculation</p>
        </td>
      </tr>
      <tr>
        <td width="100%" bgcolor="#0000FF" height="2"></td>
      </tr>
    </table>
    
    <p>&nbsp;</p>
    <p>The Calculation dialog box allows a user to easily calculate the amount of
    money owed to a customer. After a customer has placed an order and given money
    to the clerk, the user can display this dialog box. When it comes up, the top
    text box of this window already displays the amount of the customer's order. The
    user can then simply enter the amount the customer gave in the Amount Tended
    text box. Then the user can click Calculate</p>
    <center><img border="0" src="images/calculation1.gif" width="304" height="152"></center>
    <p>When the user has clicked the Calculate button, it calculates the difference
    and displays it in the Difference text box. After using this dialog box, the
    user can close it by clicking Close.</p>
    <p>&nbsp;</p>
    
    </body>
    
    </html>
  11. Save it as calculation.htm
  12. Start another file with the following contents
     
    <html>
    
    <head>
    
    <title>Clarksville Ice Cream - Home</title></head>
    
    <body>
    <h1>Clarksville Ice Cream</h1>
    <p><a href="introduction.htm">Introduction</a></p>
    <p><a href="mainform.htm">The Main Form</a></p>
    <p><a href="calculation.htm">The Difference Calculation Dialog Box</a></p>
    </body>
    
    </html>
  13. Save it as index.htm
  14. Start HTML Help Workshop
  15. On the main menu of HTML Help Workshop, click File -> New
     
    HTML Help Workshop - New
  16. In the New dialog box, make sure Project is selected and click OK
     
    New Project Wizard - First Page
  17. In the first page of the New Project wizard, click Next
     
    New Project - Destination
  18. In the second page of the wizard, click Browse
  19. Locate the cis folder you created and display it in the Save In combo box
  20. Set the File Name to cisoh
     
    The Open Dialog Box
  21. Click Open
     
    New Project - Destination
  22. In the second page, click Next
     
    New Project - Existing Files
  23. In the third page, read the text. Click the HTML files (.htm) check box and click Next
  24. In the fourth page, click Add
  25. In the Open dialog box, press and hold Ctrl. Then click each htm file to select them all
     
    The Open Dialog Box - Selecting the HTML files
  26. Click Open
     
  27. In the fourth page, click Next
  28. In the last page of the wizard, click Finish
  29. In HTML Help Workshop, click the Contents tab
    In the dialog box that displays, make sure the first radio button is selected
     
    Table of Contents - Dialog Box
  30. Click OK
  31. In the Save As dialog box, change the name of the file to CISContents
     
    Save As
  32. Click Save
  33. Click the Insert a Heading button Insert a Heading
  34. In the Table Of Contents Entry dialog box, in the Entry Title text box, type Clarksville Ice Cream and click Add
  35. In the Path Or URL dialog box, select the Clarksville Ice Cream - Home and click OK

     
    Table of Contents Entry
  36. Click OK
  37. Click the Insert A Page button Insert A Page
  38. In the message box that displays, click No
  39. In the Entry Title text box, type Introduction and click Add
  40. In the Path Or URL dialog box, select the Overview of Clarksville Ice Cream and click OK
     
    Table Of Contents Entry - New File
  41. In the Table Of Contents Entry dialog box, click OK
  42. In the same way, create new pages under the Introduction heading using the following table
     
    New Page Title Page or URL
    Customer Order Form Customer Order Form
    Difference Calculation Difference Calculation
  43. In HTML Help Workshop, click the Index tab. In the dialog box that comes up, make sure the top radio button is selected
     
    Index Not Specified
  44. Click OK
  45. Set the name of the file to CISIndex and press Enter
  46. Click Insert A Keyword Insert A Keyword
  47. In the Keyword text box, type Calculation and click Add
  48. In the Path Or URL dialog box, click Difference Calculation and click OK twice
  49. In the same way, create new keywords using the following table (sometimes you may receive a message box asking whether you want to create the keyword above the other; it doesn't matter, for this exercise, whether you click Yes or No):
     
    New Keyword Page or URL
    amount Difference Calculation
    money Difference Calculation
    customer Difference Calculation
    order Difference Calculation
    clerk Difference Calculation
    window Difference Calculation
    Amount Tended Difference Calculation
    Calculate Difference Calculation
    Close Difference Calculation
    computer Overview of Clarksville Ice Cream
    Application Overview of Clarksville Ice Cream
    employee Overview of Clarksville Ice Cream
    menu Overview of Clarksville Ice Cream
    commercial Overview of Clarksville Ice Cream
    business Overview of Clarksville Ice Cream
    transaction Overview of Clarksville Ice Cream
    Main Menu Customer Order Form
    category Customer Order Form
    choice Customer Order Form
  50. Click the Sort Keywords Alphabetically button
     
  51. Click the Project tab
  52. Click the Add/Modify Window Definitions button Add/Modify Window Definitions
  53. Set the name to MainWnd and press Enter
  54. Set the Title Bar Text to Clarksville Ice Cream
  55. Click the Buttons tab then click the Home and the Locate check boxes

    Window Types - Buttons
  56. Click the Position tab
  57. Set the Width to 800 and the Height to 600
     
  58. Click the Files tab
  59. Set the Default and the Home choices to index.htm
     
  60. Click the Navigation Pane tab
  61. Click the Search Tab check box
     
  62. Click OK
     
  63. When the Resolve Window Definition wizard comes up, in the first page, make sure the window defined previously is selected in the Window Type combo box. Click the Compile Full-Text Information check box
     
    Resolve Window Definition - Finish
  64. Click Next
  65. In the second page, accept the defaults and click Next
  66. In the third page, accept the default and click Finish
  67. To create the help file, click the Save All Files And Compile button Save All Files And Compile
 

HTML Help and Visual Studio Applications

After creating the HTML Help application, you can use a HelpProvider control to connect it to your application. The HelpProvider control is equipped wit the HelpNamespace provider. This property allows you to specify the application that contains the help application. Besides the HelpNamespace property, the HelpProvider control provides various methods to manage help.

HTML Help can be provided to a Visual Studio application through the Help class. The overloaded ShowHelp() method is used to specify the help file to display and possibly additional information. Notice that all versions take a first argument as a Control type. This is the parent control from where the online help will be provided.

The first version allows you specify the help file. It can be the help file specified in the HelpProvider.HelpNamespace property mentioned above.

The second and the fourth versions allow you to specify the tab of the HTML Help window to display when the method is called. This is done through the HelpNavigator enumerator that has a value for each tab of the HTML Help window. the fourth version can be used to open the HTML Help window from its Find tab and specify a keyword to search for.

The third version can be used to open a help file based on a keyword.

The ShowHelpIndex() method can be used to open the Index tab of the HTML Help window.

 

Practical LearningPractical Learning: Providing Online Help to an Application

  1. Open Windows Explorer or My Computer
  2. In the cis folder, copy the cisoh.chm file to the clipboard and paste it in the folder of the current project (CIS1)
  3. Display the main form
  4. On the Toolbox, click HelpProvider and click the form
  5. In the Properties window, change its Name to cisHelp and click HelpNamespace
  6. Click the ellipsis button of the HelpNamespace property
  7. From the CIS1 folder of the current project, select the cisoh.chm file
     
    Open Help File
  8. Click Open
  9. On the main menu of the form, click Help and double-click Contents
  10. Implement the event as follows:
     
    private: System::Void menuItem4_Click(System::Object *  sender, System::EventArgs *  e)
    		 {
    			 Help::ShowHelp(this, this->cisHelp->HelpNamespace);
    		 }
  11. Display the main form. On the main menu of the form, double-click Index
  12. Implement the event as follows:
     
    private: System::Void menuItem5_Click(System::Object *  sender, System::EventArgs *  e)
    		 {
    			 Help::ShowHelpIndex(this, this->cisHelp->HelpNamespace);
    		 }
  13. Display the main form. On the main menu of the form, double-click Search
  14. Implement the event as follows:
     
    Private Sub MenuItem6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem6.Click
            Help.ShowHelp(Me, Me.cisHelp.HelpNamespace, HelpNavigator.Find, "")
    End Sub
  15. Test the application. When it displays, click the Help menu of the form and click one of the menu items
     
    HTML Help
  16. After using it, close the online help window, close the form, and return to Visual Studio
  ™

Home Copyright © 2004-2006 FunctionX, Inc.