home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / help.pak / HELP.CPP next >
C/C++ Source or Header  |  1997-07-23  |  4KB  |  172 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1991, 1993 by Borland International
  3. //
  4. //
  5. // This is an example of an application which implements context
  6. // sensitive help for menu choices.  To use the application, hit
  7. // F1 when a menu item is highlighted.  The program checks for F1
  8. // being down in the WM_ENTERIDLE message.  If it is down, it sets
  9. // a flag and simulates the selection of the menu item.  The help
  10. // is then shown in the command message for that menu item.
  11. // When the command is received, we just check to see if the flag
  12. // has been set which indicates that the user wants help on the command.
  13. //----------------------------------------------------------------------------
  14. #include <owl\owlpch.h>
  15. #include <owl\applicat.h>
  16. #include <owl\framewin.h>
  17. #include <owl\dc.h>
  18. #include "help.rh"
  19. #include <string.h>
  20.  
  21. static char HelpFile[] = "HELP.HLP";
  22.  
  23. class TOwlHelpWnd : public TFrameWindow {
  24.   public:
  25.     TOwlHelpWnd(const char* title);
  26.  
  27.     void EvPaint();
  28.     void EvEnterIdle(UINT source, HWND hWndDlg);
  29.     void CmMenuItemA();
  30.     void CmMenuItemB();
  31.     void CmExit();
  32.     void CmHelpIndex();
  33.     void CmHelpHelp();
  34.     void CmHelpAbout();
  35.  
  36.   private:
  37.     BOOL F1Pressed;
  38.     
  39.   DECLARE_RESPONSE_TABLE(TOwlHelpWnd);
  40. };
  41.  
  42. DEFINE_RESPONSE_TABLE1(TOwlHelpWnd, TWindow)
  43.   EV_WM_PAINT,
  44.   EV_WM_ENTERIDLE,
  45.   EV_COMMAND(CM_MENUITEMA, CmMenuItemA),
  46.   EV_COMMAND(CM_MENUITEMB, CmMenuItemB),
  47.   EV_COMMAND(CM_EXIT, CmExit),
  48.   EV_COMMAND(CM_HELPINDEX, CmHelpIndex),
  49.   EV_COMMAND(CM_HELPHELP, CmHelpHelp),
  50.   EV_COMMAND(CM_HELPABOUT, CmHelpAbout),
  51. END_RESPONSE_TABLE;
  52.  
  53.  
  54. const char ClientAreaText[] =
  55.   "To Get help, press F1 while a menu item is highlighted.  WinHelp will be "
  56.   "called to show help on that topic.  If help is not shown, it is because "
  57.   "the mouse button is pressed.  Release the mouse button to see help.";
  58.  
  59.  
  60. TOwlHelpWnd::TOwlHelpWnd(const char* title)
  61.   : TFrameWindow(0, title), 
  62.     TWindow(0, title)
  63. {
  64.   F1Pressed = FALSE;
  65.   AssignMenu(OWLHELPAPMENU);        // menu resID needs to be duped
  66.   Attr.AccelTable = OWLHELPAPACCEL; // AccelTable can be assigned
  67. }
  68.  
  69. void
  70. TOwlHelpWnd::EvPaint()
  71. {
  72.   TPaintDC paintDC(HWindow);
  73.   
  74.   TRect rectClient;
  75.   GetClientRect(rectClient);
  76.   rectClient.Inflate(-rectClient.right, -rectClient.bottom);
  77.   paintDC.SetBkMode(TRANSPARENT);
  78.   paintDC.DrawText(ClientAreaText, strlen(ClientAreaText),
  79.                    rectClient, DT_CENTER | DT_VCENTER | DT_WORDBREAK);
  80. }
  81.  
  82. void
  83. TOwlHelpWnd::EvEnterIdle(UINT source, HWND)
  84. {
  85.   // if the keystate high bit is set, then the key is pressed
  86.   if (source == MSGF_MENU && (::GetKeyState(VK_F1) & 0x8000)) {
  87.     F1Pressed = TRUE;
  88.     PostMessage(WM_KEYDOWN, VK_RETURN);
  89.  
  90.   } else
  91.     DefaultProcessing();
  92. }
  93.  
  94. void
  95. TOwlHelpWnd::CmMenuItemA()
  96. {
  97.   if (F1Pressed) {
  98.     WinHelp(HelpFile, HELP_CONTEXT, HELP_MENUITEMA);
  99.     F1Pressed = FALSE;
  100.  
  101.   } else {
  102.     MessageBox("In Menu Item A command", Title, MB_ICONINFORMATION);
  103.   }
  104. }
  105.  
  106. void
  107. TOwlHelpWnd::CmMenuItemB()
  108. {
  109.   if (F1Pressed) {
  110.     WinHelp(HelpFile, HELP_CONTEXT, HELP_MENUITEMB);
  111.     F1Pressed = FALSE;
  112.  
  113.   } else {
  114.     MessageBox("In Menu Item B Command", Title, MB_ICONINFORMATION);
  115.   }
  116. }
  117.  
  118. void
  119. TOwlHelpWnd::CmExit()
  120. {
  121.   if (F1Pressed) {
  122.     WinHelp(HelpFile, HELP_CONTEXT, HELP_EXIT);
  123.     F1Pressed = FALSE;
  124.  
  125.   } else {
  126.     TWindow::CmExit();
  127.   }
  128. }
  129.  
  130. void
  131. TOwlHelpWnd::CmHelpIndex()
  132. {
  133.   WinHelp(HelpFile, HELP_INDEX, 0);
  134. }
  135.  
  136. void
  137. TOwlHelpWnd::CmHelpHelp()
  138. {
  139.   WinHelp(HelpFile, HELP_HELPONHELP, 0);
  140. }
  141.  
  142. void
  143. TOwlHelpWnd::CmHelpAbout()
  144. {
  145.   MessageBox("HELP\nWritten using ObjectWindows\n"
  146.              "Copyright (c) 1991, 1993 Borland",
  147.              "About Help", MB_ICONINFORMATION);
  148. }
  149.  
  150.  
  151. class TOwlHelpApp : public TApplication {
  152.   public:
  153.     TOwlHelpApp() : TApplication() {}
  154.     void InitInstance() {   
  155.       TApplication::InitInstance();
  156.       HAccTable = LoadAccelerators(OWLHELPAPACCEL);
  157.     }
  158.     void InitMainWindow();
  159. };
  160.  
  161. void
  162. TOwlHelpApp::InitMainWindow()
  163. {
  164.   MainWindow = new TOwlHelpWnd("OWL Help Example");
  165. }
  166.  
  167. int
  168. OwlMain(int /*argc*/, char* /*argv*/ [])
  169. {
  170.   return TOwlHelpApp().Run();
  171. }
  172.