home *** CD-ROM | disk | FTP | other *** search
/ Total C++ 2 / TOTALCTWO.iso / borland / modalwin.pak / MODALWIN.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  5KB  |  205 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows
  3. // Copyright (c) 1991, 1996 by Borland International, All Rights Reserved
  4. //
  5. // $Revision:   10.6  $
  6. //
  7. // Sample illustrating how to 'Execute' non-dialog windows 
  8. //----------------------------------------------------------------------------
  9. #include <owl/pch.h>
  10. #if !defined(OWL_APPLICAT_H)
  11. # include <owl/applicat.h>
  12. #endif
  13. #if !defined(OWL_FRAMEWIN_H)
  14. # include <owl/framewin.h>
  15. #endif
  16. #if !defined(OWL_BUTTON_H)
  17. # include <owl/button.h>
  18. #endif
  19. #include "modalwin.h"
  20.  
  21. class TModalWindow : public TWindow {
  22.   public:
  23.     TModalWindow(TWindow* parent, char far* title, int flags = MB_APPLMODAL,
  24.                  TModule* module=0);
  25.  
  26.     // Override DoExecute so we may implement App/Sys modal
  27.     // NOTE: TWindow's Execute defaults to TASKMODAL
  28.     //
  29.     int  DoExecute();
  30.  
  31.   protected:
  32.     // Message Handlers
  33.     //
  34.     void CmAppModalChild();
  35.     void CmTaskModalChild();
  36.     void CmSysModalChild();
  37.     void CmCancel() { Destroy(IDCANCEL); }
  38.     void EvSysCommand(uint cmdType, TPoint& point);
  39.  
  40.   private:
  41.     int ModalFlags;
  42.  
  43.   DECLARE_RESPONSE_TABLE(TModalWindow);
  44. };
  45. DEFINE_RESPONSE_TABLE1(TModalWindow, TWindow)
  46.   EV_COMMAND(CM_APPMODAL_CHILD, CmAppModalChild),
  47.   EV_COMMAND(CM_TASKMODAL_CHILD, CmTaskModalChild),
  48.   EV_COMMAND(CM_SYSMODAL_CHILD, CmSysModalChild),
  49.   EV_COMMAND(IDCANCEL, CmCancel),
  50.   EV_WM_SYSCOMMAND,
  51. END_RESPONSE_TABLE;
  52.  
  53. TModalWindow::TModalWindow(TWindow* parent, char far* title,
  54.                            int flags, TModule* module)
  55.   : TWindow(parent, title, module),
  56.     ModalFlags(flags)
  57. {
  58.   new TButton(this, CM_APPMODAL_CHILD, "&AppModal", 5, 5, 80, 25);
  59.   new TButton(this, CM_TASKMODAL_CHILD, "&TaskModal", 90, 5, 80, 25);
  60.   new TButton(this, CM_SYSMODAL_CHILD, "&SysModal", 5, 35, 80, 25);
  61.   new TButton(this, IDCANCEL, "&Close", 90, 35, 80, 25);
  62.   Attr.Style &= ~WS_CHILD;
  63.   Attr.Style |= WS_POPUPWINDOW | WS_CAPTION;
  64.   Attr.ExStyle = WS_EX_DLGMODALFRAME;
  65.   Attr.X = Parent->GetWindowRect().left+40;
  66.   Attr.Y = Parent->GetWindowRect().top+60;
  67.   Attr.W = 175 + 2*GetSystemMetrics(SM_CXDLGFRAME);
  68.   Attr.H = 65 + 2*GetSystemMetrics(SM_CYDLGFRAME) + GetSystemMetrics(SM_CYCAPTION);
  69.   SetAcceleratorTable(IDA_MODALWIN);
  70. }
  71.  
  72. //
  73. //
  74. //
  75. int 
  76. TModalWindow::DoExecute()
  77. {
  78.   // NOTE: There's no real concept of SYSTEM MODAL windows in the 32-bit
  79.   //       world. We're going to default to TASKMODAL for SYSTEM MODAL
  80.   //       requests - For that we can just use TWindow's Execute support
  81.   //
  82. #if   defined(BI_PLAT_WIN16)
  83.   if (ModalFlags & MB_TASKMODAL)
  84. #elif defined(BI_PLAT_WIN32)
  85.   if ((ModalFlags & MB_TASKMODAL) || (ModalFlags & MB_SYSTEMMODAL))
  86. #endif
  87.     return TWindow::DoExecute();
  88.  
  89.   else {
  90.     if (GetApplication()) {
  91.       if (Create()) {
  92.         SetFlag(wfModalWindow);
  93.  
  94.         // NOTE: MB_APPLMODAL implies the first parameter points to the
  95.         //       window to disable. Otherwise that parameter points to 
  96.         //       the window to make modal.
  97.         //
  98.         TWindow* winparam = (ModalFlags & MB_SYSTEMMODAL) ? 
  99.                             TYPESAFE_DOWNCAST(this, TWindow) : Parent;
  100.         return GetApplication()->BeginModal(winparam, ModalFlags);
  101.       }
  102.     }
  103.   }
  104.   return -1;
  105. }
  106.  
  107. //
  108. //
  109. //
  110. void 
  111. TModalWindow::EvSysCommand(uint cmdType, TPoint& point)
  112. {
  113.   if ((cmdType & 0xFFF0) == SC_CLOSE)
  114.     Destroy(IDCANCEL);
  115.   else
  116.     TWindow::EvSysCommand(cmdType, point);
  117. }
  118.  
  119. //
  120. //
  121. //
  122. void 
  123. TModalWindow::CmAppModalChild()
  124. {
  125.   TModalWindow* mw = new TModalWindow(this, "App Modal Child", MB_APPLMODAL);
  126.   mw->Execute();
  127.   delete mw;
  128. }
  129.  
  130. //
  131. //
  132. //
  133. void 
  134. TModalWindow::CmTaskModalChild()
  135. {
  136.   TModalWindow* mw = new TModalWindow(this, "Task Modal Child", MB_TASKMODAL);
  137.   mw->Execute();
  138.   delete mw;
  139. }
  140.  
  141. //
  142. //
  143. //
  144. void 
  145. TModalWindow::CmSysModalChild()
  146. {
  147.   TModalWindow* mw = new TModalWindow(this, "Sys Modal Child", MB_SYSTEMMODAL);
  148.   mw->Execute();
  149.   delete mw;
  150. }
  151.  
  152. //----------------------------------------------------------------------------
  153.  
  154.  
  155. class TModalApp : public TApplication {
  156.   public:
  157.     TModalApp() : TApplication() {}
  158.  
  159.   private:
  160.     void        InitMainWindow();
  161.     void        CmMWAbout();
  162.     void        CmDAbout();
  163.  
  164.   DECLARE_RESPONSE_TABLE(TModalApp);
  165. };
  166.  
  167. DEFINE_RESPONSE_TABLE(TModalApp)
  168.   EV_COMMAND(CM_MWABOUT, CmMWAbout),
  169.   EV_COMMAND(CM_DABOUT,  CmDAbout),
  170. END_RESPONSE_TABLE;
  171.  
  172. void
  173. TModalApp::InitMainWindow()
  174. {
  175.   TFrameWindow* frame = new TFrameWindow(0, "Modal Windows");
  176.   frame->AssignMenu(IDM_MODALWIN);
  177.   frame->SetIcon(this, IDI_MODALWIN);
  178.   SetMainWindow(frame);
  179. }
  180.  
  181. //  About dialog box
  182. //
  183. void
  184. TModalApp::CmMWAbout()
  185. {
  186.   // NOTE: Here we're defaulting to MB_APPLMODAL. 
  187.   //
  188.   TModalWindow(GetMainWindow(), "App Modal Window").Execute();
  189. }
  190.  
  191. //
  192. //
  193. void
  194. TModalApp::CmDAbout()
  195. {
  196.   TDialog(GetMainWindow(), IDD_ABOUT).Execute();
  197. }
  198.  
  199.  
  200. int
  201. OwlMain(int /*argc*/, char* /*argv*/ [])
  202. {
  203.   return TModalApp().Run();
  204. }
  205.