home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / tybc4 / rwmenu2.cpp < prev    next >
C/C++ Source or Header  |  1997-07-29  |  4KB  |  160 lines

  1. /*
  2.   Program which uses alternate menus with minimal response
  3. */
  4.  
  5. #include <owl\applicat.h>
  6. #include <owl\framewin.h>
  7. #include "rwmenu2.h"
  8.  
  9. // declare the custom application class as
  10. // a subclass of TApplication
  11. class TWinApp : public TApplication
  12. {
  13. public:
  14.   TWinApp() : TApplication() {}
  15.  
  16. protected:
  17.   virtual void InitMainWindow();
  18. };
  19.  
  20. // expand the functionality of TWindow by deriving class TMainWindow
  21. class TMainWindow : public TWindow
  22. {
  23.  public:
  24.    TMainWindow()
  25.      : TWindow(0, 0, 0)
  26.      { LongMenuSelected = TRUE; }
  27.  
  28.  protected:
  29.  
  30.    BOOL LongMenuSelected;
  31.  
  32.    // handle clicking the left mouse button
  33.    void EvLButtonDown(UINT, TPoint&);
  34.  
  35.    // handle clicking the right mouse button
  36.    void EvRButtonDown(UINT, TPoint&);
  37.  
  38.    // handle the long menu
  39.    void CMLongMenu();
  40.  
  41.    // handle the short menu
  42.    void CMShortMenu();
  43.  
  44.    // handle the help menu
  45.     void CMHelp();
  46.  
  47.    // handle the Edit Copy menu
  48.    void CMEditCopy();
  49.  
  50.    // handle the Edit Cut menu
  51.    void CMEditCut();
  52.  
  53.    // handle the Edit Paste
  54.    void CMEditPaste();
  55.  
  56.    // display a message "Feature not implemented"
  57.    void notImplemented();
  58.  
  59.    // handle confirming closing the window
  60.    virtual BOOL CanClose();
  61.  
  62.    // declare the response table
  63.    DECLARE_RESPONSE_TABLE(TMainWindow);
  64.  
  65. };
  66.  
  67. DEFINE_RESPONSE_TABLE1(TMainWindow, TWindow)
  68.   EV_WM_LBUTTONDOWN,
  69.   EV_WM_RBUTTONDOWN,
  70.   EV_COMMAND(CM_LONGMENU, CMLongMenu),
  71.   EV_COMMAND(CM_SHORTMENU, CMShortMenu),
  72.   EV_COMMAND(CM_HELP, CMHelp),
  73.   EV_COMMAND(CM_EDITCOPY, CMEditCopy),
  74.   EV_COMMAND(CM_EDITCUT, CMEditCut),
  75.   EV_COMMAND(CM_EDITPASTE, CMEditPaste),
  76. END_RESPONSE_TABLE;
  77.  
  78. void TMainWindow::EvLButtonDown(UINT, TPoint&)
  79. {
  80.   MessageBox("You clicked the left mouse!", "Mouse Event",
  81.              MB_OK | MB_ICONEXCLAMATION);
  82. }
  83.  
  84. void TMainWindow::EvRButtonDown(UINT, TPoint&)
  85. {
  86.   if (LongMenuSelected)
  87.     CMShortMenu();
  88.   else
  89.     CMLongMenu();
  90. }
  91.  
  92. void TMainWindow::CMLongMenu()
  93. {
  94.   GetApplication()->MainWindow->AssignMenu(TResId(LONGMENU));
  95.   GetApplication()->MainWindow->Attr.AccelTable = TResId(LONGMENU);
  96.   LongMenuSelected = TRUE;
  97.   MessageBox("The long menu is now active", "Menu Change",
  98.           MB_OK | MB_ICONINFORMATION);
  99. }
  100.  
  101. // assign the short menu
  102. void TMainWindow::CMShortMenu()
  103. {
  104.   GetApplication()->MainWindow->AssignMenu(TResId(SHORTMENU));
  105.   GetApplication()->MainWindow->Attr.AccelTable = TResId(SHORTMENU);
  106.   LongMenuSelected = FALSE;
  107.   MessageBox("The short menu is now active", "Menu Change",
  108.           MB_OK | MB_ICONINFORMATION);}
  109.  
  110. void TMainWindow::CMEditCut()
  111. {
  112.   notImplemented();
  113. }
  114.  
  115. void TMainWindow::CMEditCopy()
  116. {
  117.   notImplemented();
  118. }
  119.  
  120. void TMainWindow::CMEditPaste()
  121. {
  122.   notImplemented();
  123. }
  124.  
  125. void TMainWindow::CMHelp()
  126. {
  127.   MessageBox(
  128.     "This a sample one line help (that leaves more to be desired)",
  129.     "Help", MB_OK | MB_ICONINFORMATION);
  130. }
  131.  
  132. void TMainWindow::notImplemented()
  133. {
  134.   MessageBox("This feature is not implemented",
  135.           "Information", MB_OK | MB_ICONEXCLAMATION);
  136. }
  137.  
  138. BOOL TMainWindow::CanClose()
  139. {
  140.   return MessageBox("Want to close this application?",
  141.              "Query", MB_YESNO | MB_ICONQUESTION) == IDYES;
  142. }
  143.  
  144. void TWinApp::InitMainWindow()
  145. {
  146.   MainWindow = new TFrameWindow(0,
  147.                 "Alternate Menus Demo Program (version 2)",
  148.                 new TMainWindow);
  149.   // load the menu resource
  150.   MainWindow->AssignMenu(TResId(LONGMENU));
  151.   MainWindow->Attr.AccelTable = TResId(LONGMENU);
  152. }
  153.  
  154. int OwlMain(int /* argc */, char** /*argv[] */)
  155. {
  156.   TWinApp app;
  157.   return app.Run();
  158. }
  159.  
  160.