interact.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:7k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * interact.h
  3.  *
  4.  * Basic GUI interactor.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: interact.h,v $
  30.  * Revision 1.17  2000/04/13 23:18:42  robertj
  31.  * Fixed problems with sizing controls with scroll bars.
  32.  *
  33.  * Revision 1.16  1998/11/30 03:00:03  robertj
  34.  * New directory structure
  35.  *
  36.  * Revision 1.15  1998/09/24 03:40:31  robertj
  37.  * Added open software license.
  38.  *
  39.  * Revision 1.14  1998/09/21 13:30:52  robertj
  40.  * Changes to support new PListView class. Different call back method.
  41.  *
  42.  * Revision 1.13  1998/09/14 13:00:46  robertj
  43.  * Fixed major problem with resource leak every time a control is painted.
  44.  *
  45.  * Revision 1.12  1996/08/08 10:09:57  robertj
  46.  * Directory structure changes for common files.
  47.  *
  48.  * Revision 1.11  1995/12/10 11:53:53  robertj
  49.  * Support for controls background colours.
  50.  *
  51.  * Revision 1.10  1995/11/09 12:25:48  robertj
  52.  * Moved window style bits to member variable.
  53.  *
  54.  * Revision 1.9  1995/04/02 09:27:47  robertj
  55.  * Added "balloon" help.
  56.  *
  57.  * Revision 1.8  1995/03/12 05:00:13  robertj
  58.  * Re-organisation of DOS/WIN16 and WIN32 platforms to maximise common code.
  59.  * Used built-in equate for WIN32 API (_WIN32).
  60.  *
  61.  * Revision 1.7  1995/01/27  11:21:24  robertj
  62.  * Underscored library variables.
  63.  * Fixed bug in nested messages.
  64.  *
  65.  * Revision 1.6  1994/11/28  12:40:28  robertj
  66.  * Fixed problem with setting fonts on individual controls in a dialog loaded from resource. This
  67.  *   required better logic in deleting HFONTs on an interactor.
  68.  *
  69.  * Revision 1.5  1994/10/23  05:46:38  robertj
  70.  * Changed window messaging technique.
  71.  *
  72.  * Revision 1.4  1994/07/17  10:46:06  robertj
  73.  * Enhancements, bug fixes etc.
  74.  *
  75.  * Revision 1.3  1994/06/25  11:55:15  robertj
  76.  * Unix version synchronisation.
  77.  *
  78.  * Revision 1.2  1994/04/20  12:17:44  robertj
  79.  * assert changes
  80.  *
  81.  * Revision 1.1  1994/04/12  08:21:52  robertj
  82.  * Initial revision
  83.  *
  84.  */
  85. #ifndef _PINTERACTOR
  86. #define P_NULL_WINDOW ((HWND)NULL)
  87. #define P_DEAD_WINDOW ((HWND)-1)
  88. #if defined(_WIN32)
  89. #define PGET_CLASS_VALUE(hWnd, name) GetClassLong(hWnd, GCL_##name)
  90. #define PGET_WINDOW_VALUE(hWnd, name) GetWindowLong(hWnd, GWL_##name)
  91. #define PSET_CLASS_VALUE(hWnd, name, val) 
  92.                                    SetClassLong(hWnd, GCL_##name, (DWORD)(val))
  93. #define PSET_WINDOW_VALUE(hWnd,name,val) 
  94.                                   SetWindowLong(hWnd, GWL_##name, (DWORD)(val))
  95. #else
  96. #define PGET_CLASS_VALUE(hWnd, name) GetClassWord(hWnd, GCW_##name)
  97. #define PGET_WINDOW_VALUE(hWnd, name) GetWindowWord(hWnd, GWW_##name)
  98. #define PSET_CLASS_VALUE(hWnd, name, val) 
  99.                                     SetClassWord(hWnd, GCW_##name, (WORD)(val))
  100. #define PSET_WINDOW_VALUE(hWnd, name, val) 
  101.                                    SetWindowWord(hWnd, GWW_##name, (WORD)(val))
  102. #endif
  103. ///////////////////////////////////////////////////////////////////////////////
  104. // PInteractor
  105. #include "../../interact.h"
  106.   public:
  107.     // New functions for class
  108.     HWND GetHWND() const;
  109.       // Return the MS-Windows handle. If does not exist yet, create it.
  110.     virtual void CreateHWND();
  111.       // Create the MS-Windows handle for the interactor.
  112.   protected:
  113.     PInteractor(PInteractor * parent, HWND hWnd);
  114.       // Constructor for making PInteractors when already have an MS-Windows
  115.       // window handle.
  116.     void SetWndText(const PString & str,
  117.                                   UINT setMsg = WM_SETTEXT, WPARAM wParam = 0);
  118.       // Set the MS-Windows text via SendMessage(). Uses the message codes as
  119.       // supplied in the parameters.
  120.     PString GetWndText(UINT lenMsg = WM_GETTEXTLENGTH, UINT getMsg = WM_GETTEXT,
  121.                              WPARAM wParamGet = -1, WPARAM wParamLen = 0) const;
  122.       // Get the MS-Windows text via SendMessage(). Uses the message codes as
  123.       // supplied in the parameters.
  124.     void SetWndFont() const;
  125.       // Set the windows font when it is created or changed.
  126.     void RemoveWndFont() const;
  127.       // Removes the windows font when it is destroyed or changed.
  128.     void SetWndCursor() const;
  129.       // Set the windows cursor when it is changed in this interactor.
  130.     virtual void GetCreateWinInfo(WNDCLASS & wndClass);
  131.       // Return the info required by CreateWindow() and RegisterClass().
  132.     virtual void WndProc();
  133.       // Event handler for this interactor. Translates MS-Windows messages into
  134.       // virtual member function calls.
  135.     virtual void DefWndProc();
  136.       // Default MS-Windows message handler.
  137.     virtual BOOL AdjustDimensionForScrollBar(UINT bar) const;
  138.       // Determine if the client window dimensions must allow for a scroll bar.
  139.     // Member variables
  140.     HWND _hWnd;
  141.       // MS-Windows handle
  142.     struct _WindowsMessage {
  143.       UINT    event;
  144.       WPARAM  wParam;
  145.       LPARAM  lParam;
  146.       LRESULT lResult;
  147.       BOOL    processed;
  148.     } * _msg;
  149.       // Current WndProc message parameters and return value.
  150.     BOOL _in_WM_PAINT;
  151.       // Prevent recursive errors by remembering if we are in WM_PAINT
  152.     DWORD _styleBits, _exStyleBits;
  153.       // Style that was used to create the interactor.
  154.     HBRUSH hBackgroundBrush;
  155.       // Background brush
  156.   private:
  157.     void Construct(PInteractor * par, HWND hWnd, BOOL hiddenChild);
  158.       // Common construction code.
  159.     BOOL HandleScrollBar(HWND scrWnd, WPARAM code, int trackVal);
  160.     BOOL HandleCommand(NMHDR & msg);
  161.     BOOL HandleDrawItem(const DRAWITEMSTRUCT FAR * dis);
  162.     BOOL HandleMeasureItem(MEASUREITEMSTRUCT FAR * mis);
  163.     BOOL HandleCompareItem(const COMPAREITEMSTRUCT FAR * cis);
  164.     BOOL HandleDeleteItem(const DELETEITEMSTRUCT FAR * dis);
  165.     BOOL HandleCtlColour(HWND ctlWnd, HDC hDC,
  166.                                  const PColour & defFg, const PColour & defBk);
  167.       // Helper functions for WndProc()
  168.   friend class PApplication;
  169. };
  170. #endif