home *** CD-ROM | disk | FTP | other *** search
/ Tools / WinSN5.0Ver.iso / NETSCAP.50 / WIN1998.ZIP / ns / cmd / winfe / outliner.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-08  |  16.0 KB  |  536 lines

  1. /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
  2.  *
  3.  * The contents of this file are subject to the Netscape Public License
  4.  * Version 1.0 (the "NPL"); you may not use this file except in
  5.  * compliance with the NPL.  You may obtain a copy of the NPL at
  6.  * http://www.mozilla.org/NPL/
  7.  *
  8.  * Software distributed under the NPL is distributed on an "AS IS" basis,
  9.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
  10.  * for the specific language governing rights and limitations under the
  11.  * NPL.
  12.  *
  13.  * The Initial Developer of this code under the NPL is Netscape
  14.  * Communications Corporation.  Portions created by Netscape are
  15.  * Copyright (C) 1998 Netscape Communications Corporation.  All Rights
  16.  * Reserved.
  17.  */
  18.  
  19. #ifndef _OUTLINER_H
  20. #define _OUTLINER_H
  21.  
  22. #include "apiimg.h"
  23. #include "apioutln.h"
  24. #include "msgcom.h"
  25. #include "tooltip.h"
  26.  
  27. #define WM_COLUMN_COMMAND   WM_USER+5000
  28.  
  29. #define OUTLINER_OPENFOLDER     1
  30. #define OUTLINER_CLOSEDFOLDER   2
  31. #define OUTLINER_ITEM           3
  32.  
  33. // array of indexes for IDB_OUTLINER
  34. #define IDX_TREEITEM            0
  35. #define IDX_TREEFOLDERCLOSED    1
  36. #define IDX_TREEFOLDEROPEN      2
  37. #define IDX_CLOSEDBOTTOMPARENT  3
  38. #define IDX_CLOSEDTOPPARENT     4
  39. #define IDX_CLOSEDMIDDLEPARENT  5
  40. #define IDX_CLOSEDSINGLEPARENT  6
  41. #define IDX_OPENBOTTOMPARENT    7
  42. #define IDX_OPENMIDDLEPARENT    8
  43. #define IDX_OPENTOPPARENT       9
  44. #define IDX_OPENSINGLEPARENT    10
  45. #define IDX_BOTTOMITEM          11
  46. #define IDX_MIDDLEITEM          12
  47. #define IDX_TOPITEM             13
  48. #define IDX_VERTPIPE            14
  49. #define IDX_HORZPIPE            15
  50. #define IDX_EMPTYITEM           16
  51.  
  52. // array of indexes for IDB_COLUMN
  53. #define IDX_SORTINDICATORUP     0
  54. #define IDX_SORTINDICATORDOWN   1
  55. #define IDX_PUSHLEFT            2
  56. #define IDX_PUSHRIGHT           3
  57. #define IDX_PUSHLEFTI            4
  58. #define IDX_PUSHRIGHTI          5
  59.  
  60. #ifndef FLOAT
  61.  #define FLOAT float
  62. #endif
  63.  
  64. typedef struct 
  65. {
  66.     XP_Bool has_next;
  67.     XP_Bool has_prev;
  68. } OutlinerAncestorInfo;
  69.  
  70. typedef struct {
  71.     LPCTSTR pHeader;
  72.     Column_t cType;
  73.     int iMinColSize;
  74.     int iMaxColSize;
  75.     FLOAT fPercent;
  76.     FLOAT fDesiredPercent;    
  77.     int iCol;
  78.     UINT iCommand;
  79.     BOOL bDepressed;
  80.     BOOL bVisible;
  81.     BOOL bIsButton;
  82.     CropType_t cropping;
  83.     AlignType_t alignment;
  84. } OutlinerColumn_t;
  85.  
  86. class CTip; // In tip.h
  87.  
  88. class COutliner : public CWnd,
  89.                   public CGenericObject,
  90.                   public IOutliner
  91. {
  92.     friend class COutlinerDropTarget;
  93.     friend class COutlinerParent;
  94.  
  95. #ifdef _WIN32
  96. private:
  97.     //  MouseWheel deltra tracker.
  98.     int m_iWheelDelta;
  99. #endif
  100.  
  101. protected:
  102.     LPUNKNOWN m_pUnkImage;
  103.     LPIMAGEMAP m_pIImage;
  104.     LPUNKNOWN m_pUnkUserImage;
  105.     LPIMAGEMAP m_pIUserImage;
  106.  
  107.     int m_iTotalLines;
  108.     int m_iTopLine;
  109.     int m_cyChar, m_cxChar;
  110.     int m_itemHeight;
  111.     int m_iPaintLines;
  112.     UINT m_idImageCol;
  113.     BOOL m_bHasPipes;
  114.  
  115.     int m_iCSID;
  116.  
  117.     static BOOL m_bTipsEnabled;
  118.     CTip *m_pTip;
  119.     int m_iTipState, m_iTipTimer; 
  120.     int m_iTipRow, m_iTipCol;
  121.  
  122.     COutlinerDropTarget * m_pDropTarget;
  123.  
  124.     HFONT m_hBoldFont, m_hRegFont, m_hItalFont;
  125.  
  126.     BOOL m_bDragging;
  127.     RECT m_rcHit;
  128.     POINT m_ptHit;
  129.     int m_iColHit, m_iRowHit;
  130.  
  131.     int m_iSelection, m_iFocus;
  132.     int m_iLastSelected;
  133.     int m_iDragSelection;
  134.     int m_iDragSelectionLineHalf;            // Which half of the selection is the drag over
  135.     int m_iDragSelectionLineThird;            // Which third of the selection is the drag over
  136.       BOOL m_bDragSectionChanged;
  137.  
  138.     BOOL m_bClearOnRelease;
  139.     BOOL m_bSelectOnRelease;
  140.  
  141.     OutlinerColumn_t ** m_pColumn;
  142.  
  143.     int m_iNumColumns;
  144.     int m_iVisColumns;
  145.     int m_iTotalWidth;
  146.  
  147.     BOOL m_bDraggingData;
  148.     
  149. // Methods
  150.  
  151.     void TipHide ( );
  152.     void HandleMouseMove( POINT point );
  153.     int LineFromPoint (POINT point);
  154.     virtual BOOL TestRowCol(POINT point, int &, int &); 
  155.  
  156.     virtual UINT GetOutlinerBitmap(void);
  157.     BOOL ViewerHasFocus ( );
  158.     virtual void ColumnsSwapped() {};
  159.     void DoToggleExpansion( int iLine );
  160.     void DoExpand( int iLine );
  161.     int DoExpandAll( int iLine );
  162.     void DoCollapse( int iLine );
  163.     int DoCollapseAll( int iLine );
  164.     int GetPipeIndex ( void *pData, int iDepth, OutlinerAncestorInfo * pAncestor );
  165.     void RectFromLine ( int iLineNo, LPRECT lpRect, LPRECT lpOutRect );
  166.     void EraseLine ( int iLineNo, HDC hdc, LPRECT lpRect );
  167.     virtual int DrawPipes ( int iLineNo, int iColNo, int offset, HDC hdc, void * pLineData );
  168.     void PaintLine ( int iLineNo, HDC hdc, LPRECT lpPaintRect );
  169.     void PaintColumn ( int iLineNo, int iColumn, LPRECT lpColumnRect, HDC hdc, 
  170.                        void * pLineData );
  171.     virtual void PaintDragLine(HDC hdc, CRect &rectColumn);
  172.     void EnableScrollBars ( void );
  173.     void DrawColumnText (HDC hdc, LPRECT lpColumnRect, LPCTSTR lpszText, 
  174.                          CropType_t cropping, AlignType_t alignment );
  175.  
  176. // Basic Overrideables
  177.  
  178.     virtual COutlinerDropTarget* CreateDropTarget();
  179.  
  180.     // right mouse menu stuff
  181.     virtual void PropertyMenu(int iSel, UINT flags=0);
  182.  
  183.     // Line stuff
  184.     virtual int GetDepth( int iLine );
  185.     virtual int GetNumChildren( int iLine );
  186.     virtual int GetParentIndex( int iLine );
  187.     virtual BOOL IsCollapsed( int iLine );
  188.     virtual BOOL HasFocus ( int iLine );
  189.     virtual BOOL IsSelected ( int iLine );
  190.  
  191.     virtual int ToggleExpansion ( int iLine );
  192.     virtual int Expand ( int iLine );
  193.     virtual int Collapse ( int iLine );
  194.     virtual int ExpandAll ( int iLine );
  195.     virtual int CollapseAll ( int iLine );
  196.  
  197.     void InvalidateLine ( int iLineNo );
  198.     void InvalidateLines( int iStart, int iCount );
  199.  
  200.     virtual BOOL HighlightIfDragging(void);
  201.  
  202.     // Column Stuff
  203.     void GetColumnRect( int iCol, RECT &rc );
  204.     void InvalidateColumn( int iCol );
  205.  
  206.     // Drawing stuff
  207.     virtual LPCTSTR GetColumnText ( UINT iColumn, void * pLineData );
  208.     virtual LPCTSTR GetColumnTip ( UINT iColumn, void * pLineData );
  209.     virtual BOOL RenderData ( UINT, CRect &, CDC &, LPCTSTR lpsz = NULL );
  210.     virtual void * AcquireLineData ( int iLine );
  211.     virtual void ReleaseLineData ( void * pLineData );
  212.     virtual void GetTreeInfo ( int iLine, uint32 * pFlags, int * iDepth, 
  213.                                OutlinerAncestorInfo ** pAncestor );
  214.     virtual HFONT GetLineFont ( void * pLineData );
  215.     virtual int TranslateIcon ( void * );
  216.     virtual int TranslateIconFolder ( void * );
  217.  
  218.     // Navigation stuff
  219.     virtual void PositionHome ( void );
  220.     virtual void PositionEnd ( void );
  221.     virtual void PositionPageUp ( void );
  222.     virtual void PositionPageDown ( void );
  223.     virtual void PositionPrevious ( void );
  224.     virtual void PositionNext ( void );
  225.  
  226.     // Sizing stuff
  227.     virtual BOOL SqueezeColumns( int iColFrom = -1, int iDelta = 0, BOOL bRepaint = TRUE );
  228.     virtual void InitializeItemHeight(int iDesiredSize);
  229.  
  230.     // Command stuff
  231.     virtual BOOL ColumnCommand ( int idColumn, int iLineNo );
  232.  
  233.     // drag drop stuff
  234.  
  235.     // clip format
  236.     virtual void InitializeClipFormats(void);
  237.     virtual CLIPFORMAT * GetClipFormatList(void);
  238.     virtual BOOL RecognizedFormat( COleDataObject * );
  239.  
  240.     // initiating drag
  241.     virtual COleDataSource * GetDataSource(void);
  242.     virtual void InitiateDragDrop(void);
  243.  
  244.     // accepting drop
  245.     virtual DROPEFFECT DropSelect(int iLineNo, COleDataObject *pObject);
  246.     virtual void AcceptDrop( int iLineNo, COleDataObject * pObject, DROPEFFECT dropEffect );
  247.     virtual void EndDropSelect (void);
  248.  
  249.     // accessors
  250.     virtual int GetDropLine(void);
  251.     virtual int GetDragHeartbeat();
  252.  
  253.     BOOL IsDragging() { return m_bDragging; }
  254.     
  255.     virtual void OnSelChanged();
  256.     virtual void OnSelDblClk();
  257.  
  258. public:
  259.     COutliner ( );
  260.     ~COutliner ( );
  261.  
  262.     STDMETHODIMP QueryInterface(REFIID,LPVOID *);
  263.    
  264.     void EnableTips(BOOL = TRUE);
  265.     BOOL GetTipsEnabled() { return m_bTipsEnabled; }
  266.  
  267.     void SetCSID( int csid );
  268.     int GetCSID() { return m_iCSID; }
  269.  
  270.     int AddColumn ( LPCTSTR header, UINT idCol, 
  271.         int iMinCol, int iMaxCol = 10000, 
  272.         Column_t cType = ColumnFixed, int iPercent = 50,
  273.         BOOL bIsButton = TRUE, CropType_t ct = CropRight, 
  274.         AlignType_t at = AlignLeft );
  275.  
  276.     int GetColumnSize ( UINT idCol );
  277.     void SetColumnSize ( UINT idCol, int iSize );
  278.  
  279.     int GetColumnPercent ( UINT idCol ); 
  280.     void SetColumnPercent ( UINT idCol, int iPercent );
  281.  
  282.     int GetColumnPos( UINT idCol );
  283.     UINT GetColumnAtPos( int iPos );
  284.     void SetColumnPos( UINT idCol, int iColumn );
  285.  
  286.     void SetColumnName ( UINT idCol, LPCTSTR pName ); 
  287.     LPCTSTR GetColumnName( UINT idCol ) { return NULL; }
  288.  
  289.     void SetImageColumn( UINT idCol ) { m_idImageCol = idCol; }
  290.     void SetHasPipes( BOOL bPipes ) { m_bHasPipes = bPipes; }
  291.  
  292.     int GetNumColumns() { return m_iNumColumns; }
  293.     void SetVisibleColumns( UINT iVisCol ) { m_iVisColumns = iVisCol; }
  294.     UINT GetVisibleColumns() { return m_iVisColumns; }
  295.     
  296.     void LoadXPPrefs( const char *prefname );
  297.     void SaveXPPrefs( const char *prefname );
  298.  
  299.     // Item stuff
  300.     virtual void SelectItem ( int iSel, int mode = OUTLINER_SET, UINT flags = 0 );
  301.     virtual BOOL DeleteItem ( int iLine ) { return TRUE; }
  302.     void ScrollIntoView( int iVisibleLine );
  303.     void EnsureVisible(int iVisibleLine);
  304.     virtual void SetFocusLine(int iLine);
  305.     virtual int GetFocusLine();
  306.     virtual void SetTotalLines( int );
  307.     virtual int GetTotalLines();
  308.  
  309. protected:
  310.  
  311.     //
  312.     // rhp - Adding this stuff in to try to give QA partner a way to 
  313.     // get the information out of the outliner objects. This will be
  314.     // a single entry point used with the WM_COPYDATA message.
  315.     //
  316.     afx_msg LONG OnProcessOLQAHook(UINT, LONG);
  317.     
  318.     afx_msg int OnCreate ( LPCREATESTRUCT );
  319.     afx_msg void OnPaint ( );
  320.     afx_msg void OnSize ( UINT, int, int );
  321.     afx_msg void OnGetMinMaxInfo ( MINMAXINFO FAR* lpMMI );
  322.     afx_msg void OnDestroy ( );
  323.     afx_msg void OnLButtonDown ( UINT nFlags, CPoint point );
  324.     afx_msg void OnMouseMove( UINT nFlags, CPoint point );
  325.     afx_msg void OnLButtonUp ( UINT nFlags, CPoint point );
  326.     afx_msg void OnRButtonDown ( UINT nFlags, CPoint point );
  327.     afx_msg void OnRButtonUp( UINT nFlags, CPoint pt );
  328.     afx_msg void OnKeyUp ( UINT nChar, UINT nRepCnt, UINT nFlags );
  329.     afx_msg void OnKeyDown ( UINT nChar, UINT nRepCnt, UINT nFlags );
  330.     afx_msg void OnSysKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags );
  331.     afx_msg void OnLButtonDblClk ( UINT nFlags, CPoint point );
  332.     afx_msg void OnKillFocus ( CWnd * pNewWnd );
  333.     afx_msg void OnSetFocus ( CWnd * pOldWnd );
  334.     afx_msg void OnVScroll( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar );
  335.     afx_msg BOOL OnEraseBkgnd( CDC * );
  336.     afx_msg void OnTimer( UINT );
  337.     afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message );
  338.     afx_msg void OnSysColorChange( );
  339.     afx_msg UINT OnGetDlgCode( );
  340. #if defined(XP_WIN32) && _MSC_VER >= 1100
  341.     afx_msg LONG OnHackedMouseWheel(WPARAM wParam, LPARAM lParam);
  342.     afx_msg LONG OnMouseWheel(WPARAM wParam, LPARAM lParam);
  343. #endif
  344.     DECLARE_MESSAGE_MAP()
  345. };
  346.  
  347.  
  348. class CMSelectOutliner: public COutliner 
  349. {
  350. protected:
  351.  
  352.     MSG_ViewIndex *m_pIndices;
  353.     int m_iIndicesSize, m_iIndicesCount;
  354.     int m_iShiftAnchor;
  355.     BOOL m_bNoMultiSel;
  356.  
  357. public:
  358.     CMSelectOutliner();
  359.     ~CMSelectOutliner();
  360.  
  361.     void GetSelection( const MSG_ViewIndex *&indices, int &count );
  362.     virtual void SetTotalLines( int iLines );
  363.     virtual BOOL IsSelected ( int iLine );
  364.  
  365.     virtual void PositionHome( );
  366.     virtual void PositionEnd( );
  367.     virtual void PositionPrevious( );
  368.     virtual void PositionNext( );
  369.     virtual void PositionPageUp( );
  370.     virtual void PositionPageDown( );
  371.  
  372.     virtual void SelectItem ( int iSel, int mode = OUTLINER_SET, UINT flags = 0 );
  373.     virtual void SelectRange( int iStart, int iEnd, BOOL bNotify );
  374.  
  375. protected:
  376.     void AddSelection( MSG_ViewIndex iSel );
  377.     void SelectRange( MSG_ViewIndex iSelBegin, MSG_ViewIndex iSelEnd );
  378.     void RemoveSelection( MSG_ViewIndex iSel );
  379.     void RemoveSelectionRange( MSG_ViewIndex iSelBegin, MSG_ViewIndex iSelEnd );
  380.     void ClearSelection();
  381.  
  382.     virtual BOOL HandleInsert( MSG_ViewIndex iStart, LONG iCount );
  383.     virtual BOOL HandleDelete( MSG_ViewIndex iStart, LONG iCount );
  384.     virtual void HandleScramble();
  385. };
  386.  
  387. class COutlinerParent: public CWnd 
  388. {
  389. protected:
  390.     CNSToolTip2 m_wndTip;
  391.  
  392.     BOOL    m_bDisableHeaders;
  393.     BOOL    m_bHasBorder;
  394.  
  395.     HFONT   m_hToolFont;
  396.  
  397.     int     m_iHeaderHeight;
  398.     int        m_cxChar;
  399.  
  400.     POINT    m_pt, m_ptHit;
  401.     RECT    m_rcTest;
  402.     RECT    m_rcHit, m_rcDrag;
  403.  
  404.     HBITMAP m_hbmDrag;
  405.     HDC        m_hdcDrag;
  406.  
  407.     BOOL    m_bEnableFocusFrame;
  408.     BOOL    m_bResizeArea;
  409.     BOOL    m_bResizeColumn;
  410.     BOOL    m_bHeaderSelected;
  411.     BOOL    m_bDraggingHeader;
  412.     UINT    m_idColHit;
  413.     int        m_iColHit;
  414.     int        m_iColResize;
  415.     int        m_iColLoser;
  416.  
  417.     LPUNKNOWN m_pUnkImage;
  418.     LPIMAGEMAP m_pIImage;
  419.     LPUNKNOWN m_pUnkUserImage;
  420.     LPIMAGEMAP m_pIUserImage;
  421.  
  422.     enum { pusherNone = 0, pusherLeft = 1, pusherRight = 2, pusherLeftRight = 3 };
  423.     int        m_iPusherWidth;
  424.     int        m_iPusherState;
  425.     int        m_iPusherRgn;
  426.     int        m_iPusherHit;
  427.  
  428.     void InvalidatePusher();
  429.     int TestPusher( POINT &pt );
  430.     BOOL TestCol( POINT &pt, int &iCol );
  431.     void GetColumnRect( int iCol, RECT &rc );
  432.  
  433.     virtual BOOL ColumnCommand ( int idColumn );
  434.     virtual BOOL RenderData ( int idColumn, CRect & rect, CDC & dc, LPCTSTR lpsz = NULL );
  435.  
  436.     void DrawButtonRect( HDC hDC, const RECT &rect, BOOL bDepressed );
  437.     void DrawColumnHeader( HDC hDC, const RECT &rect, int iCol );
  438.  
  439.     BOOL ResizeClipCursor();
  440.     
  441. public:
  442.     COutliner * m_pOutliner;
  443.  
  444.     COutlinerParent();
  445.     ~COutlinerParent();
  446.  
  447.     void EnableBorder ( BOOL bEnable = TRUE ) { m_bHasBorder = bEnable; }
  448.     void EnableHeaders ( BOOL bEnable = TRUE) { m_bDisableHeaders = !bEnable; Invalidate ( ); }
  449.        void EnableFocusFrame ( BOOL bEnable = TRUE) { m_bEnableFocusFrame = bEnable; }
  450.     void SetOutliner ( COutliner * pOutliner );
  451.  
  452.     void InvalidateColumn( int iCol );
  453.     void UpdateFocusFrame();
  454.     
  455.     virtual COutliner * GetOutliner ( void ) { return NULL; }
  456.     virtual void CreateColumns ( void ) { }
  457.  
  458. protected:
  459.     virtual BOOL PreTranslateMessage( MSG* pMsg );
  460.  
  461.     //{{AFX_MSG(COutlinerParent)
  462.     afx_msg int OnCreate ( LPCREATESTRUCT );
  463.     afx_msg void OnSize( UINT nType, int cx, int cy );
  464.     afx_msg void OnGetMinMaxInfo( MINMAXINFO FAR* lpMMI );
  465.     afx_msg void OnSetFocus ( CWnd * pOldWnd );
  466.     afx_msg BOOL OnEraseBkgnd( CDC * );
  467.     afx_msg void OnPaint ( void );
  468.     afx_msg void OnLButtonDown( UINT nFlags, CPoint point );
  469.     afx_msg void OnLButtonUp( UINT nFlags, CPoint point );
  470.     afx_msg void OnKeyDown ( UINT nChar, UINT nRepCnt, UINT nFlags );
  471.     afx_msg void OnMouseMove( UINT nFlags, CPoint point );
  472.     afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message );
  473.     //}}AFX_MSG
  474.     DECLARE_MESSAGE_MAP()
  475.  
  476. };
  477.  
  478.  
  479. ///////////////////////////////////////////////////////////////////////
  480. // COutlinerView
  481.  
  482. class COutlinerView: public CView
  483. {
  484. public:
  485.     COutlinerParent * m_pOutlinerParent;
  486.  
  487.     void CreateColumns ( )
  488.     {
  489.         m_pOutlinerParent->CreateColumns ( );
  490.     }
  491.  
  492. protected:
  493.     ~COutlinerView() {
  494.         delete m_pOutlinerParent;
  495.     }
  496.     virtual void OnDraw(CDC *pDC);
  497.     virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  498.  
  499.     afx_msg int OnCreate ( LPCREATESTRUCT );
  500.     afx_msg void OnSize ( UINT, int, int );
  501.     afx_msg void OnSetFocus ( CWnd * pOldWnd );
  502.     DECLARE_MESSAGE_MAP()
  503.  
  504.     DECLARE_DYNCREATE(COutlinerView)
  505. };
  506.  
  507. //////////////////////////////////////////////////////////////////////////////
  508. // COutlinerDropTarget declaration
  509.  
  510. class COutlinerDropTarget: public COleDropTarget
  511. {
  512. protected:
  513.     DWORD m_dwOldTicks;
  514.     COutliner *m_pOutliner;
  515.  
  516. public:
  517.     DROPEFFECT OnDragEnter(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
  518.     BOOL OnDrop(CWnd* pWnd, COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
  519.     DROPEFFECT OnDragOver(CWnd* pWnd, COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
  520.     void OnDragLeave(CWnd* pWnd);
  521. #ifdef _WIN32
  522.     DROPEFFECT OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point);
  523. #else
  524.     BOOL OnDragScroll(CWnd* pWnd, DWORD dwKeyState, CPoint point);
  525. #endif
  526.     void DragScroll(BOOL);
  527.     COutlinerDropTarget(COutliner *);
  528. };
  529.  
  530.  
  531. #ifndef _WIN32
  532. HGDIOBJ GetCurrentObject(HDC hdc, UINT uObjectType);
  533. #endif
  534.  
  535. #endif
  536.