|
|
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__
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.