home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / notify.pak / NOTIFY.CPP < prev    next >
C/C++ Source or Header  |  1997-07-23  |  5KB  |  198 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1991, 1993 by Borland International
  3. //----------------------------------------------------------------------------
  4. #include <owl\owlpch.h>
  5. #include <owl\applicat.h>
  6. #include <owl\button.h>
  7. #include <owl\dialog.h>
  8. #include <owl\framewin.h>
  9. #include <owl\menu.h>
  10. #include "notify.h"
  11. #include <stdio.h>
  12.  
  13. //
  14. // Make a button that beeps when pressed.
  15. //
  16. class TBeepButton : public TButton {
  17.   public:
  18.     TBeepButton(TWindow* parent, int resId) : TButton(parent, resId) {}
  19.  
  20.     // child id notification handled at the child
  21.     //
  22.     void BNClicked();  // BN_CLICKED
  23.  
  24.   DECLARE_RESPONSE_TABLE(TBeepButton);
  25. };
  26.  
  27. DEFINE_RESPONSE_TABLE1(TBeepButton, TButton)
  28.   EV_NOTIFY_AT_CHILD(BN_CLICKED, BNClicked),
  29. END_RESPONSE_TABLE;
  30.  
  31. void
  32. TBeepButton::BNClicked()
  33. {
  34.   MessageBeep(0);
  35.   DefaultProcessing();  // pass it along to parent.
  36. }
  37.  
  38. //
  39. // Button that sends parent it's own notification code.
  40. //
  41. class TTestButton : public TButton {
  42.   public:
  43.  
  44.     static UINT   BN_USER_MSG1;       // notification code.
  45.  
  46.     TTestButton(TWindow* parent, int resId) : TButton(parent, resId) {}
  47.  
  48.     // child id notification handled at the child
  49.     //
  50.     void BNClicked();  // BN_CLICKED
  51.  
  52.   DECLARE_RESPONSE_TABLE(TTestButton);
  53. };
  54.  
  55. DEFINE_RESPONSE_TABLE1(TTestButton, TButton)
  56.   EV_NOTIFY_AT_CHILD(BN_CLICKED, BNClicked),
  57. END_RESPONSE_TABLE;
  58.  
  59. UINT TTestButton::BN_USER_MSG1 = 400;
  60.  
  61. //
  62. // One method of notifying the parent of an event.
  63. //
  64. void
  65. TTestButton::BNClicked()
  66. {
  67.   #if defined(__WIN32__)
  68.     Parent->HandleMessage(WM_COMMAND, MAKEWPARAM(Attr.Id, BN_USER_MSG1),
  69.                           LPARAM(HWindow));
  70.   #else
  71.     Parent->HandleMessage(WM_COMMAND, Attr.Id, MAKELPARAM(HWindow, BN_USER_MSG1));
  72.   #endif
  73. }
  74.  
  75.  
  76. //----------------------------------------------------------------------------
  77.  
  78. class TBeepDialog : public TDialog {
  79.   public:
  80.     int           NumClicks;        // number of times BeepButton was pressed.
  81.     TBeepButton*  BeepButton;       // Different buttons...
  82.     TButton*      Button1;
  83.     TTestButton*  Button2;
  84.     TButton*      Button3;
  85.     TButton*      Button4;
  86.  
  87.     TBeepDialog(TWindow* parent, TResId resId);
  88.  
  89.     void    HandleButtonMsg();      // ID_BUTTON  push button command
  90.     void    HandleButton1();        // ID_BUTTON1 push button command
  91.     void    HandleButton2(WPARAM);  // ID_BUTTON2 push button command
  92.     void    HandleButton3(WPARAM);  // ID_BUTTON3 push button command
  93.     void    HandleButton4();        // ID_BUTTON4 push button command
  94.  
  95.   DECLARE_RESPONSE_TABLE(TBeepDialog);
  96. };
  97.  
  98. DEFINE_RESPONSE_TABLE1(TBeepDialog, TDialog)
  99.   EV_BN_CLICKED(ID_BUTTON, HandleButtonMsg),
  100.   EV_COMMAND(ID_BUTTON4, HandleButton4),
  101.   EV_CHILD_NOTIFY(ID_BUTTON1, BN_CLICKED, HandleButton1),
  102.   EV_CHILD_NOTIFY_AND_CODE(ID_BUTTON2, TTestButton::BN_USER_MSG1, HandleButton2),
  103.   EV_CHILD_NOTIFY_ALL_CODES(ID_BUTTON3, HandleButton3),
  104. END_RESPONSE_TABLE;
  105.  
  106. TBeepDialog::TBeepDialog(TWindow* parent, TResId resId)
  107.   : TDialog(parent, resId),
  108.     TWindow(parent)
  109. {
  110.   NumClicks = 0;
  111.   BeepButton = new TBeepButton(this, ID_BUTTON);
  112.   Button1 = new TButton(this, ID_BUTTON1);
  113.   Button2 = new TTestButton(this, ID_BUTTON2);
  114.   Button3 = new TButton(this, ID_BUTTON3);
  115.   Button4 = new TButton(this, ID_BUTTON4);
  116. }
  117.  
  118. //
  119. // Handle BN_CLICKED from 'BeepButton'.  Display the number of times it has
  120. // been pressed.
  121. //
  122. void
  123. TBeepDialog::HandleButtonMsg()
  124. {
  125.   char  text[6];
  126.   sprintf(text, "%d", ++NumClicks);
  127.   ::SetWindowText(GetDlgItem(ID_STATIC), text);
  128. }
  129.  
  130. //
  131. // Handle BN_CLICKED from 'Button1'.
  132. //
  133. void
  134. TBeepDialog::HandleButton1()
  135. {
  136.   MessageBox("Button1", "Pressed!", MB_OK);
  137. }
  138.  
  139. //
  140. // Handle BN_USER_MSG1 from 'Button2'.
  141. //
  142. void
  143. TBeepDialog::HandleButton2(WPARAM)
  144. {
  145.   MessageBox("Button2", "Pressed!", MB_OK);
  146. }
  147.  
  148. //
  149. // Handle BN_CLICKED from 'Button3'.
  150. //
  151. void
  152. TBeepDialog::HandleButton3(WPARAM)
  153. {
  154.   MessageBox("Button3", "Pressed!", MB_OK);
  155. }
  156.  
  157. //
  158. // Handle BN_CLICKED from 'Button4'.
  159. //
  160. void
  161. TBeepDialog::HandleButton4()
  162. {
  163.   MessageBox("Button4", "Pressed!", MB_OK);
  164. }
  165.  
  166. //----------------------------------------------------------------------------
  167.  
  168. class TTestApp : public TApplication {
  169.   public:
  170.     TTestApp() : TApplication() {}
  171.  
  172.   protected:
  173.     void InitMainWindow() {
  174.       MainWindow = new TFrameWindow(0, "Notification Tester");
  175.       MainWindow->AssignMenu(IDM_COMMANDS);
  176.     }
  177.     void    CmTest();  // CM_TEST  menu command handler
  178.  
  179.   DECLARE_RESPONSE_TABLE(TTestApp);
  180. };
  181.  
  182. DEFINE_RESPONSE_TABLE1(TTestApp, TApplication)
  183.   EV_COMMAND(CM_TEST, CmTest),
  184. END_RESPONSE_TABLE;
  185.  
  186. void
  187. TTestApp::CmTest()
  188. {
  189.   (new TBeepDialog(MainWindow, IDD_TEST))->Create();
  190. }
  191.  
  192. int
  193. OwlMain(int /*argc*/, char* /*argv*/ [])
  194. {
  195.   TTestApp app;
  196.   return app.Run();
  197. }
  198.