CLASSLIB.H
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:17k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*
  2.  * CLASSLIB.H
  3.  * Sample Code Class Libraries
  4.  *
  5.  * Master include file for our own Class Library containing:
  6.  *  CStringTable    Class that manages a stringtable.
  7.  *  CHourglass      Class to manage the hourglass.
  8.  *
  9.  *  CWindow         Basic window class for most other classes in here
  10.  *  CToolBar        Wrapper for a toolbar control
  11.  *  CStatusLine     Wrapper for a status lib control
  12.  *
  13.  *  CFrame          Frame window
  14.  *  CClient         Client window with a uniform interface for
  15.  *                  MDI and SDI frames.
  16.  *  CDocument       Document window, also with a uniform interface
  17.  *                  for MDI and SDI.
  18.  *
  19.  *  CDocumentAdviseSink Object implemented in the frame that the
  20.  *                      document notifies of important events.
  21.  *
  22.  * Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
  23.  *
  24.  * Kraig Brockschmidt, Microsoft
  25.  * Internet  :  kraigb@microsoft.com
  26.  * Compuserve:  >INTERNET:kraigb@microsoft.com
  27.  */
  28. #ifndef _CLASSLIB_H_
  29. #define _CLASSLIB_H_
  30. #include <book1632.h>
  31. //Get default resource definitions
  32. #include "classres.h"
  33. class CStringTable;
  34. class CHourglass;
  35. class CToolBar;
  36. class CStatusLine;
  37. class CWindow;
  38. class CFrame;
  39. class CClient;
  40. class CDocument;
  41. class CDocumentAdviseSink;
  42. class CHatchWin;
  43. /**
  44.  ** CStringTable providing string table management for anyone.
  45.  **/
  46. class CStringTable
  47.     {
  48.     protected:
  49.         HINSTANCE       m_hInst;
  50.         UINT            m_idsMin;
  51.         UINT            m_idsMax;
  52.         USHORT          m_cStrings;
  53.         LPTSTR          m_pszStrings;
  54.         LPTSTR         *m_ppszTable;
  55.     public:
  56.         CStringTable(HINSTANCE);
  57.         ~CStringTable(void);
  58.         BOOL Init(UINT, UINT);
  59.         //Function to resolve an ID into a string pointer.
  60.         const LPTSTR operator [](const UINT) const;
  61.     };
  62. typedef CStringTable *PCStringTable;
  63. /*
  64.  * Typical classes that initialize a stringtable should have an m_pST
  65.  * member, then they can use this macro conveniently.
  66.  */
  67. #define PSZ(i) ((*m_pST)[i])
  68. #define CCHSTRINGMAX            256
  69. /**
  70.  ** CHourglass:  Manages the hourglass and mouse capture
  71.  **/
  72. class CHourglass
  73.     {
  74.     protected:
  75.         HWND            m_hWndCapture;      //Window with capture
  76.         HCURSOR         m_hCur;             //Cursor held.
  77.     public:
  78.         CHourglass(void);
  79.         CHourglass(HWND);
  80.         ~CHourglass(void);
  81.     };
  82. typedef CHourglass *PCHourglass;
  83. /**
  84.  ** CWindow:  Our basic window class.
  85.  **/
  86. class CWindow
  87.     {
  88.     protected:
  89.         HINSTANCE   m_hInst;            //Task instance
  90.         HWND        m_hWnd;             //Window handle of the window
  91.     public:
  92.         //Standard Class Functions
  93.         CWindow(HINSTANCE);
  94.         ~CWindow(void);
  95.         //Just returns members.  No need to modify
  96.         HWND        Window(void);
  97.         HINSTANCE   Instance(void);
  98.     };
  99. typedef CWindow * PCWindow;
  100. /**
  101.  ** CToolBar encapculates a toolbar control
  102.  **/
  103. #include <bttncur.h>
  104. #include <gizmobar.h>
  105. class CToolBar : public CWindow
  106.     {
  107.     protected:
  108.         UINT            m_cyBar;
  109.     public:
  110.         CToolBar(HINSTANCE);
  111.         ~CToolBar(void);
  112.         BOOL   Init(HWND, UINT, UINT);
  113.         //Window message wrappers
  114.         void   OnSize(HWND);
  115.         void   FontSet(HFONT, BOOL);
  116.         HFONT  FontGet(void);
  117.         void   Enable(BOOL);
  118.         //ToolBar function wrappers
  119.         HWND   HwndAssociateSet(HWND);
  120.         HWND   HwndAssociateGet(void);
  121.         BOOL   Add(UINT, UINT, UINT, UINT, UINT, LPTSTR, HBITMAP
  122.                    , UINT, UINT);
  123.         BOOL   Remove(UINT);
  124.         LONG   SendMessage(UINT, UINT, WPARAM, LPARAM);
  125.         BOOL   Show(UINT, BOOL);
  126.         BOOL   Enable(UINT, BOOL);
  127.         BOOL   Check(UINT, BOOL);
  128.         UINT   FocusSet(UINT);
  129.         BOOL   Exist(UINT);
  130.         int    TypeGet(UINT);
  131.         DWORD  DataSet(UINT, DWORD);
  132.         DWORD  DataGet(UINT);
  133.         BOOL   NotifySet(UINT, BOOL);
  134.         BOOL   NotifyGet(UINT);
  135.         int    TextGet(UINT, LPTSTR, UINT);
  136.         void   TextSet(UINT, LPTSTR);
  137.         UINT   IntGet(UINT, BOOL *, BOOL);
  138.         void   IntSet(UINT, int, BOOL);
  139.     };
  140. typedef CToolBar *PCToolBar;
  141. /**
  142.  ** CStatusLine encapsulates a status line control.
  143.  **/
  144. #include <stastrip.h>
  145. class CStatusLine : public CWindow
  146.     {
  147.     protected:
  148.         UINT        m_cy;           //Control height
  149.     public:
  150.         CStatusLine(HINSTANCE);
  151.         ~CStatusLine(void);
  152.         BOOL  Init(HWND, UINT, UINT);
  153.         void  OnSize(HWND);
  154.         void  MessageSet(LPTSTR);
  155.         UINT  MessageGet(LPTSTR, UINT);
  156.         UINT  MessageGetLength(void);
  157.         void  FontSet(HFONT, BOOL);
  158.         HFONT FontGet(void);
  159.         void  Enable(BOOL);
  160.         BOOL  MessageMap(HWND, HINSTANCE, UINT, UINT, UINT, UINT
  161.                   , UINT, UINT, UINT, UINT, UINT);
  162.         void  MenuSelect(WPARAM, LPARAM);
  163.         void  MessageDisplay(UINT);
  164.     };
  165. typedef CStatusLine *PCStatusLine;
  166. /**
  167.  ** CFrame encapsulates a main application window
  168.  **/
  169. //FRAMEWIN.CPP:  Standard window procedure and AboutProc
  170. LRESULT APIENTRY FrameWndProc(HWND, UINT, WPARAM, LPARAM);
  171. BOOL    APIENTRY AboutProc(HWND, UINT, WPARAM, LPARAM);
  172. #define CBFRAMEWNDEXTRA     sizeof(LONG)
  173. #define FRAMEWL_STRUCTURE   0
  174. /*
  175.  * Structure containing resource ranges for initialization of
  176.  * a CFrame object through its Init member.
  177.  */
  178. typedef struct tagFRAMEINIT
  179.     {
  180.     UINT    idsMin;         //Stringtable start and end
  181.     UINT    idsMax;
  182.     UINT    idsStatMin;     //StatStrip stringtable start and end
  183.     UINT    idsStatMax;
  184.     UINT    idStatMenuMin;  //Start and end IDs for StatStrip
  185.     UINT    idStatMenuMax;  //popup menu IDs
  186.     UINT    iPosWindowMenu; //Position of the Window menu (MDI init)
  187.     UINT    cMenus;         //Number of popup menus we have.
  188.     int     x;              //Window positioning.
  189.     int     y;
  190.     int     cx;
  191.     int     cy;
  192.     } FRAMEINIT, *PFRAMEINIT;
  193. //FRAME.CPP:  Frame object that creates a main window
  194. class CFrame : public CWindow
  195.     {
  196.     //Let our window procedure look in our private variables.
  197.     friend LRESULT APIENTRY FrameWndProc(HWND, UINT, WPARAM, LPARAM);
  198.     friend class CDocumentAdviseSink;
  199.     protected:
  200.         HINSTANCE       m_hInstPrev;        //WinMain parameters
  201.         LPTSTR          m_pszCmdLine;
  202.         int             m_nCmdShow;
  203.         LPTSTR         *m_ppszCmdArgs;      //Command line arguments
  204.         UINT            m_cCmdArgs;
  205.         BOOL            m_fCmdsParsed;      //Been parsed yet?
  206.         BOOL            m_fInit;            //Initializing or closing
  207.         BOOL            m_fSizing;          //Inside WM_SIZE
  208.         BOOL            m_fClosing;         //In WM_CLOSE
  209.         BOOL            m_fLastEnable;      //Toolbar enable state
  210.         BOOL            m_fLastPaste;
  211.         HMENU          *m_phMenu;           //Popup menu handles
  212.         HMENU           m_hMenuWindow;      //"Window" menu
  213.         HACCEL          m_hAccel;           //Accelerators
  214.         HBITMAP         m_hBmp;             //Toolbar images
  215.         UINT            m_cyBar;            //Toolbar height
  216.         UINT            m_dxB;              //Toolbar button sizes
  217.         UINT            m_dyB;
  218.         PCToolBar       m_pTB;              //Toolbar
  219.         PCStatusLine    m_pSL;              //Status line
  220.         PCStringTable   m_pST;              //Stringtable.
  221.         CClient        *m_pCL;              //SDI/MDI client window
  222.     protected:
  223.         virtual BOOL     ParseCommandLine(void);
  224.         virtual CClient *CreateCClient(void);
  225.         virtual BOOL     RegisterAllClasses(void);
  226.         virtual BOOL     PreShowInit(void);
  227.         virtual void     OpenInitialFiles(void);
  228.         virtual UINT     CreateToolbar(void);
  229.         virtual BOOL     FMessageHook(HWND, UINT, WPARAM, LPARAM
  230.                              , LRESULT *);
  231.         virtual LRESULT  OnCommand(HWND, WPARAM, LPARAM);
  232.         virtual void     OnDocumentDataChange(CDocument *);
  233.         virtual void     OnDocumentActivate(CDocument *);
  234.         virtual BOOL     SaveOpenDialog(LPTSTR, UINT, UINT, BOOL
  235.                              , UINT *);
  236.         virtual UINT     ReplaceCharWithNull(LPTSTR, int);
  237.         virtual LPTSTR   PszWhiteSpaceScan(LPTSTR, BOOL);
  238.     public:
  239.         CFrame(HINSTANCE, HINSTANCE, LPSTR, int);
  240.         virtual ~CFrame(void);
  241.         virtual BOOL     Init(PFRAMEINIT);
  242.         virtual WPARAM   MessageLoop(void);
  243.         virtual BOOL     AskAndSave(LPTSTR);
  244.         virtual void     UpdateMenus(HMENU, UINT);
  245.         virtual void     UpdateToolbar(void);
  246.         virtual void     WindowTitleSet(CDocument *, BOOL);
  247.         virtual PCStatusLine inline StatusLine(void);
  248.     };
  249. typedef CFrame *PCFrame;
  250. //Other Miscellaneous CFrame definitions
  251. //ToolBar and StatStrip IDs used in this frame
  252. #define ID_GIZMOBAR         11
  253. #define ID_STATSTRIP        12
  254. //Classname
  255. #define SZCLASSFRAME        TEXT("Frame")
  256. /**
  257.  ** CClient encapsulates an MDI or SDI client window
  258.  **/
  259. //Forward reference
  260. class CDocumentAdviseSink;
  261. typedef CDocumentAdviseSink *PCDocumentAdviseSink;
  262. //CLIENT.CPP
  263. LRESULT APIENTRY SDIClientWndProc(HWND, UINT, WPARAM, LPARAM);
  264. #define CBCLIENTWNDEXTRA    sizeof(LONG)
  265. #define CLIENTWL_HWNDDOC    0
  266. class CClient : public CWindow
  267.     {
  268.     friend LRESULT APIENTRY SDIClientWndProc(HWND, UINT, WPARAM
  269.         , LPARAM);
  270.     protected:
  271.         PCFrame         m_pFR;          //Frame window information
  272.         UINT            m_cDoc;         //Count of open documents
  273.         CDocument *     m_pDocLast;     //Last created document
  274.         HWND            m_hListDocs;    //List of documents
  275.         //This is created to send notifications to the frame
  276.         PCDocumentAdviseSink m_pAdv;
  277.     private:
  278.         //This non-overridable sets m_pDocLast
  279.         CDocument         * CreateDoc(void);
  280.     protected:
  281.         //Overridable for creating a new CDocument
  282.         virtual CDocument * CreateCDocument(void);
  283.     public:
  284.         CClient(HINSTANCE, PCFrame);
  285.         virtual ~CClient(void);
  286.         PCFrame                 Frame(void);
  287.         UINT                    DocumentCount(void);
  288.         HWND                    DocumentList(void);
  289.         virtual BOOL            Init(HMENU, LPRECT);
  290.         virtual BOOL            TranslateAccelerator(LPMSG);
  291.         virtual LRESULT         DefaultFrameProc(HWND, UINT, WPARAM
  292.                                     , LPARAM);
  293.         virtual void            OnWindowCommand(UINT, UINT);
  294.         virtual void            OnSize(UINT, UINT, UINT, UINT);
  295.         virtual CDocument *     NewDocument(BOOL);
  296.         virtual CDocument *     ActiveDocument(void);
  297.         virtual BOOL            ShowDocument(CDocument *, BOOL);
  298.         virtual BOOL            SDIVerify(void);
  299.         virtual UINT            CloseDocument(CDocument *);
  300.         virtual BOOL            QueryCloseAllDocuments(BOOL, BOOL);
  301.         virtual BOOL            FCleanVerify(CDocument *);
  302.     };
  303. typedef CClient *PCClient;
  304. //Other Miscellaneous CFrame definitions
  305. //Document window identifiers
  306. #define ID_DOCUMENT         999     //Internal ID for all documents
  307. #define ID_MDICHILDMIN      1000    //Starting point for MDI doc IDs
  308. #define SZCLASSSDICLIENT    TEXT("SDIClient")
  309. /**
  310.  ** CDocument encapsulates an MDI or SDI child window
  311.  **/
  312. //DOCWIN.CPP
  313. LRESULT APIENTRY DocumentWndProc(HWND, UINT, WPARAM, LPARAM);
  314. //DOCUMENT.CPP
  315. //File-related string lengths.
  316. #define CCHPATHMAX          256
  317. #define CCHFILENAMEMAX      15
  318. //Window extra bytes and offsets
  319. #define CBDOCUMENTWNDEXTRA  sizeof(LONG)
  320. #define DOCWL_STRUCTURE     0
  321. //Error codes from Load and Save functions
  322. #define DOCERR_NONE                     0
  323. #define DOCERR_NOFILE                   1
  324. #define DOCERR_COULDNOTOPEN             2
  325. #define DOCERR_READFAILURE              3
  326. #define DOCERR_UNSUPPORTEDVERSION       4
  327. #define DOCERR_WRITEFAILURE             5
  328. #define DOCERR_CANCELLED                6
  329. #define DOCERR_STDMAX                   6
  330. /*
  331.  * Structure containing resource ranges and other data for
  332.  * initialization of a CDocument object through its Init member.
  333.  */
  334. typedef struct tagDOCUMENTINIT
  335.     {
  336.     UINT        idsMin;    //Stringtable start and end
  337.     UINT        idsMax;
  338.     HWND        hWndDoc;   //HWND of this document, created in client
  339.     } DOCUMENTINIT, *PDOCUMENTINIT;
  340. class CDocument : public CWindow
  341.     {
  342.     friend LRESULT APIENTRY DocumentWndProc(HWND, UINT, WPARAM
  343.         , LPARAM);
  344.     protected:
  345.         PCFrame         m_pFR;                //Back pointer
  346.         UINT            m_cf;                 //Clipboard format
  347.         BOOL            m_fDirty;             //Is file dirty?
  348.         BOOL            m_fNoDirty;           //Don't touch dirty flag
  349.         BOOL            m_fNoSize;            //Prevent sizing
  350.         BOOL            m_fFileKnown;         //File/Save allowed?
  351.         TCHAR           m_szFile[CCHPATHMAX]; //Filename for Save
  352.         PCStringTable   m_pST;                //Document strings
  353.         /*
  354.          * If someone above us wants information, they'll
  355.          * give us this object.
  356.          */
  357.         PCDocumentAdviseSink m_pAdv;
  358.     protected:
  359.         virtual BOOL     FMessageHook(HWND, UINT, WPARAM, LPARAM
  360.                              , LRESULT *);
  361.     public:
  362.         CDocument(HINSTANCE, PCFrame, PCDocumentAdviseSink);
  363.         virtual ~CDocument(void);
  364.         virtual BOOL     Init(PDOCUMENTINIT);
  365.         virtual BOOL     FDirtySet(BOOL);
  366.         virtual BOOL     FDirtyGet(void);
  367.         virtual void     Clear(void);
  368.         virtual UINT     Load(BOOL, LPTSTR);
  369.         virtual UINT     Save(UINT, LPTSTR);
  370.         virtual void     ErrorMessage(UINT);
  371.         virtual BOOL     Clip(HWND, BOOL);
  372.         virtual HGLOBAL  RenderFormat(UINT);
  373.         virtual BOOL     FQueryPaste(void);
  374.         virtual BOOL     Paste(HWND);
  375.         virtual void     Undo(void);
  376.         virtual BOOL     FQuerySave(void);
  377.         virtual void     Rename(LPTSTR);
  378.         virtual UINT     FilenameGet(LPTSTR, UINT);
  379.         virtual PCFrame  FrameGet(void);
  380.     };
  381. typedef CDocument *PCDocument;
  382. //Classname for documents, not localized
  383. #define SZCLASSDOCUMENT     TEXT("document")
  384. //Macro that isolates us from MDI or SDI Def procs
  385. #ifdef MDI
  386. #define DEFDOCUMENTPROC     DefMDIChildProc
  387. #else
  388. #define DEFDOCUMENTPROC     DefWindowProc
  389. #endif
  390. //Message to get PCDocument from hWnd
  391. #define DOCM_PDOCUMENT      (WM_USER+0)
  392. /**
  393.  ** CDocumentAdviseSink through which a document notifies the
  394.  ** frame or important events.
  395.  **/
  396. class CDocumentAdviseSink
  397.     {
  398.     protected:
  399.         LPVOID      m_pv;               //Customizable structure
  400.     public:
  401.         CDocumentAdviseSink(LPVOID);
  402.         virtual void OnDataChange(PCDocument);
  403.         virtual void OnCloseRequest(PCDocument);
  404.         virtual void OnSizeChange(PCDocument, LPRECT);
  405.         virtual void OnCaptionChange(PCDocument);
  406.         virtual void OnActivate(PCDocument);
  407.     };
  408. /**
  409.  ** CHatchWin when used as a parent window creates a thin
  410.  ** hatch border around the child window.
  411.  **/
  412. BOOL HatchWindowRegister(HINSTANCE);
  413. //Classname
  414. #define SZCLASSHATCHWIN                 TEXT("hatchwin")
  415. //Window extra bytes and offsets
  416. #define CBHATCHWNDEXTRA                 (sizeof(LONG))
  417. #define HWWL_STRUCTURE                  0
  418. //Notification codes for WM_COMMAND messages
  419. #define HWN_BORDERDOUBLECLICKED         1
  420. //Width of the border
  421. #define HATCHWIN_BORDERWIDTHDEFAULT     4
  422. class CHatchWin : public CWindow
  423.     {
  424.     friend LRESULT APIENTRY HatchWndProc(HWND, UINT, WPARAM, LPARAM);
  425.     public:
  426.         int         m_dBorder;
  427.         int         m_dBorderOrg;
  428.         UINT        m_uID;
  429.         HWND        m_hWndKid;
  430.         HWND        m_hWndAssociate;
  431.         RECT        m_rcPos;
  432.         RECT        m_rcClip;
  433.     public:
  434.         CHatchWin(HINSTANCE);
  435.         ~CHatchWin(void);
  436.         BOOL        Init(HWND, UINT, HWND);
  437.         HWND        HwndAssociateSet(HWND);
  438.         HWND        HwndAssociateGet(void);
  439.         void        RectsSet(LPRECT, LPRECT);
  440.         void        ChildSet(HWND);
  441.         void        ShowHatch(BOOL);
  442.     };
  443. typedef CHatchWin *PCHatchWin;
  444. #endif //_CLASSLIB_H_