home *** CD-ROM | disk | FTP | other *** search
- // Microworks ObjectMate 2.6
- //
- // MDITOOL - MDI Toolbar Demonstration
- //
- // Copyright 1992-94 Microworks Sydney, Australia.
- //
- // MDITOOL.CPP
-
- /* MDITool sets up a moveable tool bar in a MDI frame window. There are only two
- * window styles that can be used with an SFX MDI frame window: MWS_3DFRAME or
- * MWS_SFXFRAME. MDITool uses the MWS_3DFRAME style and the new SFXChooseFont
- * function to display an SFX font common dialog box.
- */
-
- #define ID_TOOLBAR 100
- #define CM_POPUP 101
- #define CM_TOP 102
- #define CM_LEFT 103
- #define CM_RIGHT 104
- #define CM_BOTTOM 105
- #define CM_STATUS 106
- #define CM_EXITWINDOW 107
- #define CM_FONT 201
- #define CM_SHOW 202
- #define CM_ABOUT 203
- #define APPNAME "MDITOOL"
-
- #include <owl\owlpch.h>
- #include <sfx\sfx200.h>
- #include <sfx\smdi.h>
- #include <sfx\smchild.h>
- #include <sfx\stoolbar.h>
- #include <owl\choosefo.h>
-
- TColor Color;
- TFont* Font;
-
- // TAboutDialog class
-
- class TAboutDialog : public TDialog {
- public:
- TAboutDialog(TWindow*, TResId);
- void SetupWindow();
- DECLARE_RESPONSE_TABLE(TAboutDialog);
- };
-
- DEFINE_RESPONSE_TABLE1(TAboutDialog, TDialog)
- END_RESPONSE_TABLE;
-
- TAboutDialog::TAboutDialog(TWindow* parent, TResId resId)
- :TDialog(parent, resId),
- TWindow(parent)
- {
- }
-
- void
- TAboutDialog::SetupWindow()
- {
- TDialog::SetupWindow();
- CenterWindow(Parent->HWindow, HWindow);
- }
-
- // TChildClient class
-
- class TChildClient : public TWindow {
- public:
- TChildClient();
- char far* GetClassName();
- void GetWindowClass(WNDCLASS&);
- void Paint(TDC& dc, BOOL erase, TRect& rect);
- DECLARE_RESPONSE_TABLE(TChildClient);
- };
-
- DEFINE_RESPONSE_TABLE1(TChildClient, TWindow)
- END_RESPONSE_TABLE;
-
- TChildClient::TChildClient()
- : TWindow(0, 0, 0)
- {
- }
-
- char far*
- TChildClient::GetClassName()
- {
- return "ChildClient";
- }
-
- void
- TChildClient::GetWindowClass(WNDCLASS& wndClass)
- {
- TWindow::GetWindowClass(wndClass);
- wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
- wndClass.style |= CS_HREDRAW | CS_VREDRAW;
- }
-
- void
- TChildClient::Paint(TDC& dc, BOOL /*erase*/, TRect& /* rect*/)
- {
- TRect rect = GetClientRect();
- dc.FillRect(rect, TBrush(TColor::Black));
- dc.SetBkMode(TRANSPARENT);
- dc.SetTextColor(Color);
- dc.SelectObject(*Font);
- dc.DrawText("Borland C++ 4.0", -1, rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
- dc.RestoreFont();
- }
-
- // TClient class
-
- class TClient : public TMDIClient {
- public:
- TClient() : TMDIClient() { Attr.Style &= ~(WS_BORDER); }
- TSFXMDIChild* InitChild();
- DECLARE_RESPONSE_TABLE (TClient);
- };
-
- DEFINE_RESPONSE_TABLE2(TClient, TMDIClient, TWindow)
- END_RESPONSE_TABLE;
-
- TSFXMDIChild*
- TClient::InitChild()
- {
- char childName[] = "MDI Child Window";
-
- /* FALSE sets the MWS_3DFRAME flag and TRUE sets the MWS_SFXCAPTION flag
- */
- return new TSFXMDIChild(*this, childName, new TChildClient(), FALSE, TRUE);
- }
-
- // TMDITool class
-
- class TMDITool : public TSFXMDIFrame {
- public:
- int OldToolbarPos, ToolbarPos;
- TSFXToolbar* Toolbar;
- TClient* Client;
- TChooseFontDialog::TData FontData;
- TMDITool(const char far* title, TResId menuResId, TClient& clientWnd,
- BOOL sfxFrame, BOOL sfxCaption);
- ~TMDITool();
- char far* GetClassName();
- void SetupWindow();
- void EvInitMenuPopup(HMENU, UINT, BOOL);
- void EvSize(UINT, TSize&);
- void UpdateClientArea(int width, int height);
- void CmPopup();
- void CmTop();
- void CmLeft();
- void CmRight();
- void CmBottom();
- void CmStatus();
- void CmExitWindow();
- void CmFont();
- void CmShow();
- void CmAbout();
- DECLARE_RESPONSE_TABLE(TMDITool);
- };
-
- DEFINE_RESPONSE_TABLE3(TMDITool, TSFXMDIFrame, TMDIFrame, TFrameWindow)
- EV_WM_INITMENUPOPUP,
- EV_WM_SIZE,
- EV_COMMAND(CM_POPUP, CmPopup),
- EV_COMMAND(CM_TOP, CmTop),
- EV_COMMAND(CM_LEFT, CmLeft),
- EV_COMMAND(CM_RIGHT, CmRight),
- EV_COMMAND(CM_BOTTOM, CmBottom),
- EV_COMMAND(CM_STATUS, CmStatus),
- EV_COMMAND(CM_EXITWINDOW, CmExitWindow),
- EV_COMMAND(CM_FONT, CmFont),
- EV_COMMAND(CM_SHOW, CmShow),
- EV_COMMAND(CM_ABOUT, CmAbout),
- END_RESPONSE_TABLE;
-
- TMDITool::TMDITool(const char far* title, TResId menuResId, TClient& clientWnd,
- BOOL sfxFrame, BOOL sfxCaption)
- :TSFXMDIFrame(title, menuResId, clientWnd, sfxFrame, sfxCaption),
- TMDIFrame(title, menuResId, clientWnd)
- {
- Client = &clientWnd;
- Toolbar = 0;
- ToolbarPos = 0;
-
- // Default LogFont data
- FontData.LogFont.lfHeight = -35;
- FontData.LogFont.lfWidth = 0;
- FontData.LogFont.lfEscapement = 0;
- FontData.LogFont.lfOrientation = 0;
- FontData.LogFont.lfWeight = FW_BOLD;
- FontData.LogFont.lfItalic = FALSE;
- FontData.LogFont.lfUnderline = FALSE;
- FontData.LogFont.lfStrikeOut = FALSE;
- FontData.LogFont.lfCharSet = 1;
- FontData.LogFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
- FontData.LogFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
- FontData.LogFont.lfQuality = DEFAULT_QUALITY;
- FontData.LogFont.lfPitchAndFamily = DEFAULT_PITCH | FF_DONTCARE;
- strcpy(FontData.LogFont.lfFaceName, "Times New Roman");
-
- // Set initial text color to Red }
- Color = TColor::LtRed;
-
- // Create default font
- Font = new TFont(&FontData.LogFont);
- }
-
- TMDITool::~TMDITool()
- {
- delete Font;
- }
-
- char far*
- TMDITool::GetClassName()
- {
- return APPNAME;
- }
-
- void TMDITool::SetupWindow()
- {
- TSFXMDIFrame::SetupWindow();
-
- /* Create a top aligned toolbar
- */
- CmTop();
-
- /* Create MDI child window
- */
- Client->CreateChild();
- }
-
- void
- TMDITool::EvInitMenuPopup(HMENU hPopupMenu, UINT index, BOOL sysMenu)
- {
- if (!sysMenu && index == 0 && ToolbarPos != OldToolbarPos)
- {
- CheckMenuItem(hPopupMenu, ToolbarPos, MF_CHECKED);
- CheckMenuItem(hPopupMenu, OldToolbarPos, MF_UNCHECKED);
- }
- else
- if (!sysMenu && index == 1)
- {
- if (Toolbar->IsWindowVisible())
- EnableMenuItem(hPopupMenu, CM_SHOW, MF_GRAYED);
- else
- EnableMenuItem(hPopupMenu, CM_SHOW, MF_ENABLED);
- }
- else
- TSFXMDIFrame::EvInitMenuPopup(hPopupMenu, index, sysMenu);
- }
-
- void
- TMDITool::EvSize(UINT /*sizeType*/, TSize& size)
- {
- Toolbar->AlignToolbar();
- UpdateClientArea(size.cx, size.cy);
- }
-
- void
- TMDITool::UpdateClientArea(int width, int height)
- {
- /* Resize the client window depending on the toolbar position
- */
- if (Client && Client->HWindow)
- {
- int x = 0, y = 0;
- if (!width && !height)
- {
- TRect rect = GetClientRect();
- width = rect.Width();
- height = rect.Height();
- }
- if (ToolbarPos == CM_TOP)
- y = 29;
- else
- if (ToolbarPos == CM_LEFT)
- x = 29;
- else
- if (ToolbarPos == CM_RIGHT)
- width -= 29;
- else
- if (ToolbarPos == CM_BOTTOM || ToolbarPos == CM_STATUS)
- height -= 29;
- Client->MoveWindow(x, y, width, height, TRUE);
- }
- }
-
- void
- TMDITool::CmPopup()
- {
- OldToolbarPos = ToolbarPos;
- if (ToolbarPos != CM_POPUP)
- {
- ToolbarPos = CM_POPUP;
- if (Toolbar && Toolbar->HWindow)
- DestroyWindow(Toolbar->HWindow);
-
- /* A popup toolbar is confined to the Windows' desktop and cannot be moved
- * outside. The x value 'GetSystemMetrics(SM_CXSCREEN)' and the y value '0'
- * ensure that the toolbar is positioned in the top-left corner of the
- * desktop window.
- */
- Toolbar = new TSFXToolbar(this, ID_TOOLBAR, "?,301,302,303,304,305,306,307,308",
- GetSystemMetrics(SM_CXSCREEN), 0, FALSE);
- Toolbar->Attr.Style |= MTB_ROW4 | MTB_COLUMN2 | MTB_FLOAT | MTB_3DFRAME |
- MTB_BITMAPBUTTON | WS_CAPTION | WS_SYSMENU;
- Toolbar->Create();
- UpdateClientArea(0, 0);
- }
- }
-
- void
- TMDITool::CmTop()
- {
- OldToolbarPos = ToolbarPos;
- if (ToolbarPos != CM_TOP)
- {
- /* An SFX Toolbar sizes itself according to the specified flags and the size
- * of the first button's first bitmap, so cx and cy can be zero. x and y have
- * no effect on an aligned toolbar and should be set to zero. To re position a
- * toolbar you have to destroy the current one and create a new one. When you
- * do, you will have to change the MTB_ROWXX, MTB_COLOUMNXX and the toolbar
- * style flags: MTB_TOP, MTB_LEFT, MTB_RIGHT, MTB_BOTTOM, MTB_FLOAT and MTB_STATUS.
- */
- ToolbarPos = CM_TOP;
- if (Toolbar && Toolbar->HWindow)
- DestroyWindow(Toolbar->HWindow);
- Toolbar = new TSFXToolbar(this, ID_TOOLBAR, "?,301,302,303,304,305,306,307,308",
- 0, 0, TRUE);
- Toolbar->Attr.Style |= MTB_ROW1 | MTB_COLUMN8 | MTB_TOP | MTB_BITMAPBUTTON;
- Toolbar->Create();
- UpdateClientArea(0, 0);
- }
- }
-
- void
- TMDITool::CmLeft()
- {
- OldToolbarPos = ToolbarPos;
- if (ToolbarPos != CM_LEFT)
- {
- ToolbarPos = CM_LEFT;
- if (Toolbar && Toolbar->HWindow)
- DestroyWindow(Toolbar->HWindow);
- Toolbar = new TSFXToolbar(this, ID_TOOLBAR, "?,301,302,303,304,305,306,307,308",
- 0, 0, TRUE);
- Toolbar->Attr.Style |= MTB_ROW8 | MTB_COLUMN1 | MTB_LEFT | MTB_BITMAPBUTTON;
- Toolbar->Create();
- UpdateClientArea(0, 0);
- }
- }
-
- void
- TMDITool::CmRight()
- {
- OldToolbarPos = ToolbarPos;
- if (ToolbarPos != CM_RIGHT)
- {
- ToolbarPos = CM_RIGHT;
- if (Toolbar && Toolbar->HWindow)
- DestroyWindow(Toolbar->HWindow);
- Toolbar = new TSFXToolbar(this, ID_TOOLBAR, "?,301,302,303,304,305,306,307,308",
- 0, 0, TRUE);
- Toolbar->Attr.Style |= MTB_ROW8 | MTB_COLUMN1 | MTB_RIGHT | MTB_BITMAPBUTTON;
- Toolbar->Create();
- UpdateClientArea(0, 0);
- }
- }
-
- void
- TMDITool::CmBottom()
- {
- OldToolbarPos = ToolbarPos;
- if (ToolbarPos != CM_BOTTOM)
- {
- ToolbarPos = CM_BOTTOM;
- if (Toolbar && Toolbar->HWindow)
- DestroyWindow(Toolbar->HWindow);
- Toolbar = new TSFXToolbar(this, ID_TOOLBAR, "?,301,302,303,304,305,306,307,308",
- 0, 0, TRUE);
- Toolbar->Attr.Style |= MTB_ROW1 | MTB_COLUMN8 | MTB_BOTTOM | MTB_BITMAPBUTTON;
- Toolbar->Create();
- UpdateClientArea(0, 0);
- }
- }
-
- void
- TMDITool::CmStatus()
- {
- OldToolbarPos = ToolbarPos;
- if (ToolbarPos != CM_STATUS)
- {
- ToolbarPos = CM_STATUS;
- if (Toolbar && Toolbar->HWindow)
- DestroyWindow(Toolbar->HWindow);
- Toolbar = new TSFXToolbar(this, ID_TOOLBAR, "?,301,302,303,304,305,306,307,308",
- 0, 0, TRUE);
- Toolbar->Attr.Style |= MTB_ROW1 | MTB_COLUMN8 | MTB_STATUS | MTB_BITMAPBUTTON;
- Toolbar->Create();
- UpdateClientArea(0, 0);
- }
- }
-
- void
- TMDITool::CmExitWindow()
- {
- CloseWindow();
- }
-
- void
- TMDITool::CmFont()
- {
- /* Uses the new SFXChooseFont function to display an SFX ChooseFont common dialog box
- */
- DWORD flags = CF_EFFECTS | CF_BOTH;
- int id = GetSFXTemplateId("SFXSteelDlg", DLG_FONT);
-
- if (SFXChooseFont(HWindow, (LOGFONT far*)&FontData.LogFont, flags, id,
- FALSE, (COLORREF far*)&Color))
- {
- delete Font;
- Font = new TFont(&FontData.LogFont);
- TMDIChild* child = Client->GetActiveMDIChild();
- child->GetClientWindow()->Invalidate();
- }
- }
-
- void
- TMDITool::CmShow()
- {
- Toolbar->Show(SW_SHOWNORMAL);
- }
-
- void
- TMDITool::CmAbout()
- {
- TAboutDialog(this, "AboutDialog").Execute();
- }
-
- // TMDIToolApop class
-
- class TMDIToolApp : public TApplication {
- public:
- TMDIToolApp() : TApplication("MDITool - Toolbar Demonstration") {}
- void InitMainWindow();
- };
-
- void
- TMDIToolApp::InitMainWindow()
- {
- /* FALSE sets the MWS_3DFRAME flag and TRUE sets the MWS_SFXCAPTION flag
- */
- MainWindow = new TMDITool(GetName(), "MDITOOL", *new TClient(), FALSE, TRUE);
- MainWindow->SetIcon(this, APPNAME);
- }
-
- int
- OwlMain(int /*argc*/, char* /*argv*/ [])
- {
- return TMDIToolApp().Run();
- }
-