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

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1991, 1993 by Borland International
  3. //
  4. //   This program has example code that uses the Common Dialog classes
  5. //   in Owl
  6. //
  7. //   The main window will have menu selections for opening a file, changing 
  8. //   the font and changing the color used for the selected font.  When a file
  9. //   is selected the name will be displayed on the client area of the window.
  10. //
  11. //----------------------------------------------------------------------------
  12. #include <owl\owlpch.h>
  13. #include <owl\applicat.h>
  14. #include <owl\framewin.h>
  15. #include <owl\dialog.h>
  16. #include <owl\dc.h>
  17. #include <owl\chooseco.h>
  18. #include <owl\choosefo.h>
  19. #include <owl\opensave.h>
  20. #include <stdio.h>
  21. #include <string.h>
  22. #include "commdlgx.rh"
  23.  
  24.  
  25. class TCommDlgWnd : public TFrameWindow {
  26.   public:
  27.     TCommDlgWnd(TWindow*, const char*);
  28.    ~TCommDlgWnd();
  29.  
  30.     void       Paint(TDC&, BOOL, TRect&);
  31.     void       CmFileOpen();
  32.     void       CmColor();
  33.     void       CmFont();
  34.     void       CmHelpAbout();
  35.  
  36.     TColor     Color;
  37.     TFont*     Font;
  38.  
  39.     TOpenSaveDialog::TData   FilenameData;
  40.     TChooseFontDialog::TData FontData;
  41.  
  42.         void EvSize(UINT sizeType, TSize& size);
  43.  
  44.   DECLARE_RESPONSE_TABLE(TCommDlgWnd);
  45. };
  46.  
  47. DEFINE_RESPONSE_TABLE1(TCommDlgWnd, TFrameWindow)
  48.     EV_WM_SIZE,
  49.   EV_COMMAND(CM_FILEOPEN, CmFileOpen),
  50.   EV_COMMAND(CM_COLOR, CmColor),
  51.   EV_COMMAND(CM_FONT, CmFont),
  52.   EV_COMMAND(CM_HELPABOUT, CmHelpAbout),
  53. END_RESPONSE_TABLE;
  54.  
  55.  
  56. //
  57. // Note the initialization method of the filter string. The TOpenSave::TData
  58. // class expects to find a filter string that has a '|' terminator between
  59. // strings and an extra '|' that terminates the entire filter data set.
  60. // The '|' characters are translated to 0's within TData's copy of the string.
  61. // Using '|'s allows the filter to be loaded from a resource & copied using
  62. // strcpy.
  63. //
  64. TCommDlgWnd::TCommDlgWnd(TWindow* parent, const char* title)
  65.   : TFrameWindow(parent, title),
  66.     TWindow(parent, title),
  67.     FilenameData(OFN_FILEMUSTEXIST|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,
  68.                  "All Files (*.*)|*.*|Text Files (*.txt)|*.txt|",
  69.                  0, "", "*")
  70. {
  71.   AssignMenu("CMDLGAPMENU");      // Set up the menu
  72.   Color = TColor::Black;          // Use black as the default color
  73.   Font = 0;                       // Empty the handle to the font
  74. }
  75.  
  76. TCommDlgWnd::~TCommDlgWnd()
  77. {
  78.   delete Font;
  79. }
  80. //
  81. // We need to invalidate the entire area, not just the clip area so that 
  82. // paint gets called correctly
  83. //
  84. void
  85. TCommDlgWnd::EvSize(UINT sizeType, TSize& size) 
  86. {
  87.     Invalidate(); 
  88.     TFrameWindow::EvSize(sizeType,size);
  89. }
  90.  
  91. //
  92. // Display the file name using the selected font in the selected color.
  93. //
  94. void
  95. TCommDlgWnd::Paint(TDC& paintDC, BOOL, TRect&)
  96. {
  97.   paintDC.SetTextColor(Color);
  98.   paintDC.SetBkColor(::GetSysColor(COLOR_WINDOW));
  99.   if (Font)
  100.     paintDC.SelectObject(*Font);
  101.   paintDC.DrawText(FilenameData.FileName, strlen(FilenameData.FileName), 
  102.                    GetClientRect(), DT_CENTER | DT_WORDBREAK);
  103. }
  104.  
  105. //
  106. //
  107. //
  108. void
  109. TCommDlgWnd::CmFileOpen()
  110. {
  111.   // If the call to Execute fails you can examine the Error member
  112.   // of FilenameData to determine the type of error that occured.
  113.   //
  114.   if (TFileOpenDialog(this, FilenameData).Execute() != IDOK) {
  115.     if (FilenameData.Error != 0) {   // 0 value means user selected Cancel
  116.       char  msg[50];
  117.       sprintf(msg, "GetOpenFileName returned Error #%ld", FilenameData.Error);
  118.       MessageBox(msg, "WARNING", MB_OK|MB_ICONSTOP);
  119.     }
  120.   }
  121.   Invalidate();         // Repaint to display the new name
  122. }
  123.  
  124. //
  125. //
  126. void
  127. TCommDlgWnd::CmColor()
  128. {
  129.   TChooseColorDialog::TData choose;
  130.   static TColor    custColors[16] = { 
  131.     0x010101L, 0x101010L, 0x202020L, 0x303030L,
  132.     0x404040L, 0x505050L, 0x606060L, 0x707070L,
  133.     0x808080L, 0x909090L, 0xA0A0A0L, 0xB0B0B0L,
  134.     0xC0C0C0L, 0xD0D0D0L, 0xE0E0E0L, 0xF0F0F0L
  135.   };
  136.  
  137.   choose.Flags = CC_RGBINIT;
  138.   choose.Color = Color;
  139.   choose.CustColors = custColors;
  140.   if (TChooseColorDialog(this, choose).Execute() == IDOK) {
  141.     Color = choose.Color;
  142.   }
  143.   Invalidate();
  144. }
  145.  
  146. //
  147. //
  148. //
  149. void
  150. TCommDlgWnd::CmFont()
  151. {
  152.   if (Font) {                    // FontData contains previous selections
  153.     FontData.Flags |= CF_INITTOLOGFONTSTRUCT;
  154.     FontData.Color = Color;
  155.   } else {
  156.     FontData.DC = 0;
  157.     FontData.Flags = CF_EFFECTS | CF_FORCEFONTEXIST | CF_SCREENFONTS;
  158.     FontData.Color = Color;      // Color and font dialogs use the same color
  159.     FontData.Style = 0;
  160.     FontData.FontType = SCREEN_FONTTYPE;
  161.     FontData.SizeMin = 0;
  162.     FontData.SizeMax = 0;
  163.   }
  164.   if (TChooseFontDialog(this, FontData).Execute() == IDOK) {
  165.     delete Font;
  166.     Color = FontData.Color;
  167.     Font = new TFont(&FontData.LogFont);
  168.   }
  169.   Invalidate();
  170. }
  171.  
  172. void
  173. TCommDlgWnd::CmHelpAbout()
  174. {
  175.   MessageBox("Common Dialog Example\nWritten using ObjectWindows\n"
  176.              "Copyright (c) 1991, 1993 Borland",
  177.              "About Common Dialog Example", 
  178.              MB_OK);
  179. }
  180.  
  181. class TCommDlgApp : public TApplication {
  182.   public:
  183.     TCommDlgApp() : TApplication() {}
  184.     void InitMainWindow() {
  185.       MainWindow = new TCommDlgWnd(0, "Common Dialog Example");
  186.       EnableCtl3d();
  187.     }
  188. };
  189.  
  190. int
  191. OwlMain(int /*argc*/, char* /*argv*/ [])
  192. {
  193.   return TCommDlgApp().Run();
  194. }
  195.