Annotation of mstools/mfc/include/afxwin.h, revision 1.1.1.1

1.1       root        1: // Microsoft Foundation Classes C++ library.
                      2: // Copyright (C) 1992 Microsoft Corporation,
                      3: // All rights reserved.
                      4: 
                      5: // This source code is only intended as a supplement to the
                      6: // Microsoft Foundation Classes Reference and Microsoft
                      7: // QuickHelp documentation provided with the library.
                      8: // See these sources for detailed information regarding the
                      9: // Microsoft Foundation Classes product.
                     10: 
                     11: #ifndef __AFXWIN_H__
                     12: #define __AFXWIN_H__
                     13: 
                     14: /////////////////////////////////////////////////////////////////////////////
                     15: // Classes declared in this file
                     16: 
                     17: class CSize;
                     18: class CPoint;
                     19: class CRect;
                     20: 
                     21: //CObject
                     22:        // CException
                     23:                class CResourceException; // Win resource failure exception
                     24: 
                     25:        class CGdiObject;             // CDC drawing tool
                     26:                class CPen;               // a pen / HPEN wrapper
                     27:                class CBrush;             // a brush / HBRUSH wrapper
                     28:                class CFont;              // a font / HFONT wrapper
                     29:                class CBitmap;            // a bitmap / HBITMAP wrapper
                     30:                class CPalette;           // a palette / HPALLETE wrapper
                     31:                class CRgn;               // a region / HRGN wrapper
                     32: 
                     33:        class CDC;                    // a Display Context / HDC wrapper
                     34:                class CClientDC;          // CDC for client of window
                     35:                class CWindowDC;          // CDC for entire window
                     36:                class CPaintDC;           // embeddable BeginPaint struct helper
                     37: 
                     38:        class CMenu;                  // a menu / HMENU wrapper
                     39: 
                     40:        class CWnd;                   // a window / HWND wrapper
                     41:                class CDialog;            // a dialog
                     42: 
                     43:                // controls
                     44:                class CStatic;            // Static control
                     45:                class CButton;            // Button control
                     46:                        class CBitmapButton;  // Bitmap button (self-draw)
                     47:                class CListBox;           // ListBox control
                     48:                class CComboBox;          // ComboBox control
                     49:                class CEdit;              // Edit control
                     50:                class CScrollBar;         // ScrollBar control
                     51: 
                     52:                // frame windows
                     53:                class CFrameWnd;          // standard SDI frame
                     54:                        class CMDIFrameWnd;   // standard MDI frame
                     55:                        class CMDIChildWnd;   // standard MDI child
                     56: 
                     57:        class CWinApp;                // simple application base class
                     58: 
                     59: /////////////////////////////////////////////////////////////////////////////
                     60: // Make sure 'afx.h' is included first
                     61: 
                     62: #ifndef __AFX_H__
                     63: #ifndef _WINDOWS
                     64: #define _WINDOWS
                     65: #endif
                     66: #include "afx.h"
                     67: #else
                     68: #ifndef _WINDOWS
                     69:        #error Please #define _WINDOWS before including afx.h
                     70: #endif
                     71: #endif
                     72: 
                     73: // we must include certain parts of Windows.h
                     74: #undef NOKERNEL
                     75: #undef NOGDI
                     76: #undef NOUSER
                     77: #undef NOSOUND
                     78: #undef NOCOMM
                     79: #undef NODRIVERS
                     80: #undef NOLOGERROR
                     81: #undef NOPROFILER
                     82: #undef NOMEMMGR
                     83: #undef NOLFILEIO
                     84: #undef NOOPENFILE
                     85: #undef NORESOURCE
                     86: #undef NOATOM
                     87: #undef NOLANGUAGE
                     88: #undef NOLSTRING
                     89: #undef NODBCS
                     90: #undef NOKEYBOARDINFO
                     91: #undef NOGDICAPMASKS
                     92: #undef NOCOLOR
                     93: #undef NOGDIOBJ
                     94: #undef NODRAWTEXT
                     95: #undef NOTEXTMETRIC
                     96: #undef NOSCALABLEFONT
                     97: #undef NOBITMAP
                     98: #undef NORASTEROPS
                     99: #undef NOMETAFILE
                    100: #undef NOSYSMETRICS
                    101: #undef NOSYSTEMPARAMSINFO
                    102: #undef NOMSG
                    103: #undef NOWINSTYLES
                    104: #undef NOWINOFFSETS
                    105: #undef NOSHOWWINDOW
                    106: #undef NODEFERWINDOWPOS
                    107: #undef NOVIRTUALKEYCODES
                    108: #undef NOKEYSTATES
                    109: #undef NOWH
                    110: #undef NOMENUS
                    111: #undef NOSCROLL
                    112: #undef NOCLIPBOARD
                    113: #undef NOICONS
                    114: #undef NOMB
                    115: #undef NOSYSCOMMANDS
                    116: #undef NOMDI
                    117: #undef NOCTLMGR
                    118: #undef NOWINMESSAGES
                    119: 
                    120: // The MFC library MUST be built with WINVER >= 0x030A (the default)
                    121: // even when Windows 3.0 is the target.  There are no compatability
                    122: // issues, rather this is done for source code maintainability.
                    123: 
                    124: // MFC applications may be built with WINVER == 0x300 (Win 3.0 only)
                    125: // or WINVER == 0x030A (Win 3.1/3.0)
                    126: 
                    127: #ifdef STRICT
                    128: // The default for MFC is not STRICT, since C++ and MFC
                    129: // provide all of the same benefits (see TN012.TXT).  If
                    130: // you wish to use STRICT typechecking, then you must rebuild
                    131: // the library after removing the following #undef.
                    132: #undef STRICT
                    133: #endif
                    134: 
                    135: extern "C" {
                    136: #include "windows.h"
                    137: }
                    138: 
                    139: #ifndef WINVER
                    140:        #error Please include the correct WINDOWS.H (from \C700\INCLUDE)
                    141: #endif
                    142: 
                    143: #ifdef _NTWIN
                    144: // private header file for Windows NT 
                    145: #include "afxnt.h"
                    146: #endif //_NTWIN
                    147: 
                    148: #ifndef __AFXRES_H__
                    149: #include "afxres.h"     // standard resource IDs
                    150: #endif
                    151: 
                    152: #ifndef EXPORT
                    153: #define EXPORT __export
                    154: #endif
                    155: #ifdef _WINDLL
                    156: #define AFX_EXPORT  __loadds
                    157: #else
                    158: #define AFX_EXPORT  EXPORT
                    159: #endif
                    160: 
                    161: // Type modifier for message handlers
                    162: #define afx_msg         /* intentional placeholder */
                    163: 
                    164: /////////////////////////////////////////////////////////////////////////////
                    165: // CSize - An extent, similar to Windows SIZE structure.
                    166: 
                    167: #if (WINVER < 0x030a)
                    168: typedef struct tagSIZE
                    169: {
                    170:        int cx;
                    171:        int cy;
                    172: } SIZE;
                    173: typedef SIZE*       PSIZE;
                    174: typedef SIZE NEAR* NPSIZE;
                    175: typedef SIZE FAR*  LPSIZE;
                    176: #endif  /* WINVER < 0x030a */
                    177: 
                    178: class CSize : public tagSIZE
                    179: {
                    180: public:
                    181: 
                    182: // Constructors
                    183:        CSize();
                    184:        CSize(int initCX, int initCY);
                    185:        CSize(SIZE initSize);
                    186:        CSize(POINT initPt);
                    187:        CSize(DWORD dwSize);
                    188: 
                    189: // Operations
                    190:        BOOL operator==(SIZE size) const;
                    191:        BOOL operator!=(SIZE size) const;
                    192:        void operator+=(SIZE size);
                    193:        void operator-=(SIZE size);
                    194: 
                    195: // Operators returning CSize values
                    196:        CSize operator+(SIZE size) const;
                    197:        CSize operator-(SIZE size) const;
                    198: };
                    199: 
                    200: /////////////////////////////////////////////////////////////////////////////
                    201: // CPoint - A 2-D point, similar to Windows POINT structure.
                    202: 
                    203: class CPoint : public tagPOINT
                    204: {
                    205: public:
                    206: 
                    207: // Constructors
                    208:        CPoint();
                    209:        CPoint(int initX, int initY);
                    210:        CPoint(POINT initPt);
                    211:        CPoint(SIZE initSize);
                    212:        CPoint(DWORD dwPoint);
                    213: 
                    214: // Operations
                    215:        void Offset(int xOffset, int yOffset);
                    216:        void Offset(POINT point);
                    217:        void Offset(SIZE size);
                    218:        BOOL operator==(POINT point) const;
                    219:        BOOL operator!=(POINT point) const;
                    220:        void operator+=(SIZE size);
                    221:        void operator-=(SIZE size);
                    222: 
                    223: // Operators returning CPoint values
                    224:        CPoint operator+(SIZE size) const;
                    225:        CPoint operator-(SIZE size) const;
                    226: 
                    227: // Operators returning CSize values
                    228:        CSize operator-(POINT point) const;
                    229: };
                    230: 
                    231: /////////////////////////////////////////////////////////////////////////////
                    232: // CRect - A 2-D rectangle, similar to Windows RECT structure.
                    233: 
                    234: class CRect : public tagRECT
                    235: {
                    236: public:
                    237: 
                    238: // Constructors
                    239:        CRect();
                    240:        CRect(int l, int t, int r, int b);
                    241:        CRect(const RECT& srcRect);
                    242:        CRect(LPRECT lpSrcRect);
                    243:        CRect(POINT point, SIZE size);
                    244: 
                    245: // Attributes (in addition to RECT members)
                    246:        int Width() const;
                    247:        int Height() const;
                    248:        CSize Size() const;
                    249:        CPoint& TopLeft();
                    250:        CPoint& BottomRight();
                    251: 
                    252:        // convert between CRect and LPRECT (no need for &)
                    253:        operator LPRECT();
                    254: 
                    255:        BOOL IsRectEmpty() const;
                    256:        BOOL IsRectNull() const;
                    257:        BOOL PtInRect(POINT point) const;
                    258: 
                    259: // Operations (from standard Windows)
                    260:        void SetRect(int x1, int y1, int x2, int y2);
                    261:        void SetRectEmpty();
                    262:        void CopyRect(LPRECT lpSrcRect);
                    263:        BOOL EqualRect(LPRECT lpRect) const;
                    264: 
                    265:        void InflateRect(int x, int y);
                    266:        void InflateRect(SIZE size);
                    267:        void OffsetRect(int x, int y);
                    268:        void OffsetRect(SIZE size);
                    269:        void OffsetRect(POINT point);
                    270: 
                    271:        // operations that fill '*this' with result
                    272:        int IntersectRect(LPRECT lpRect1, LPRECT lpRect2);
                    273:        int UnionRect(LPRECT lpRect1, LPRECT lpRect2);
                    274: #if (WINVER >= 0x030a)
                    275:        BOOL SubtractRect(LPRECT lpRectSrc1, LPRECT lpRectSrc2);
                    276: #endif /* WINVER >= 0x030a */
                    277: 
                    278: // Additional Operations
                    279:        void operator=(const RECT& srcRect);
                    280:        BOOL operator==(const RECT& rect) const;
                    281:        BOOL operator!=(const RECT& rect) const;
                    282:        void operator+=(POINT point);
                    283:        void operator-=(POINT point);
                    284:        void operator&=(const RECT& rect);
                    285:        void operator|=(const RECT& rect);
                    286: 
                    287: // Operators returning CRect values
                    288:        CRect operator+(POINT point) const;
                    289:        CRect operator-(POINT point) const;
                    290:        CRect operator&(const RECT& rect2) const;
                    291:        CRect operator|(const RECT& rect2) const;
                    292: };
                    293: 
                    294: #ifdef _DEBUG
                    295: // Diagnostic Output
                    296: CDumpContext& operator<<(CDumpContext& dc, SIZE size);
                    297: CDumpContext& operator<<(CDumpContext& dc, POINT point);
                    298: CDumpContext& operator<<(CDumpContext& dc, const RECT& rect);
                    299: #endif //_DEBUG
                    300: 
                    301: // Serialization
                    302: CArchive& operator<<(CArchive& ar, SIZE size);
                    303: CArchive& operator<<(CArchive& ar, POINT point);
                    304: CArchive& operator<<(CArchive& ar, const RECT& rect);
                    305: CArchive& operator>>(CArchive& ar, SIZE& size);
                    306: CArchive& operator>>(CArchive& ar, POINT& point);
                    307: CArchive& operator>>(CArchive& ar, RECT& rect);
                    308: 
                    309: /////////////////////////////////////////////////////////////////////////////
                    310: // Standard exception for resource failures
                    311: 
                    312: class CResourceException : public CException
                    313: {
                    314:        DECLARE_DYNAMIC(CResourceException)
                    315: public:
                    316:        CResourceException();
                    317: };
                    318: 
                    319: void AfxThrowResourceException();
                    320: 
                    321: /////////////////////////////////////////////////////////////////////////////
                    322: // CGdiObject abstract class for CDC SelectObject
                    323: 
                    324: class CGdiObject : public CObject
                    325: {
                    326:        DECLARE_DYNAMIC(CGdiObject)
                    327: public:
                    328: 
                    329: // Attributes
                    330:        HANDLE m_hObject;
                    331:        HANDLE GetSafeHandle() const;
                    332: 
                    333:        static CGdiObject* FromHandle(HANDLE hObject);
                    334:        static void DeleteTempMap();
                    335:        BOOL Attach(HANDLE hObject);
                    336:        HANDLE Detach();
                    337: 
                    338: // Constructors
                    339:        CGdiObject(); // must Create a derived class object
                    340:        virtual ~CGdiObject();
                    341:        BOOL DeleteObject();
                    342: 
                    343: // Operations
                    344:        int GetObject(int nCount, void FAR* lpObject) const;
                    345:        BOOL CreateStockObject(int nIndex);
                    346:        BOOL UnrealizeObject();
                    347: 
                    348: // Implementation
                    349: #ifdef _DEBUG
                    350:        virtual void Dump(CDumpContext& dc) const;
                    351: #endif
                    352: };
                    353: 
                    354: /////////////////////////////////////////////////////////////////////////////
                    355: // CGdiObject subclasses (drawing tools)
                    356: 
                    357: class CPen : public CGdiObject
                    358: {
                    359:        DECLARE_DYNAMIC(CPen)
                    360: 
                    361: public:
                    362:        static CPen* FromHandle(HPEN hPen);
                    363: 
                    364: // Constructors
                    365:        CPen();
                    366:        CPen(int nPenStyle, int nWidth, DWORD crColor);
                    367:        BOOL CreatePen(int nPenStyle, int nWidth, DWORD crColor);
                    368:        BOOL CreatePenIndirect(LPLOGPEN lpLogPen);
                    369: };
                    370: 
                    371: class CBrush : public CGdiObject
                    372: {
                    373:        DECLARE_DYNAMIC(CBrush)
                    374: 
                    375: public:
                    376:        static CBrush* FromHandle(HBRUSH hBrush);
                    377: 
                    378: // Constructors
                    379:        CBrush();
                    380:        CBrush(DWORD crColor);             // CreateSolidBrush
                    381:        CBrush(int nIndex, DWORD crColor); // CreateHatchBrush
                    382:        CBrush(CBitmap* pBitmap);          // CreatePatternBrush
                    383: 
                    384:        BOOL CreateSolidBrush(DWORD crColor);
                    385:        BOOL CreateHatchBrush(int nIndex, DWORD crColor);
                    386:        BOOL CreateBrushIndirect(LPLOGBRUSH lpLogBrush);
                    387:        BOOL CreatePatternBrush(CBitmap* pBitmap);
                    388:        BOOL CreateDIBPatternBrush(GLOBALHANDLE hPackedDIB, UINT nUsage);
                    389: };
                    390: 
                    391: class CFont : public CGdiObject
                    392: {
                    393:        DECLARE_DYNAMIC(CFont)
                    394: 
                    395: public:
                    396:        static CFont* FromHandle(HFONT hFont);
                    397: 
                    398: // Constructors
                    399:        CFont();
                    400:        BOOL CreateFontIndirect(LPLOGFONT lpLogFont);
                    401:        BOOL CreateFont(int nHeight, int nWidth, int nEscapement,
                    402:                          int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline,
                    403:                          BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision,
                    404:                          BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily,
                    405:                          LPCSTR lpFacename);
                    406: };
                    407: 
                    408: 
                    409: class CBitmap : public CGdiObject
                    410: {
                    411:        DECLARE_DYNAMIC(CBitmap)
                    412: 
                    413: public:
                    414:        static CBitmap* FromHandle(HBITMAP hBitmap);
                    415: 
                    416: // Constructors
                    417:        CBitmap();
                    418: 
                    419:        BOOL LoadBitmap(LPCSTR lpBitmapName);
                    420:        BOOL LoadBitmap(UINT nIDBitmap);
                    421:        BOOL LoadOEMBitmap(UINT nIDBitmap); // for OBM_/OCR_/OIC_
                    422:        BOOL CreateBitmap(int nWidth, int nHeight, BYTE nPlanes, BYTE nBitcount,
                    423:                        const void FAR* lpBits);
                    424:        BOOL CreateBitmapIndirect(LPBITMAP lpBitmap);
                    425:        BOOL CreateCompatibleBitmap(CDC* pDC, int nWidth, int nHeight);
                    426:        BOOL CreateDiscardableBitmap(CDC* pDC, int nWidth, int nHeight);
                    427: 
                    428: // Operations
                    429:        DWORD SetBitmapBits(DWORD dwCount, const void FAR* lpBits);
                    430:        DWORD GetBitmapBits(DWORD dwCount, void FAR* lpBits) const;
                    431:        CSize SetBitmapDimension(int nWidth, int nHeight);
                    432:        CSize GetBitmapDimension() const;
                    433: };
                    434: 
                    435: class CPalette : public CGdiObject
                    436: {
                    437:        DECLARE_DYNAMIC(CPalette)
                    438: 
                    439: public:
                    440:        static CPalette* FromHandle(HPALETTE hPalette);
                    441: 
                    442: // Constructors
                    443:        CPalette();
                    444:        BOOL CreatePalette(LPLOGPALETTE lpLogPalette);
                    445: 
                    446: // Operations
                    447:        UINT GetPaletteEntries(UINT nStartIndex, UINT nNumEntries,
                    448:                          LPPALETTEENTRY lpPaletteColors) const;
                    449:        UINT SetPaletteEntries(UINT nStartIndex, UINT nNumEntries,
                    450:                          LPPALETTEENTRY lpPaletteColors);
                    451:        void AnimatePalette(UINT nStartIndex, UINT nNumEntries,
                    452:                          LPPALETTEENTRY lpPaletteColors);
                    453:        UINT GetNearestPaletteIndex(DWORD crColor) const;
                    454:        BOOL ResizePalette(UINT nNumEntries);
                    455: };
                    456: 
                    457: class CRgn : public CGdiObject
                    458: {
                    459:        DECLARE_DYNAMIC(CRgn)
                    460: 
                    461: public:
                    462:        static CRgn* FromHandle(HRGN hRgn);
                    463: 
                    464: // Constructors
                    465:        CRgn();
                    466:        BOOL CreateRectRgn(int x1, int y1, int x2, int y2);
                    467:        BOOL CreateRectRgnIndirect(LPRECT lpRect);
                    468:        BOOL CreateEllipticRgn(int x1, int y1, int x2, int y2);
                    469:        BOOL CreateEllipticRgnIndirect(LPRECT lpRect);
                    470:        BOOL CreatePolygonRgn(LPPOINT lpPoints, int nCount, int nMode);
                    471:        BOOL CreatePolyPolygonRgn(LPPOINT lpPoints, LPINT lpPolyCounts,
                    472:                        int nCount, int nPolyFillMode);
                    473:        BOOL CreateRoundRectRgn(int x1, int y1, int x2, int y2,
                    474:                        int x3, int y3);
                    475: 
                    476: // Operations
                    477:        void SetRectRgn(int x1, int y1, int x2, int y2);
                    478:        void SetRectRgn(LPRECT lpRect);
                    479:        int  CombineRgn(CRgn* pRgn1, CRgn* pRgn2, int nCombineMode);
                    480:        int  CopyRgn(CRgn* pRgnSrc);
                    481:        BOOL EqualRgn(CRgn* pRgn) const;
                    482:        int  OffsetRgn(int x, int y);
                    483:        int  OffsetRgn(POINT point);
                    484:        int  GetRgnBox(LPRECT lpRect) const;
                    485:        BOOL PtInRegion(int x, int y) const;
                    486:        BOOL PtInRegion(POINT point) const;
                    487:        BOOL RectInRegion(LPRECT lpRect) const;
                    488: };
                    489: 
                    490: /////////////////////////////////////////////////////////////////////////////
                    491: // The device context
                    492: 
                    493: class CDC : public CObject
                    494: {
                    495:        DECLARE_DYNAMIC(CDC)
                    496: public:
                    497: 
                    498: // Attributes
                    499:        HDC m_hDC;
                    500:        HDC GetSafeHdc() const;
                    501: 
                    502:        static CDC* FromHandle(HDC hDC);
                    503:        static void DeleteTempMap();
                    504:        BOOL Attach(HDC hDC);
                    505:        HDC  Detach();
                    506: 
                    507: // Constructors
                    508:        CDC();
                    509: 
                    510:        BOOL CreateDC(LPCSTR lpDriverName, LPCSTR lpDeviceName,
                    511:                        LPCSTR lpOutput, const void FAR* lpInitData);
                    512:        BOOL CreateIC(LPCSTR lpDriverName, LPCSTR lpDeviceName,
                    513:                        LPCSTR lpOutput, const void FAR* lpInitData);
                    514:        BOOL CreateCompatibleDC(CDC* pDC);
                    515: 
                    516:        BOOL DeleteDC();
                    517:        virtual ~CDC();
                    518: 
                    519: // Implementation support
                    520: #ifdef _DEBUG
                    521:        virtual void AssertValid() const;
                    522:        virtual void Dump(CDumpContext& dc) const;
                    523: #endif
                    524: 
                    525: protected:
                    526:        static CGdiObject* SelectGdiObject(HDC hDC, HANDLE h);
                    527: public:
                    528: 
                    529: // Device-Context Functions
                    530: #ifndef _NTWIN
                    531:        CPoint GetDCOrg() const;
                    532: #endif
                    533:        int SaveDC() const;
                    534:        BOOL RestoreDC(int nSavedDC);
                    535:        int GetDeviceCaps(int nIndex) const;
                    536: 
                    537: // Drawing-Tool Functions
                    538:        CPoint GetBrushOrg() const;
                    539:        CPoint SetBrushOrg(int x, int y);
                    540:        CPoint SetBrushOrg(POINT point);
                    541:        int EnumObjects(int nObjectType,
                    542:                                        int (FAR PASCAL EXPORT* lpfn)(LPSTR, LPSTR),
                    543:                                        LPSTR lpData);
                    544: 
                    545: // type-safe selection helpers
                    546:        CGdiObject* SelectObject(CGdiObject* pObject);  // do not use for regions
                    547:        CGdiObject* SelectStockObject(int nIndex);
                    548:        CPen* SelectObject(CPen* pPen);
                    549:        CBrush* SelectObject(CBrush* pBrush);
                    550:        CFont* SelectObject(CFont* pFont);
                    551:        CBitmap* SelectObject(CBitmap* pBitmap);
                    552:        int SelectObject(CRgn* pRgn);       // special return for regions
                    553: 
                    554: // Color and Color Palette Functions
                    555:        DWORD GetNearestColor(DWORD crColor) const;
                    556:        CPalette* SelectPalette(CPalette* pPalette, BOOL bForceBackground);
                    557:        UINT RealizePalette();
                    558:        void UpdateColors();
                    559: 
                    560: // Drawing-Attribute Functions
                    561:        DWORD GetBkColor() const;
                    562:        DWORD SetBkColor(DWORD crColor);
                    563:        int GetBkMode() const;
                    564:        int SetBkMode(int nBkMode);
                    565:        int GetPolyFillMode() const;
                    566:        int SetPolyFillMode(int nPolyFillMode);
                    567:        int GetROP2() const;
                    568:        int SetROP2(int nDrawMode);
                    569:        int GetStretchBltMode() const;
                    570:        int SetStretchBltMode(int nStretchMode);
                    571:        DWORD GetTextColor() const;
                    572:        DWORD SetTextColor(DWORD crColor);
                    573: 
                    574: // Mapping Functions
                    575:        int GetMapMode() const;
                    576:        int SetMapMode(int nMapMode);
                    577:        // Viewport Origin
                    578:        CPoint GetViewportOrg() const;
                    579:        CPoint SetViewportOrg(int x, int y);
                    580:        CPoint SetViewportOrg(POINT point);
                    581:        CPoint OffsetViewportOrg(int nWidth, int nHeight);
                    582: 
                    583:        // Viewport Extent
                    584:        CSize GetViewportExt() const;
                    585:        CSize SetViewportExt(int x, int y);
                    586:        CSize SetViewportExt(SIZE size);
                    587:        CSize ScaleViewportExt(int xNum, int xDenom, int yNum, int yDenom);
                    588: 
                    589:        // Window Origin
                    590:        CPoint GetWindowOrg() const;
                    591:        CPoint SetWindowOrg(int x, int y);
                    592:        CPoint SetWindowOrg(POINT point);
                    593:        CPoint OffsetWindowOrg(int nWidth, int nHeight);
                    594: 
                    595:        // Window extent
                    596:        CSize GetWindowExt() const;
                    597:        CSize SetWindowExt(int x, int y);
                    598:        CSize SetWindowExt(SIZE size);
                    599:        CSize ScaleWindowExt(int xNum, int xDenom, int yNum, int yDenom);
                    600: 
                    601: // Coordinate Functions
                    602:        void DPtoLP(LPPOINT lpPoints, int nCount = 1) const;
                    603:        void DPtoLP(LPRECT lpRect) const;
                    604:        void LPtoDP(LPPOINT lpPoints, int nCount = 1) const;
                    605:        void LPtoDP(LPRECT lpRect) const;
                    606: 
                    607: // Region Functions
                    608:        BOOL FillRgn(CRgn* pRgn, CBrush* pBrush);
                    609:        BOOL FrameRgn(CRgn* pRgn, CBrush* pBrush, int nWidth, int nHeight);
                    610:        BOOL InvertRgn(CRgn* pRgn);
                    611:        BOOL PaintRgn(CRgn* pRgn);
                    612: 
                    613: // Clipping Functions
                    614:        int GetClipBox(LPRECT lpRect) const;
                    615:        int SelectClipRgn(CRgn* pRgn);
                    616:        int ExcludeClipRect(int x1, int y1, int x2, int y2);
                    617:        int ExcludeClipRect(LPRECT lpRect);
                    618:        int ExcludeUpdateRgn(CWnd* pWnd);
                    619:        int IntersectClipRect(int x1, int y1, int x2, int y2);
                    620:        int IntersectClipRect(LPRECT lpRect);
                    621:        int OffsetClipRgn(int x, int y);
                    622:        int OffsetClipRgn(SIZE size);
                    623:        BOOL PtVisible(int x, int y) const;
                    624:        BOOL PtVisible(POINT point) const;
                    625:        BOOL RectVisible(LPRECT lpRect) const;
                    626: 
                    627: // Line-Output Functions
                    628:        CPoint GetCurrentPosition() const;
                    629:        CPoint MoveTo(int x, int y);
                    630:        CPoint MoveTo(POINT point);
                    631:        BOOL LineTo(int x, int y);
                    632:        BOOL LineTo(POINT point);
                    633:        BOOL Arc(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
                    634:        BOOL Arc(LPRECT lpRect, POINT ptStart, POINT ptEnd);
                    635:        BOOL Polyline(LPPOINT lpPoints, int nCount);
                    636: 
                    637: // Simple Drawing Functions
                    638:        void FillRect(LPRECT lpRect, CBrush* pBrush);
                    639:        void FrameRect(LPRECT lpRect, CBrush* pBrush);
                    640:        void InvertRect(LPRECT lpRect);
                    641:        BOOL DrawIcon(int x, int y, HICON hIcon);
                    642:        BOOL DrawIcon(POINT point, HICON hIcon);
                    643: 
                    644: // Ellipse and Polygon Functions
                    645:        BOOL Chord(int x1, int y1, int x2, int y2, int x3, int y3,
                    646:                           int x4, int y4);
                    647:        BOOL Chord(LPRECT lpRect, POINT ptStart, POINT ptEnd);
                    648:        void DrawFocusRect(LPRECT lpRect);
                    649:        BOOL Ellipse(int x1, int y1, int x2, int y2);
                    650:        BOOL Ellipse(LPRECT lpRect);
                    651:        BOOL Pie(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
                    652:        BOOL Pie(LPRECT lpRect, POINT ptStart, POINT ptEnd);
                    653:        BOOL Polygon(LPPOINT lpPoints, int nCount);
                    654:        BOOL PolyPolygon(LPPOINT lpPoints, LPINT lpPolyCounts, int nCount);
                    655:        BOOL Rectangle(int x1, int y1, int x2, int y2);
                    656:        BOOL Rectangle(LPRECT lpRect);
                    657:        BOOL RoundRect(int x1, int y1, int x2, int y2, int x3, int y3);
                    658:        BOOL RoundRect(LPRECT lpRect, POINT point);
                    659: 
                    660: // Bitmap Function
                    661:        BOOL PatBlt(int x, int y, int nWidth, int nHeight, DWORD dwRop);
                    662:        BOOL BitBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC,
                    663:                                int xSrc, int ySrc, DWORD dwRop);
                    664:        BOOL StretchBlt(int x, int y, int nWidth, int nHeight, CDC* pSrcDC,
                    665:                        int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop);
                    666:        DWORD GetPixel(int x, int y) const;
                    667:        DWORD GetPixel(POINT point) const;
                    668:        DWORD SetPixel(int x, int y, DWORD crColor);
                    669:        DWORD SetPixel(POINT point, DWORD crColor);
                    670:        BOOL FloodFill(int x, int y, DWORD crColor);
                    671:        BOOL ExtFloodFill(int x, int y, DWORD crColor, UINT nFillType);
                    672: 
                    673: // Text Functions
                    674:        BOOL TextOut(int x, int y, const CString& str);
                    675:        BOOL TextOut(int x, int y, LPCSTR lpString, int nCount);
                    676:        BOOL ExtTextOut(int x, int y, UINT nOptions, LPRECT lpRect,
                    677:                        LPCSTR lpString, UINT nCount, LPINT lpDxWidths);
                    678:        CSize TabbedTextOut(int x, int y, LPCSTR lpString, int nCount,
                    679:                        int nTabPositions, LPINT lpnTabStopPositions, int nTabOrigin);
                    680:        int DrawText(LPCSTR lpString, int nCount, LPRECT lpRect,
                    681:                                        UINT nFormat);
                    682:        CSize GetTextExtent(LPCSTR lpString, int nCount) const;
                    683:        CSize GetTabbedTextExtent(LPCSTR lpString, int nCount,
                    684:                        int nTabPositions, LPINT lpnTabStopPositions) const;
                    685:        BOOL GrayString(CBrush* pBrush,
                    686:                                BOOL (FAR PASCAL EXPORT* lpfnOutput)(HDC, DWORD, int),
                    687:                                        DWORD lpData, int nCount,
                    688:                                        int x, int y, int nWidth, int nHeight);
                    689:        UINT GetTextAlign() const;
                    690:        UINT SetTextAlign(UINT nFlags);
                    691:        int GetTextFace(int nCount, LPSTR lpFacename) const;
                    692:        BOOL GetTextMetrics(LPTEXTMETRIC lpMetrics) const;
                    693:        int SetTextJustification(int nBreakExtra, int nBreakCount);
                    694:        int GetTextCharacterExtra() const;
                    695:        int SetTextCharacterExtra(int nCharExtra);
                    696: 
                    697: // Font Functions
                    698:        BOOL GetCharWidth(UINT nFirstChar, UINT nLastChar, LPINT lpBuffer) const;
                    699:        DWORD SetMapperFlags(DWORD dwFlag);
                    700:        CSize GetAspectRatioFilter() const;
                    701: 
                    702: // Printer Escape Functions
                    703:        int Escape(int nEscape, int nCount, LPCSTR lpInData, void FAR* lpOutData);
                    704: 
                    705:        // Escape helpers
                    706: #ifndef _NTWIN
                    707:        int StartDoc(LPCSTR pDocName); 
                    708:                                // Windows 3.1 use StartDoc(LPDOCINFO lpDocInfo)
                    709: #endif
                    710:        int StartPage();
                    711:        int EndPage();
                    712:        int SetAbortProc(BOOL (FAR PASCAL EXPORT* lpfn)(HDC, int));
                    713:        int AbortDoc();
                    714:        int EndDoc();
                    715: 
                    716: // Scrolling Functions
                    717:        BOOL ScrollDC(int dx, int dy, LPRECT lpRectScroll, LPRECT lpRectClip,
                    718:                                        CRgn* pRgnUpdate, LPRECT lpRectUpdate);
                    719: 
                    720: // MetaFile Functions
                    721:        BOOL PlayMetaFile(HANDLE hMF);
                    722: 
                    723: // Windows 3.1 Specific GDI functions
                    724: #if (WINVER >= 0x030a)
                    725:        BOOL QueryAbort() const;
                    726:        UINT SetBoundsRect(const RECT FAR* lpRectBounds, UINT flags);
                    727:        UINT GetBoundsRect(LPRECT lpRectBounds, UINT flags);
                    728:        int StartDoc(LPDOCINFO lpDocInfo);
                    729:        BOOL GetCharABCWidths(UINT nFirst, UINT nLast, LPABC lpabc) const;
                    730:        DWORD GetFontData(DWORD dwTable, DWORD dwOffset, LPVOID lpData, DWORD cbData) const;
                    731:        int GetKerningPairs(int nPairs, KERNINGPAIR FAR* lpkrnpair) const;
                    732:        UINT GetOutlineTextMetrics(UINT cbData, OUTLINETEXTMETRIC FAR* lpotm) const;
                    733:        DWORD GetGlyphOutline(UINT nChar, UINT nFormat, GLYPHMETRICS FAR* lpgm, 
                    734:                DWORD cbBuffer, void FAR* lpBuffer, const MAT2 FAR* lpmat2) const;
                    735: #endif
                    736: 
                    737: };
                    738: 
                    739: /////////////////////////////////////////////////////////////////////////////
                    740: // CDC Helpers
                    741: 
                    742: class CClientDC : public CDC
                    743: {
                    744:        DECLARE_DYNAMIC(CClientDC)
                    745: 
                    746: // Constructors
                    747: public:
                    748:        CClientDC(CWnd* pWnd);
                    749: 
                    750: // Attributes
                    751: protected:
                    752:        HWND m_hWnd;
                    753: 
                    754: // Implementation
                    755: public:
                    756:        virtual ~CClientDC();
                    757: #ifdef _DEBUG
                    758:        virtual void AssertValid() const;
                    759:        virtual void Dump(CDumpContext& dc) const;
                    760: #endif
                    761: };
                    762: 
                    763: class CWindowDC : public CDC
                    764: {
                    765:        DECLARE_DYNAMIC(CWindowDC)
                    766: 
                    767: // Constructors
                    768: public:
                    769: 
                    770:        CWindowDC(CWnd* pWnd);
                    771: 
                    772: // Attributes
                    773: protected:
                    774:        HWND m_hWnd;
                    775: 
                    776: // Implementation
                    777: public:
                    778:        virtual ~CWindowDC();
                    779: #ifdef _DEBUG
                    780:        virtual void AssertValid() const;
                    781:        virtual void Dump(CDumpContext& dc) const;
                    782: #endif
                    783: };
                    784: 
                    785: class CPaintDC : public CDC
                    786: {
                    787:        DECLARE_DYNAMIC(CPaintDC)
                    788: 
                    789: // Constructors
                    790: public:
                    791:        CPaintDC(CWnd* pWnd);   // BeginPaint
                    792: 
                    793: // Attributes
                    794: protected:
                    795:        HWND m_hWnd;
                    796: public:
                    797:        PAINTSTRUCT m_ps;       // actual paint struct !
                    798: 
                    799: // Implementation
                    800:        virtual ~CPaintDC();
                    801: #ifdef _DEBUG
                    802:        virtual void AssertValid() const;
                    803:        virtual void Dump(CDumpContext& dc) const;
                    804: #endif
                    805: };
                    806: 
                    807: class CMetaFileDC : public CDC
                    808: {
                    809:        DECLARE_DYNAMIC(CMetaFileDC)
                    810: 
                    811: // Constructors
                    812: public:
                    813:        CMetaFileDC();
                    814:        BOOL Create(LPCSTR lpFilename = NULL);
                    815: 
                    816:        // Special close
                    817:        HANDLE  Close();
                    818: 
                    819: // Operations : selecting in a MetaFile DC returns a BOOL, not old object
                    820:        BOOL SelectObject(CGdiObject* pObject);
                    821:        BOOL SelectStockObject(int nIndex);
                    822: };
                    823: 
                    824: 
                    825: /////////////////////////////////////////////////////////////////////////////
                    826: // CMenu
                    827: 
                    828: class CMenu : public CObject
                    829: {
                    830:        DECLARE_DYNAMIC(CMenu)
                    831: public:
                    832: 
                    833: // Constructors
                    834:        CMenu();
                    835: 
                    836:        BOOL CreateMenu();
                    837:        BOOL CreatePopupMenu();
                    838:        BOOL LoadMenu(LPCSTR lpMenuName);
                    839:        BOOL LoadMenu(UINT nIDMenu);
                    840:        BOOL LoadMenuIndirect(const void FAR* lpMenuTemplate);
                    841:        BOOL DestroyMenu();
                    842: 
                    843: // Attributes
                    844:        HMENU m_hMenu;
                    845:        HMENU GetSafeHmenu() const;
                    846: 
                    847:        static CMenu* FromHandle(HMENU hMenu);
                    848:        static void DeleteTempMap();
                    849:        BOOL Attach(HMENU hMenu);
                    850:        HMENU Detach();
                    851: 
                    852: // CMenu Operations
                    853:        BOOL DeleteMenu(UINT nPosition, UINT nFlags);
                    854:        BOOL TrackPopupMenu(UINT nFlags, int x, int y,
                    855:                                                const CWnd* pWnd, const RECT FAR* lpRect = 0);
                    856: 
                    857: // CMenuItem Operations
                    858:        BOOL AppendMenu(UINT nFlags, UINT nIDNewItem = 0,
                    859:                                        LPCSTR lpNewItem = NULL);
                    860:        BOOL AppendMenu(UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp);
                    861:        BOOL CheckMenuItem(UINT nIDCheckItem, UINT nCheck);
                    862:        BOOL EnableMenuItem(UINT nIDEnableItem, UINT nEnable);
                    863:        UINT GetMenuItemCount() const;
                    864:        UINT GetMenuItemID(int nPos) const;
                    865:        UINT GetMenuState(UINT nID, UINT nFlags) const;
                    866:        int GetMenuString(UINT nIDItem, LPSTR lpString, int nMaxCount,
                    867:                                        UINT nFlags) const;
                    868:        CMenu* GetSubMenu(int nPos) const;
                    869:        BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem = 0,
                    870:                                        LPCSTR lpNewItem = NULL);
                    871:        BOOL InsertMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem,
                    872:                                        const CBitmap* pBmp);
                    873:        BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem = 0,
                    874:                                        LPCSTR lpNewItem = NULL);
                    875:        BOOL ModifyMenu(UINT nPosition, UINT nFlags, UINT nIDNewItem,
                    876:                                        const CBitmap* pBmp);
                    877:        BOOL RemoveMenu(UINT nPosition, UINT nFlags);
                    878:        BOOL SetMenuItemBitmaps(UINT nPosition, UINT nFlags,
                    879:                                        const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked);
                    880: 
                    881: // Overridables (must override draw and measure for owner-draw menu items)
                    882:        virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
                    883:        virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
                    884: 
                    885: // Implementation
                    886: #ifdef _DEBUG
                    887:        virtual void AssertValid() const;
                    888:        virtual void Dump(CDumpContext& dc) const;
                    889: #endif
                    890: 
                    891:        virtual ~CMenu();
                    892: };
                    893: 
                    894: /////////////////////////////////////////////////////////////////////////////
                    895: // Window wrapping message map
                    896: 
                    897: struct CMessageEntry;       // declared below after CWnd
                    898: struct NEAR CMessageMap
                    899: {
                    900:        CMessageMap*        pBaseMessageMap;
                    901:        CMessageEntry FAR*  lpEntries;
                    902: };
                    903: 
                    904: #define DECLARE_MESSAGE_MAP() \
                    905: private: \
                    906:        static CMessageEntry BASED_CODE _messageEntries[]; \
                    907: protected: \
                    908:        static CMessageMap messageMap; \
                    909:        virtual CMessageMap* GetMessageMap() const;
                    910: 
                    911: #define BEGIN_MESSAGE_MAP(theClass, baseClass) \
                    912:        CMessageMap* theClass::GetMessageMap() const \
                    913:                { return &theClass::messageMap; } \
                    914:        CMessageMap theClass::messageMap = \
                    915:        { &(baseClass::messageMap), \
                    916:                (CMessageEntry FAR*) &(theClass::_messageEntries) }; \
                    917:        CMessageEntry BASED_CODE theClass::_messageEntries[] = \
                    918:        {
                    919: 
                    920: #define END_MESSAGE_MAP() \
                    921:        { 0, 0, AfxSig_end, (AFX_PMSG)0 } \
                    922:        };
                    923: 
                    924: // Message map signature values and macros in separate header
                    925: #include "afxmsg.h"
                    926: 
                    927: /////////////////////////////////////////////////////////////////////////////
                    928: 
                    929: 
                    930: /////////////////////////////////////////////////////////////////////////////
                    931: // CWnd - a Microsoft Windows application window
                    932: 
                    933: class CWnd : public CObject
                    934: {
                    935:        DECLARE_DYNAMIC(CWnd)
                    936: protected:
                    937:        static const MSG* GetCurrentMessage();
                    938: 
                    939: // Attributes
                    940: public:
                    941:        HWND m_hWnd;
                    942: 
                    943:        HWND GetSafeHwnd() const;
                    944:        DWORD GetStyle() const;
                    945:        DWORD GetExStyle() const;
                    946: 
                    947: // Constructors and other creation
                    948:        CWnd();
                    949: 
                    950:        static CWnd* FromHandle(HWND hWnd);
                    951:        static CWnd* FromHandlePermanent(HWND hWnd);    // INTERNAL USE
                    952:        static void DeleteTempMap();
                    953:        BOOL Attach(HWND hWndNew);
                    954:        HWND Detach();
                    955:        BOOL SubclassWindow(HWND hWnd);
                    956:        BOOL SubclassDlgItem(UINT nID, CWnd* pParent);
                    957:                        // for dynamic subclassing of windows control
                    958: 
                    959: protected: // This CreateEx() wraps CreateWindowEx
                    960:        BOOL CreateEx(DWORD dwExStyle, LPCSTR lpClassName,
                    961:                LPCSTR lpWindowName, DWORD dwStyle,
                    962:                int x, int y, int nWidth, int nHeight,
                    963:                HWND hwndParent, HMENU nIDorHMenu);
                    964: 
                    965: private:
                    966:        CWnd(HWND hWnd);    // just for special initialization
                    967: 
                    968: public:
                    969:        // for child windows...
                    970:        BOOL Create(LPCSTR lpClassName,
                    971:                LPCSTR lpWindowName, DWORD dwStyle,
                    972:                const RECT& rect,
                    973:                const CWnd* pParentWnd, UINT nID);
                    974: 
                    975:        virtual BOOL DestroyWindow();
                    976: 
                    977: 
                    978: // Message Functions
                    979:        LONG SendMessage(UINT message, UINT wParam = 0, LONG lParam = 0);
                    980:        BOOL PostMessage(UINT message, UINT wParam = 0, LONG lParam = 0);
                    981: 
                    982: // Window Text Functions
                    983:        void SetWindowText(LPCSTR lpString);
                    984:        int GetWindowText(LPSTR lpString, int nMaxCount) const;
                    985:        int GetWindowTextLength() const;
                    986:        void GetWindowText(CString& rString) const;
                    987:        void SetFont(CFont* pFont, BOOL bRedraw = TRUE);
                    988:        CFont* GetFont();
                    989: 
                    990: // CMenu Functions - non-Child windows only
                    991:        CMenu* GetMenu() const;
                    992:        BOOL SetMenu(CMenu* pMenu);
                    993:        void DrawMenuBar();
                    994:        CMenu* GetSystemMenu(BOOL bRevert) const;
                    995:        BOOL HiliteMenuItem(CMenu* pMenu, UINT nIDHiliteItem, UINT nHilite);
                    996: 
                    997: // Special attributes for Child windows only
                    998:        int GetDlgCtrlID() const;
                    999: 
                   1000: // Window Size and Position Functions
                   1001:        void CloseWindow();
                   1002:        BOOL OpenIcon();
                   1003:        BOOL IsIconic() const;
                   1004:        BOOL IsZoomed() const;
                   1005:        void MoveWindow(int x, int y, int nWidth, int nHeight,
                   1006:                                BOOL bRepaint = TRUE);
                   1007:        void MoveWindow(LPRECT lpRect, BOOL bRepaint = TRUE);
                   1008: 
                   1009:        static const CWnd NEAR wndTop; // SetWindowPos's pWndInsertAfter
                   1010:        static const CWnd NEAR wndBottom; // SetWindowPos's pWndInsertAfter
                   1011: #if (WINVER >= 0x030a)
                   1012:        static const CWnd NEAR wndTopMost; // SetWindowPos's pWndInsertAfter (3.1)
                   1013:        static const CWnd NEAR wndNoTopMost; // SetWindowPos's pWndInsertAfter (3.1)
                   1014: #endif /* WINVER >= 0x030a */ 
                   1015: 
                   1016:        BOOL SetWindowPos(const CWnd* pWndInsertAfter, int x, int y,
                   1017:                                int cx, int cy, UINT nFlags);
                   1018:        UINT ArrangeIconicWindows();
                   1019:        void BringWindowToTop();
                   1020:        void GetWindowRect(LPRECT lpRect) const;
                   1021:        void GetClientRect(LPRECT lpRect) const;
                   1022: 
                   1023: #if (WINVER >= 0x030a)
                   1024:        BOOL GetWindowPlacement(WINDOWPLACEMENT FAR* lpwndpl) const;
                   1025:        BOOL SetWindowPlacement(const WINDOWPLACEMENT FAR* lpwndpl);
                   1026: #endif  /* WINVER >= 0x030a */
                   1027: 
                   1028: // Coordinate Mapping Functions
                   1029:        void ClientToScreen(LPPOINT lpPoint) const;
                   1030:        void ClientToScreen(LPRECT lpRect) const;
                   1031:        void ScreenToClient(LPPOINT lpPoint) const;
                   1032:        void ScreenToClient(LPRECT lpRect) const;
                   1033: #if (WINVER >= 0x030a)
                   1034:        void MapWindowPoints(CWnd* pwndTo, LPPOINT lpPoint, UINT nCount) const;
                   1035:        void MapWindowPoints(CWnd* pwndTo, LPRECT lpRect) const;
                   1036: #endif  /* WINVER >= 0x030a */
                   1037: 
                   1038: // Update/Painting Functions
                   1039:        CDC* BeginPaint(LPPAINTSTRUCT lpPaint);
                   1040:        void EndPaint(LPPAINTSTRUCT lpPaint);
                   1041:        CDC* GetDC();
                   1042:        CDC* GetWindowDC();
                   1043:        int ReleaseDC(CDC* pDC);
                   1044: 
                   1045:        void UpdateWindow();
                   1046:        void SetRedraw(BOOL bRedraw = TRUE);
                   1047:        BOOL GetUpdateRect(LPRECT lpRect, BOOL bErase = FALSE);
                   1048:        int GetUpdateRgn(CRgn* pRgn, BOOL bErase = FALSE);
                   1049:        void Invalidate(BOOL bErase = TRUE);
                   1050:        void InvalidateRect(LPRECT lpRect, BOOL bErase = TRUE);
                   1051:        void InvalidateRgn(CRgn* pRgn, BOOL bErase = TRUE);
                   1052:        void ValidateRect(LPRECT lpRect);
                   1053:        void ValidateRgn(CRgn* pRgn);
                   1054:        BOOL ShowWindow(int nCmdShow);
                   1055:        BOOL IsWindowVisible() const;
                   1056:        void ShowOwnedPopups(BOOL bShow = TRUE);
                   1057: 
                   1058: #if (WINVER >= 0x030a)
                   1059:        CDC* GetDCEx(CRgn* prgnClip, DWORD flags);
                   1060:        BOOL LockWindowUpdate();
                   1061:        BOOL RedrawWindow(const RECT FAR* lpRectUpdate = NULL, 
                   1062:                CRgn* prgnUpdate = NULL, 
                   1063:                UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE);
                   1064:        BOOL EnableScrollBar(int nSBFlags, UINT nArrowFlags = ESB_ENABLE_BOTH);
                   1065: #endif  /* WINVER >= 0x030a */
                   1066: 
                   1067: // Timer Functions
                   1068:        UINT SetTimer(int nIDEvent, UINT nElapse,
                   1069:                                        UINT (FAR PASCAL EXPORT* lpfnTimer)(HWND, UINT, int, DWORD));
                   1070:        BOOL KillTimer(int nIDEvent);
                   1071: 
                   1072: // Window State Functions
                   1073:        BOOL IsWindowEnabled() const;
                   1074:        BOOL EnableWindow(BOOL bEnable = TRUE);
                   1075: 
                   1076:        static CWnd* GetActiveWindow();
                   1077:        CWnd* SetActiveWindow();
                   1078: 
                   1079:        static CWnd* GetCapture();
                   1080:        CWnd* SetCapture();
                   1081:        static CWnd* GetFocus();
                   1082:        CWnd* SetFocus();
                   1083: 
                   1084:        CWnd* SetSysModalWindow();
                   1085:        static CWnd* GetSysModalWindow();
                   1086: 
                   1087:        static CWnd* GetDesktopWindow();
                   1088: 
                   1089: // Dialog-Box Item Functions
                   1090: // (NOTE: Dialog-Box Items are not necessarily in dialog boxes!)
                   1091:        void CheckDlgButton(int nIDButton, UINT nCheck);
                   1092:        void CheckRadioButton(int nIDFirstButton, int nIDLastButton,
                   1093:                                        int nIDCheckButton);
                   1094:        int GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton);
                   1095:        int DlgDirList(LPSTR lpPathSpec, int nIDListBox,
                   1096:                                        int nIDStaticPath, UINT nFileType);
                   1097:        int DlgDirListComboBox(LPSTR lpPathSpec, int nIDComboBox,
                   1098:                                        int nIDStaticPath, UINT nFileType);
                   1099:        BOOL DlgDirSelect(LPSTR lpString, int nIDListBox);
                   1100:        BOOL DlgDirSelectComboBox(LPSTR lpString, int nIDComboBox);
                   1101: 
                   1102:        CWnd* GetDlgItem(int nID) const;
                   1103:        UINT GetDlgItemInt(int nID, BOOL* lpTrans = NULL,
                   1104:                                        BOOL bSigned = TRUE) const;
                   1105:        int GetDlgItemText(int nID, LPSTR lpStr, int nMaxCount) const;
                   1106: 
                   1107:        CWnd* GetNextDlgGroupItem(CWnd* pWndCtl, BOOL bPrevious = FALSE) const;
                   1108: 
                   1109:        CWnd* GetNextDlgTabItem(CWnd* pWndCtl, BOOL bPrevious = FALSE) const;
                   1110:        UINT IsDlgButtonChecked(int nIDButton) const;
                   1111:        LONG SendDlgItemMessage(int nID, UINT message,
                   1112:                                        UINT wParam = 0, LONG lParam = 0);
                   1113:        void SetDlgItemInt(int nID, UINT nValue, BOOL bSigned = TRUE);
                   1114:        void SetDlgItemText(int nID, LPCSTR lpString);
                   1115: 
                   1116: // Scrolling Functions
                   1117:        int GetScrollPos(int nBar) const;
                   1118:        void GetScrollRange(int nBar, LPINT lpMinPos, LPINT lpMaxPos) const;
                   1119:        void ScrollWindow(int xAmount, int yAmount,
                   1120:                                        const RECT FAR* lpRect = NULL,
                   1121:                                        const RECT FAR* lpClipRect = NULL);
                   1122:        int SetScrollPos(int nBar, int nPos, BOOL bRedraw = TRUE);
                   1123:        void SetScrollRange(int nBar, int nMinPos, int nMaxPos,
                   1124:                          BOOL bRedraw = TRUE);
                   1125:        void ShowScrollBar(UINT nBar, BOOL bShow = TRUE);
                   1126: #if (WINVER >= 0x030a)
                   1127:        int ScrollWindowEx(int dx, int dy,
                   1128:                                const RECT FAR* lpRectScroll, const RECT FAR* lpRectClip,
                   1129:                                CRgn* prgnUpdate, LPRECT lpRectUpdate, UINT flags);
                   1130: #endif  /* WINVER >= 0x030a */
                   1131: 
                   1132: // Window Access Functions
                   1133:        CWnd* ChildWindowFromPoint(POINT point) const;
                   1134:        static CWnd* FindWindow(LPCSTR lpClassName, LPCSTR lpWindowName);
                   1135:        CWnd* GetNextWindow(UINT nFlag = GW_HWNDNEXT) const;
                   1136:        CWnd* GetTopWindow() const;
                   1137: 
                   1138:        CWnd* GetWindow(UINT nCmd) const;
                   1139:        CWnd* GetLastActivePopup() const;
                   1140: 
                   1141:        BOOL IsChild(CWnd* pWnd) const;
                   1142:        CWnd* GetParent() const;
                   1143:        CWnd* SetParent(CWnd* pWndNewParent);
                   1144:        static CWnd* WindowFromPoint(POINT point);
                   1145: 
                   1146: // Alert Functions
                   1147:        BOOL FlashWindow(BOOL bInvert);
                   1148:        int MessageBox(LPCSTR lpText, LPCSTR lpCaption = NULL,
                   1149:                          UINT nType = MB_OK);
                   1150: 
                   1151: // Clipboard Functions
                   1152:        BOOL ChangeClipboardChain(HWND hWndNext);
                   1153:        HWND SetClipboardViewer();
                   1154:        BOOL OpenClipboard();
                   1155:        static CWnd* GetClipboardOwner();
                   1156:        static CWnd* GetClipboardViewer();
                   1157: #if (WINVER >= 0x030a)
                   1158:        static CWnd* GetOpenClipboardWindow();
                   1159: #endif /* WINVER >= 0x030a */
                   1160: 
                   1161: // Caret Functions
                   1162:        void CreateCaret(CBitmap* pBitmap);
                   1163:        void CreateSolidCaret(int nWidth, int nHeight);
                   1164:        void CreateGrayCaret(int nWidth, int nHeight);
                   1165:        static CPoint GetCaretPos();
                   1166:        static void SetCaretPos(POINT point);
                   1167:        void HideCaret();
                   1168:        void ShowCaret();
                   1169: 
                   1170: // Window-Management message handler member functions
                   1171: protected:
                   1172:        virtual BOOL OnCommand(UINT wParam, LONG lParam);
                   1173: 
                   1174:        afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
                   1175:        afx_msg void OnActivateApp(BOOL bActive, HANDLE hTask);
                   1176:        afx_msg void OnCancelMode();
                   1177:        afx_msg void OnChildActivate();
                   1178:        afx_msg void OnClose();
                   1179:        afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
                   1180: 
                   1181: #ifdef _NTWIN
                   1182:        // special handler to fan in WM_CTLCOLOR - implementation
                   1183:        afx_msg LRESULT OnNTCtlColor(WPARAM wParam, LPARAM lParam);
                   1184: #endif
                   1185:        afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
                   1186: 
                   1187:        afx_msg void OnDestroy();
                   1188:        afx_msg void OnEnable(BOOL bEnable);
                   1189:        afx_msg void OnEndSession(BOOL bEnding);
                   1190:        afx_msg void OnEnterIdle(UINT nWhy, CWnd* pWho);
                   1191:        afx_msg BOOL OnEraseBkgnd(CDC* pDC);
                   1192:        afx_msg void OnGetMinMaxInfo(LPPOINT lpPoints);
                   1193:        afx_msg void OnIconEraseBkgnd(CDC* pDC);
                   1194:        afx_msg void OnKillFocus(CWnd* pNewWnd);
                   1195:        afx_msg LONG OnMenuChar(UINT nChar, UINT nFlags, CMenu* pMenu);
                   1196:        afx_msg void OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSysMenu);
                   1197:        afx_msg void OnMove(int x, int y);
                   1198:        afx_msg void OnPaint();
                   1199:        afx_msg void OnParentNotify(UINT message, LONG lParam);
                   1200:        afx_msg HCURSOR OnQueryDragIcon();
                   1201:        afx_msg BOOL OnQueryEndSession();
                   1202:        afx_msg BOOL OnQueryNewPalette();
                   1203:        afx_msg BOOL OnQueryOpen();
                   1204:        afx_msg void OnSetFocus(CWnd* pOldWnd);
                   1205:        afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
                   1206:        afx_msg void OnSize(UINT nType, int cx, int cy);
                   1207: #if (WINVER >= 0x030a)
                   1208:        afx_msg void OnWindowPosChanging(WINDOWPOS FAR* lpwndpos);
                   1209:        afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos);
                   1210: #endif /* WINVER >= 0x030a */
                   1211: 
                   1212: // Nonclient-Area message handler member functions
                   1213:        afx_msg BOOL OnNcActivate(BOOL bActive);
                   1214:        afx_msg void OnNcCalcSize(NCCALCSIZE_PARAMS FAR* lpncsp);
                   1215:        afx_msg BOOL OnNcCreate(LPCREATESTRUCT lpCreateStruct);
                   1216:        afx_msg void OnNcDestroy();
                   1217:        afx_msg UINT OnNcHitTest(CPoint point);
                   1218:        afx_msg void OnNcLButtonDblClk(UINT nHitTest, CPoint point);
                   1219:        afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);
                   1220:        afx_msg void OnNcLButtonUp(UINT nHitTest, CPoint point);
                   1221:        afx_msg void OnNcMButtonDblClk(UINT nHitTest, CPoint point);
                   1222:        afx_msg void OnNcMButtonDown(UINT nHitTest, CPoint point);
                   1223:        afx_msg void OnNcMButtonUp(UINT nHitTest, CPoint point);
                   1224:        afx_msg void OnNcMouseMove(UINT nHitTest, CPoint point);
                   1225:        afx_msg void OnNcPaint();
                   1226:        afx_msg void OnNcRButtonDblClk(UINT nHitTest, CPoint point);
                   1227:        afx_msg void OnNcRButtonDown(UINT nHitTest, CPoint point);
                   1228:        afx_msg void OnNcRButtonUp(UINT nHitTest, CPoint point);
                   1229: 
                   1230: // System message handler member functions
                   1231: #if (WINVER >= 0x030a)
                   1232:        afx_msg void OnDropFiles(HANDLE hDropInfo);
                   1233:        afx_msg void OnPaletteIsChanging(CWnd* pRealizeWnd);
                   1234: #endif /* WINVER >= 0x030a */
                   1235:        afx_msg void OnSysChar(UINT nChar, UINT nRepCnt, UINT nFlags);
                   1236:        afx_msg void OnSysCommand(UINT nID, LONG lParam);
                   1237:        afx_msg void OnSysDeadChar(UINT nChar, UINT nRepCnt, UINT nFlags);
                   1238:        afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
                   1239:        afx_msg void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
                   1240:        afx_msg void OnCompacting(UINT nCpuTime);
                   1241:        afx_msg void OnDevModeChange(LPSTR lpDeviceName);
                   1242:        afx_msg void OnFontChange();
                   1243:        afx_msg void OnPaletteChanged(CWnd* pFocusWnd);
                   1244:        afx_msg void OnSpoolerStatus(UINT nStatus, UINT nJobs);
                   1245:        afx_msg void OnSysColorChange();
                   1246:        afx_msg void OnTimeChange();
                   1247:        afx_msg void OnWinIniChange(LPSTR lpSection);
                   1248: 
                   1249: // Input message handler member functions
                   1250:        afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
                   1251:        afx_msg void OnDeadChar(UINT nChar, UINT nRepCnt, UINT nFlags);
                   1252:        afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
                   1253:        afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
                   1254:        afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
                   1255:        afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
                   1256:        afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
                   1257:        afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
                   1258:        afx_msg void OnMButtonDblClk(UINT nFlags, CPoint point);
                   1259:        afx_msg void OnMButtonDown(UINT nFlags, CPoint point);
                   1260:        afx_msg void OnMButtonUp(UINT nFlags, CPoint point);
                   1261:        afx_msg int OnMouseActivate(CWnd* pFrameWnd, UINT nHitTest, UINT message);
                   1262:        afx_msg void OnMouseMove(UINT nFlags, CPoint point);
                   1263:        afx_msg void OnRButtonDblClk(UINT nFlags, CPoint point);
                   1264:        afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
                   1265:        afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
                   1266:        afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
                   1267:        afx_msg void OnTimer(UINT nIDEvent);
                   1268:        afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
                   1269: 
                   1270: // Initialization message handler member functions
                   1271:        afx_msg void OnInitMenu(CMenu* pMenu);
                   1272:        afx_msg void OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu);
                   1273: 
                   1274: // Clipboard message handler member functions
                   1275:        afx_msg void OnAskCbFormatName(UINT nMaxCount, LPSTR lpString);
                   1276:        afx_msg void OnChangeCbChain(HWND hWndRemove, HWND hWndAfter);
                   1277:        afx_msg void OnDestroyClipboard();
                   1278:        afx_msg void OnDrawClipboard();
                   1279:        afx_msg void OnHScrollClipboard(CWnd* pClipAppWnd, UINT nSBCode, UINT nPos);
                   1280:        afx_msg void OnPaintClipboard(CWnd* pClipAppWnd, HANDLE hPaintStruct);
                   1281:        afx_msg void OnRenderAllFormats();
                   1282:        afx_msg void OnRenderFormat(UINT nFormat);
                   1283:        afx_msg void OnSizeClipboard(CWnd* pClipAppWnd, HANDLE hRect);
                   1284:        afx_msg void OnVScrollClipboard(CWnd* pClipAppWnd, UINT nSBCode, UINT nPos);
                   1285: 
                   1286: // Control message handler member functions
                   1287:        afx_msg int OnCharToItem(UINT nChar, CListBox* pListBox, UINT nIndex);
                   1288:        afx_msg int OnCompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
                   1289:        afx_msg void OnDeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
                   1290:        afx_msg void OnDrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
                   1291:        afx_msg UINT OnGetDlgCode();
                   1292:        afx_msg void OnMeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
                   1293:        afx_msg int OnVKeyToItem(UINT nKey, CListBox* pListBox, UINT nIndex);
                   1294: 
                   1295: // MDI message handler member functions
                   1296:        afx_msg void OnMDIActivate(BOOL bActivate, 
                   1297:                        CWnd* pActivateWnd, CWnd* pDeactivateWnd);
                   1298: 
                   1299: // Overridables and other helpers (for implementation of derived classes)
                   1300: protected:
                   1301:        // for deriving from a standard control
                   1302:        virtual WNDPROC* GetSuperWndProcAddr();
                   1303: 
                   1304:        // for translating Windows messages in main message pump
                   1305:        virtual BOOL PreTranslateMessage(MSG* pMsg);
                   1306: 
                   1307:        // for processing Windows messages
                   1308:        virtual LONG WindowProc(UINT message, UINT wParam, LONG lParam);
                   1309: 
                   1310:        // for handling default processing
                   1311:        LONG Default();
                   1312:        virtual LONG DefWindowProc(UINT message, UINT wParam, LONG lParam);
                   1313: 
                   1314:        // for custom cleanup after WM_NCDESTROY
                   1315:        virtual void PostNcDestroy();
                   1316: 
                   1317: // Implementation
                   1318: public:
                   1319:        virtual ~CWnd();
                   1320: #ifdef _DEBUG
                   1321:        virtual void AssertValid() const;
                   1322:        virtual void Dump(CDumpContext& dc) const;
                   1323: #endif
                   1324: 
                   1325: protected:
                   1326:        friend void FAR PASCAL AFX_EXPORT _AfxSendMsgHook(int, UINT, LONG);
                   1327:        friend LONG _AfxCallWndProc(CWnd*, HWND, UINT, UINT, LONG);
                   1328: 
                   1329:        friend class CWinApp;   // for PreTranslate access
                   1330: 
                   1331:        DECLARE_MESSAGE_MAP()
                   1332: };
                   1333: 
                   1334: // helpers for registering your own WNDCLASSes
                   1335: const char* AfxRegisterWndClass(UINT nClassStyle,
                   1336:        HCURSOR hCursor = 0, HBRUSH hbrBackground = 0, HICON hIcon = 0);
                   1337: 
                   1338: LONG FAR PASCAL AFX_EXPORT AfxWndProc(HWND, UINT, UINT, LONG);
                   1339: 
                   1340: /////////////////////////////////////////////////////////////////////////////
                   1341: // pointer to afx_msg member function
                   1342: 
                   1343: #define AFX_MSG_CALL PASCAL
                   1344: 
                   1345: typedef void (AFX_MSG_CALL CWnd::*AFX_PMSG)(void);
                   1346: struct CMessageEntry
                   1347: {
                   1348:        UINT        nMessage;   // windows message or control notification code
                   1349:        UINT        nID;        // control ID (or 0 for windows messages)
                   1350:        UINT        nSig;       // signature type (action) or near pointer to extra
                   1351:        AFX_PMSG    pfn;        // routine to call (or special value)
                   1352: };
                   1353: 
                   1354: /////////////////////////////////////////////////////////////////////////////
                   1355: // CDialog, CModalDialog
                   1356: 
                   1357: 
                   1358: class CDialog : public CWnd
                   1359: {
                   1360:        DECLARE_DYNAMIC(CDialog)
                   1361: public:
                   1362: 
                   1363: // Constructors (protected since you must subclass to implement a Dialog)
                   1364: protected:
                   1365:        // Modeless construct
                   1366:        CDialog();
                   1367:        ~CDialog();
                   1368: 
                   1369:        BOOL Create(LPCSTR lpTemplateName, CWnd* pParentWnd = NULL);
                   1370:        BOOL Create(UINT nIDTemplate, CWnd* pParentWnd = NULL);
                   1371: 
                   1372:        // Generic construct (for modal too)
                   1373:        BOOL CreateIndirect(const void FAR* lpDialogTemplate,
                   1374:                CWnd* pParentWnd = NULL);
                   1375: 
                   1376: // Attributes
                   1377: public:
                   1378:        void MapDialogRect(LPRECT lpRect) const;
                   1379: 
                   1380: protected:
                   1381:        HBRUSH m_hBrushCtlBk;
                   1382: 
                   1383: // Operations
                   1384: public:
                   1385:        // message processing for modeless
                   1386:        BOOL IsDialogMessage(LPMSG lpMsg);
                   1387: 
                   1388:        // support for passing on tab control - use 'PostMessage' if needed
                   1389:        void NextDlgCtrl() const;
                   1390:        void PrevDlgCtrl() const;
                   1391:        void GotoDlgCtrl(CWnd* pWndCtrl);
                   1392: 
                   1393:        // default button access
                   1394:        void SetDefID(UINT nID);
                   1395:        DWORD GetDefID();
                   1396: 
                   1397:        // support for "new look" dialog boxes, set background color with this
                   1398:        BOOL SetCtlBkColor(COLORREF clrCtlBk);
                   1399: 
                   1400:        // termination
                   1401:        void EndDialog(int nResult);
                   1402: 
                   1403: // Overridables (special message map entries)
                   1404:        virtual BOOL OnInitDialog();
                   1405:        virtual void OnSetFont(CFont* pFont);
                   1406: 
                   1407:        // Default implementation sets colors to the "new look"
                   1408:        afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
                   1409: 
                   1410: // Implementation
                   1411: #ifdef _DEBUG
                   1412:        virtual void AssertValid() const;
                   1413: #endif
                   1414: 
                   1415: protected:
                   1416:        virtual BOOL PreTranslateMessage(MSG* pMsg);
                   1417:        virtual WNDPROC* GetSuperWndProcAddr();
                   1418: 
                   1419:        DECLARE_MESSAGE_MAP()
                   1420: };
                   1421: 
                   1422: class CModalDialog : public CDialog
                   1423: {
                   1424:        DECLARE_DYNAMIC(CModalDialog)
                   1425: 
                   1426: // Constructors
                   1427: public:
                   1428:        CModalDialog(LPCSTR lpTemplateName, CWnd* pParentWnd = NULL);
                   1429:        CModalDialog(UINT nIDTemplate, CWnd* pParentWnd = NULL);
                   1430: 
                   1431:        // advanced usage - create indirect
                   1432:        BOOL CreateIndirect(HANDLE hDialogTemplate);
                   1433: 
                   1434: // Operations
                   1435:        virtual int DoModal();
                   1436: 
                   1437: // Overridables (automatic message map entries)
                   1438: protected:
                   1439:        virtual void OnOK();
                   1440:        virtual void OnCancel();
                   1441: 
                   1442: // Implementation
                   1443: #ifdef _DEBUG
                   1444: public:
                   1445:        virtual void AssertValid() const;
                   1446:        virtual void Dump(CDumpContext& dc) const;
                   1447: #endif
                   1448: 
                   1449: protected:
                   1450: 
                   1451:        // parameters for 'DoModal'
                   1452:        LPCSTR m_lpDialogTemplate;      // name or MAKEINTRESOURCE
                   1453:        HANDLE m_hDialogTemplate;       // Indirect if (lpDialogTemplate == NULL)
                   1454:        CWnd* m_pParentWnd;
                   1455: 
                   1456:        DECLARE_MESSAGE_MAP()
                   1457: };
                   1458: 
                   1459: /////////////////////////////////////////////////////////////////////////////
                   1460: // Standard Windows controls
                   1461: 
                   1462: class CStatic : public CWnd
                   1463: {
                   1464:        DECLARE_DYNAMIC(CStatic)
                   1465: 
                   1466: // Constructors
                   1467: public:
                   1468:        CStatic();
                   1469:        BOOL Create(LPCSTR lpText, DWORD dwStyle,
                   1470:                                const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff);
                   1471: 
                   1472: #if (WINVER >= 0x030a)
                   1473:        HICON SetIcon(HICON hIcon);
                   1474:        HICON GetIcon() const;
                   1475: #endif /* WINVER >= 0x030a */
                   1476:        
                   1477: 
                   1478: // Implementation
                   1479: protected:
                   1480:        virtual WNDPROC* GetSuperWndProcAddr();
                   1481: };
                   1482: 
                   1483: class CButton : public CWnd
                   1484: {
                   1485:        DECLARE_DYNAMIC(CButton)
                   1486: 
                   1487: // Constructors
                   1488: public:
                   1489:        CButton();
                   1490:        BOOL Create(LPCSTR lpCaption, DWORD dwStyle,
                   1491:                                const RECT& rect, CWnd* pParentWnd, UINT nID);
                   1492: 
                   1493: // Attributes
                   1494:        UINT GetState() const;
                   1495:        void SetState(BOOL bHighlight);
                   1496:        int GetCheck() const;
                   1497:        void SetCheck(int nCheck);
                   1498:        UINT GetButtonStyle() const;
                   1499:        void SetButtonStyle(UINT nStyle, BOOL bRedraw = TRUE);
                   1500: 
                   1501: // Overridables (for owner draw only)
                   1502:        virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
                   1503: 
                   1504: // Implementation
                   1505: protected:
                   1506:        virtual WNDPROC* GetSuperWndProcAddr();
                   1507: };
                   1508: 
                   1509: 
                   1510: class CListBox : public CWnd
                   1511: {
                   1512:        DECLARE_DYNAMIC(CListBox)
                   1513: 
                   1514: // Constructors
                   1515: public:
                   1516:        CListBox();
                   1517:        BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
                   1518: 
                   1519: // Attributes
                   1520: 
                   1521:        // for entire listbox
                   1522:        int GetCount() const;
                   1523:        int GetHorizontalExtent() const;
                   1524:        void SetHorizontalExtent(int cxExtent);
                   1525:        int GetTopIndex() const;
                   1526:        int SetTopIndex(int nIndex);
                   1527: 
                   1528:        // for single-selection listboxes
                   1529:        int GetCurSel() const;
                   1530:        int SetCurSel(int nSelect);
                   1531: 
                   1532:        // for multiple-selection listboxes
                   1533:        int GetSel(int nIndex) const;           // also works for single-selection
                   1534:        int SetSel(int nIndex, BOOL bSelect = TRUE);
                   1535:        int GetSelCount() const;
                   1536:        int GetSelItems(int nMaxItems, LPINT rgIndex) const;
                   1537: 
                   1538:        // for listbox items
                   1539:        DWORD GetItemData(int nIndex) const;
                   1540:        int SetItemData(int nIndex, DWORD dwItemData);
                   1541:        int GetItemRect(int nIndex, LPRECT lpRect) const;
                   1542:        int GetText(int nIndex, LPSTR lpBuffer) const;
                   1543:        int GetTextLen(int nIndex) const;
                   1544:        void GetText(int nIndex, CString& rString) const;
                   1545: 
                   1546:        // Settable only attributes
                   1547:        void SetColumnWidth(int cxWidth);
                   1548:        BOOL SetTabStops(int nTabStops, LPINT rgTabStops);
                   1549:        void SetTabStops();
                   1550:        BOOL SetTabStops(int cxEachStop);
                   1551: 
                   1552: #if (WINVER >= 0x030a)
                   1553:        int SetItemHeight(int nIndex, UINT cyItemHeight);
                   1554:        int GetItemHeight(int nIndex) const;
                   1555:        int FindStringExact(int nIndexStart, LPCSTR lpszFind) const;
                   1556:        int GetCaretIndex() const;
                   1557:        int SetCaretIndex(int nIndex, BOOL bScroll = TRUE);
                   1558:        
                   1559: #endif  /* WINVER >= 0x030a */
                   1560: 
                   1561: // Operations
                   1562:        // manipulating listbox items
                   1563:        int AddString(LPCSTR lpItem);
                   1564:        int DeleteString(UINT nIndex);
                   1565:        int InsertString(int nIndex, LPCSTR lpItem);
                   1566:        void ResetContent();
                   1567:        int Dir(UINT attr, LPCSTR lpWildCard);
                   1568: 
                   1569:        // selection helpers
                   1570:        int FindString(int nStartAfter, LPCSTR lpItem) const;
                   1571:        int SelectString(int nStartAfter, LPCSTR lpItem);
                   1572:        int SelItemRange(BOOL bSelect, int nFirstItem, int nLastItem);
                   1573: 
                   1574: // Overridables (must override draw, measure and compare for owner draw)
                   1575:        virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
                   1576:        virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
                   1577:        virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
                   1578:        virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
                   1579: 
                   1580: // Implementation
                   1581: protected:
                   1582:        virtual WNDPROC* GetSuperWndProcAddr();
                   1583: };
                   1584: 
                   1585: class CComboBox : public CWnd
                   1586: {
                   1587:        DECLARE_DYNAMIC(CComboBox)
                   1588: 
                   1589: // Constructors
                   1590: public:
                   1591:        CComboBox();
                   1592:        BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
                   1593: 
                   1594: // Attributes
                   1595:        // for entire combo box
                   1596:        int GetCount() const;
                   1597:        int GetCurSel() const;
                   1598:        int SetCurSel(int nSelect);
                   1599: 
                   1600:        // for edit control
                   1601:        DWORD GetEditSel() const;
                   1602:        BOOL LimitText(int nMaxChars);
                   1603:        BOOL SetEditSel(int nStartChar, int nEndChar);
                   1604: 
                   1605:        // for combobox item
                   1606:        DWORD GetItemData(int nIndex) const;
                   1607:        int SetItemData(int nIndex, DWORD dwItemData);
                   1608:        int GetLBText(int nIndex, LPSTR lpText) const;
                   1609:        int GetLBTextLen(int nIndex) const;
                   1610:        void GetLBText(int nIndex, CString& rString) const;
                   1611: 
                   1612: #if (WINVER >= 0x030a)
                   1613:        int SetItemHeight(int nIndex, UINT cyItemHeight);
                   1614:        int GetItemHeight(int nIndex) const;
                   1615:        int FindStringExact(int nIndexStart, LPCSTR lpszFind) const;
                   1616:        int SetExtendedUI(BOOL bExtended = TRUE);
                   1617:        BOOL GetExtendedUI() const;
                   1618:        void GetDroppedControlRect(LPRECT lprect) const;
                   1619:        BOOL GetDroppedState() const;
                   1620: #endif  /* WINVER >= 0x030a */
                   1621: 
                   1622: // Operations
                   1623:        // for drop-down combo boxes
                   1624:        void ShowDropDown(BOOL bShowIt = TRUE);
                   1625: 
                   1626:        // manipulating listbox items
                   1627:        int AddString(LPCSTR lpString);
                   1628:        int DeleteString(UINT nIndex);
                   1629:        int InsertString(int nIndex, LPCSTR lpString);
                   1630:        void ResetContent();
                   1631:        int Dir(UINT attr, LPCSTR lpWildCard);
                   1632: 
                   1633:        // selection helpers
                   1634:        int FindString(int nStartAfter, LPCSTR lpString) const;
                   1635:        int SelectString(int nStartAfter, LPCSTR lpString);
                   1636: 
                   1637:        // Clipboard operations
                   1638:        void Clear();
                   1639:        void Copy();
                   1640:        void Cut();
                   1641:        void Paste();
                   1642: 
                   1643: // Overridables (must override draw, measure and compare for owner draw)
                   1644:        virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
                   1645:        virtual void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
                   1646:        virtual int CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct);
                   1647:        virtual void DeleteItem(LPDELETEITEMSTRUCT lpDeleteItemStruct);
                   1648: 
                   1649: // Implementation
                   1650: protected:
                   1651:        virtual WNDPROC* GetSuperWndProcAddr();
                   1652: };
                   1653: 
                   1654: 
                   1655: class CEdit : public CWnd
                   1656: {
                   1657:        DECLARE_DYNAMIC(CEdit)
                   1658: 
                   1659: // Constructors
                   1660: public:
                   1661:        CEdit();
                   1662:        BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
                   1663: 
                   1664: // Attributes
                   1665:        BOOL CanUndo() const;
                   1666:        int GetLineCount() const;
                   1667:        BOOL GetModify() const;
                   1668:        void SetModify(BOOL bModified = TRUE);
                   1669:        void GetRect(LPRECT lpRect) const;
                   1670:        DWORD GetSel() const;
                   1671:        HANDLE  GetHandle() const;
                   1672:        void SetHandle(HANDLE hBuffer);
                   1673: 
                   1674:        // NOTE: first word in lpBuffer must contain the size of the buffer!
                   1675:        int GetLine(int nIndex, LPSTR lpBuffer) const;
                   1676:        int GetLine(int nIndex, LPSTR lpBuffer, int nMaxLength) const;
                   1677: 
                   1678: // Operations
                   1679:        void EmptyUndoBuffer();
                   1680:        BOOL FmtLines(BOOL bAddEOL);
                   1681: 
                   1682:        void LimitText(int nChars = 0);
                   1683:        int LineFromChar(int nIndex = -1) const;
                   1684:        int LineIndex(int nLine = -1) const;
                   1685:        int LineLength(int nLine = -1) const;
                   1686:        void LineScroll(int nLines, int nChars = 0);
                   1687:        void ReplaceSel(LPCSTR lpNewText);
                   1688:        void SetPasswordChar(char ch);
                   1689:        void SetRect(LPRECT lpRect);
                   1690:        void SetRectNP(LPRECT lpRect);
                   1691:        void SetSel(DWORD dwSelection);
                   1692:        void SetSel(int nStartChar, int nEndChar);
                   1693:        BOOL SetTabStops(int nTabStops, LPINT rgTabStops);
                   1694:        void SetTabStops();
                   1695:        BOOL SetTabStops(int cxEachStop);
                   1696: 
                   1697:        // Clipboard operations
                   1698:        BOOL Undo();
                   1699:        void Clear();
                   1700:        void Copy();
                   1701:        void Cut();
                   1702:        void Paste();
                   1703: 
                   1704: #if (WINVER >= 0x030a)
                   1705:        BOOL SetReadOnly(BOOL bReadOnly = TRUE);
                   1706:        int GetFirstVisibleLine() const;
                   1707:        char GetPasswordChar() const;
                   1708: #endif  /* WINVER >= 0x030a */
                   1709: 
                   1710: // Implementation
                   1711: protected:
                   1712:        virtual WNDPROC* GetSuperWndProcAddr();
                   1713: };
                   1714: 
                   1715: 
                   1716: class CScrollBar : public CWnd
                   1717: {
                   1718:        DECLARE_DYNAMIC(CScrollBar)
                   1719: 
                   1720: // Constructors
                   1721: public:
                   1722:        CScrollBar();
                   1723:        BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
                   1724: 
                   1725: // Attributes
                   1726:        int GetScrollPos() const;
                   1727:        int SetScrollPos(int nPos, BOOL bRedraw = TRUE);
                   1728:        void GetScrollRange(LPINT lpMinPos, LPINT lpMaxPos) const;
                   1729:        void SetScrollRange(int nMinPos, int nMaxPos, BOOL bRedraw = TRUE);
                   1730:        void ShowScrollBar(BOOL bShow = TRUE);
                   1731: 
                   1732: #if (WINVER >= 0x030a)
                   1733:        BOOL EnableScrollBar(UINT nArrowFlags = ESB_ENABLE_BOTH);
                   1734: #endif  /* WINVER >= 0x030a */
                   1735: 
                   1736: // Implementation
                   1737: protected:
                   1738:        virtual WNDPROC* GetSuperWndProcAddr();
                   1739: };
                   1740: 
                   1741: /////////////////////////////////////////////////////////////////////////////
                   1742: // Extra Custom Controls
                   1743: 
                   1744: // CBitmapButton - push-button with 2 or 3 bitmap images
                   1745: class CBitmapButton : public CButton
                   1746: {
                   1747:        DECLARE_DYNAMIC(CBitmapButton)
                   1748: 
                   1749: protected:
                   1750:        // all bitmaps must be the same size
                   1751:        CBitmap m_bitmap;           // normal image (REQUIRED)
                   1752:        CBitmap m_bitmapSel;        // selected image (OPTIONAL)
                   1753:        CBitmap m_bitmapFocus;      // focused but not selected (OPTIONAL)
                   1754: 
                   1755: public:
                   1756: // Construction
                   1757:        CBitmapButton();
                   1758:        CBitmapButton(LPCSTR lpBitmapResource, LPCSTR lpBitmapResourceSel = NULL,
                   1759:                        LPCSTR lpBitmapResourceFocus = NULL);
                   1760: 
                   1761:        BOOL LoadBitmaps(LPCSTR lpBitmapResource, LPCSTR lpBitmapResourceSel = NULL,
                   1762:                        LPCSTR lpBitmapResourceFocus = NULL);
                   1763:        BOOL AutoLoad(UINT nID, CWnd* pParent);
                   1764: 
                   1765: // Operations
                   1766:        void SizeToContent();
                   1767: 
                   1768: // Implementation:
                   1769: protected:
                   1770:        virtual void    DrawItem(LPDRAWITEMSTRUCT lpDIS);
                   1771: };
                   1772: 
                   1773: /////////////////////////////////////////////////////////////////////////////
                   1774: // CFrameWnd
                   1775: 
                   1776: class CFrameWnd : public CWnd
                   1777: {
                   1778:        DECLARE_DYNAMIC(CFrameWnd)
                   1779: 
                   1780: protected:
                   1781: // Protected attributes
                   1782:        HACCEL m_hAccelTable;
                   1783: 
                   1784: public:
                   1785:        static const CRect NEAR rectDefault;
                   1786: 
                   1787: // Constructors
                   1788:        CFrameWnd();
                   1789: 
                   1790:        BOOL LoadAccelTable(LPCSTR lpAccelTableName);
                   1791:        BOOL Create(LPCSTR lpClassName,
                   1792:                                LPCSTR lpWindowName,
                   1793:                                DWORD dwStyle = WS_OVERLAPPEDWINDOW,
                   1794:                                const RECT& rect = rectDefault,
                   1795:                                const CWnd* pParentWnd = NULL,      // != NULL for popups
                   1796:                                LPCSTR lpMenuName = NULL);
                   1797: 
                   1798: // Implementation
                   1799: public:
                   1800: #ifdef _DEBUG
                   1801:        virtual void AssertValid() const;
                   1802:        virtual void Dump(CDumpContext& dc) const;
                   1803: #endif
                   1804: 
                   1805:        virtual ~CFrameWnd();
                   1806: 
                   1807:        virtual CFrameWnd* GetParentFrame();
                   1808:        virtual CFrameWnd* GetChildFrame();
                   1809: 
                   1810: protected:
                   1811:        virtual BOOL PreTranslateMessage(MSG* pMsg);
                   1812:        virtual void PostNcDestroy();   // default to delete this.
                   1813: };
                   1814: 
                   1815: /////////////////////////////////////////////////////////////////////////////
                   1816: // MDI Support
                   1817: 
                   1818: class CMDIFrameWnd : public CFrameWnd
                   1819: {
                   1820:        DECLARE_DYNAMIC(CMDIFrameWnd)
                   1821: public:
                   1822: 
                   1823: // Constructors
                   1824:        CMDIFrameWnd();
                   1825: 
                   1826:        BOOL Create(LPCSTR lpClassName,
                   1827:                                LPCSTR lpWindowName,
                   1828:                                DWORD dwStyle,
                   1829:                                const RECT& rect,
                   1830:                                const CWnd* pParentWnd,
                   1831:                                LPCSTR lpMenuName);
                   1832: 
                   1833: // Overridables (automatic message map entries)
                   1834: protected:
                   1835:        afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
                   1836: 
                   1837: // Attributes
                   1838: public:
                   1839:        HWND m_hWndMDIClient;
                   1840: 
                   1841:        virtual BOOL CreateClient(LPCREATESTRUCT lpCreateStruct,
                   1842:                                                          CMenu* pWindowMenu);
                   1843: 
                   1844:        void MDIActivate(CWnd* pWndActivate);
                   1845:        CMDIChildWnd* MDIGetActive(BOOL* pbMaximized = NULL) const;
                   1846:        void MDIIconArrange();
                   1847:        void MDIMaximize(CWnd* pWnd);
                   1848:        void MDINext();
                   1849:        void MDIRestore(CWnd* pWnd);
                   1850:        CMenu* MDISetMenu(CMenu* pFrameMenu, CMenu* pWindowMenu);
                   1851: 
                   1852:        void MDICascade();
                   1853:        void MDITile();
                   1854: 
                   1855: #if (WINVER >= 0x030a)
                   1856:        void MDITile(int nType);
                   1857:        void MDICascade(int nType);
                   1858: #endif /* WINVER >= 0x030a */
                   1859: 
                   1860: // Implementation
                   1861: public:
                   1862: #ifdef _DEBUG
                   1863:        virtual void AssertValid() const;
                   1864: #endif
                   1865:        virtual CFrameWnd* GetChildFrame();
                   1866: protected:
                   1867:        virtual BOOL PreTranslateMessage(MSG* pMsg);
                   1868:        virtual LONG DefWindowProc(UINT nMsg, UINT wParam, LONG lParam);
                   1869:        virtual BOOL OnCommand(UINT wParam, LONG lParam);
                   1870: protected:
                   1871:        DECLARE_MESSAGE_MAP()
                   1872: 
                   1873:        friend class CMDIChildWnd;
                   1874: };
                   1875: 
                   1876: 
                   1877: class CMDIChildWnd : public CFrameWnd
                   1878: {
                   1879:        DECLARE_DYNAMIC(CMDIChildWnd)
                   1880: protected:
                   1881:        CMDIFrameWnd* m_pMDIFrameWnd;           // our MDIFrame parent
                   1882: 
                   1883: // Constructors
                   1884: public:
                   1885:        CMDIChildWnd();
                   1886: 
                   1887:        BOOL Create(LPCSTR lpClassName,
                   1888:                                LPCSTR lpWindowName,
                   1889:                                DWORD dwStyle = 0,
                   1890:                                const RECT& rect = rectDefault,
                   1891:                                CMDIFrameWnd* pParentWnd = NULL);
                   1892: 
                   1893: // Operations
                   1894:        void MDIDestroy();
                   1895:        void MDIActivate();
                   1896:        void MDIMaximize();
                   1897:        void MDIRestore();
                   1898: 
                   1899: // Implementation
                   1900: public:
                   1901: #ifdef _DEBUG
                   1902:        virtual void AssertValid() const;
                   1903:        virtual void Dump(CDumpContext& dc) const;
                   1904: #endif
                   1905: 
                   1906:        virtual BOOL DestroyWindow();
                   1907:        virtual CFrameWnd* GetParentFrame();
                   1908: protected:
                   1909:        virtual BOOL PreTranslateMessage(MSG* pMsg);
                   1910:        virtual LONG DefWindowProc(UINT nMsg, UINT wParam, LONG lParam);
                   1911: 
                   1912:        friend class CMDIFrameWnd;
                   1913: };
                   1914: 
                   1915: /////////////////////////////////////////////////////////////////////////////
                   1916: // Global functions for access to the one and only CWinApp
                   1917: 
                   1918: extern "C"
                   1919: {
                   1920: // standard C variables if you wish to access them from C programs,
                   1921: // use inline functions for C++ programs
                   1922: extern CWinApp* afxCurrentWinApp;
                   1923: extern HANDLE afxCurrentInstanceHandle;
                   1924: extern HANDLE afxCurrentResourceHandle;
                   1925: extern const char* afxCurrentAppName;
                   1926: extern BOOL AfxWinInit(HINSTANCE, HINSTANCE, LPSTR, int);
                   1927: extern void AfxWinTerm();
                   1928: }
                   1929: 
                   1930: // Global Windows state data helper functions (inlines)
                   1931: CWinApp* AfxGetApp();
                   1932: HINSTANCE AfxGetInstanceHandle();
                   1933: HINSTANCE AfxGetResourceHandle();
                   1934: const char* AfxGetAppName();
                   1935: 
                   1936: /////////////////////////////////////////////////////////////////////////////
                   1937: // CWinApp - the world's simplest Windows application
                   1938: 
                   1939: class CWinApp : public CObject
                   1940: {
                   1941:        DECLARE_DYNAMIC(CWinApp)
                   1942: public:
                   1943: 
                   1944: // Constructor
                   1945:        CWinApp(const char* pszAppName = NULL);
                   1946:        void SetCurrentHandles();
                   1947: 
                   1948: // Attributes
                   1949:        // Startup args (do not change)
                   1950:        const char* m_pszAppName;       // from constructor
                   1951:        HINSTANCE m_hInstance;
                   1952:        HINSTANCE m_hPrevInstance;
                   1953:        LPSTR m_lpCmdLine;
                   1954:        int m_nCmdShow;
                   1955: 
                   1956:        // Running args
                   1957:        CWnd* m_pMainWnd;       // main window (optional)
                   1958: 
                   1959: // Operations
                   1960:        // Cursors
                   1961:        HCURSOR LoadCursor(LPCSTR lpCursorName);
                   1962:        HCURSOR LoadCursor(UINT nIDCursor);
                   1963:        HCURSOR LoadStandardCursor(LPCSTR lpCursorName); // for IDC_ values
                   1964:        HCURSOR LoadOEMCursor(UINT nIDCursor);          // for OCR_ values
                   1965: 
                   1966:        // Icons
                   1967:        HICON LoadIcon(LPCSTR lpIconName);
                   1968:        HICON LoadIcon(UINT nIDIcon);
                   1969:        HICON LoadStandardIcon(LPCSTR lpIconName);    // for IDI_ values
                   1970:        HICON LoadOEMIcon(UINT nIDIcon);             // for OIC_ values
                   1971: 
                   1972:        BOOL PumpMessage();
                   1973: 
                   1974: // Overridables
                   1975:        // hooks for your initialization code
                   1976:        virtual BOOL InitApplication();
                   1977:        virtual BOOL InitInstance();
                   1978: 
                   1979:        virtual int Run();
                   1980: 
                   1981:        // called by standard 'Run' implementation
                   1982:        virtual BOOL PreTranslateMessage(MSG* pMsg);
                   1983:        virtual BOOL OnIdle(LONG lCount); // return TRUE if more idle processing
                   1984:        virtual int ExitInstance(); // return app exit code
                   1985: 
                   1986: 
                   1987: // Implementation
                   1988: #ifdef _DEBUG
                   1989:        virtual void AssertValid() const;
                   1990:        virtual void Dump(CDumpContext& dc) const;
                   1991: #endif
                   1992: 
                   1993: protected:
                   1994:        MSG  m_msgCur;
                   1995: 
                   1996: #ifdef _DEBUG
                   1997: // Diagnostic trap for when going back to message pump is not permitted.
                   1998: protected:
                   1999:        int m_nDisablePumpCount;
                   2000: public:
                   2001:        void EnablePump(BOOL bEnable);
                   2002: #endif
                   2003: 
                   2004: };
                   2005: 
                   2006: /////////////////////////////////////////////////////////////////////////////
                   2007: // Extra diagnostic tracing options
                   2008: 
                   2009: #ifdef _WINDOWS
                   2010: extern "C" extern int afxTraceFlags;
                   2011:        // 1 => multi-app debugging
                   2012:        // 2 => main message pump trace (includes DDE)
                   2013:        // 4 => Windows message tracing
                   2014:        // 8 => Windows command routing trace (set 4+8 for control notifications)
                   2015:        // 16 (0x10) => special OLE callback trace
                   2016: #endif // _WINDOWS
                   2017: 
                   2018: /////////////////////////////////////////////////////////////////////////////
                   2019: // Inline function declarations
                   2020: 
                   2021: #include "afxwin.inl"
                   2022: 
                   2023: 
                   2024: #endif //__AFXWIN_H__

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.