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

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * pwlib.inl
  3.  *
  4.  * GUI inline function implmentations.
  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: pwlib.inl,v $
  30.  * Revision 1.39  2000/07/11 18:24:02  robertj
  31.  * Fixed incorrect return value on PComboBox::GetCurrent() when no selection.
  32.  *
  33.  * Revision 1.38  2000/04/13 01:37:14  robertj
  34.  * Added missing implementation of PEditBox::GetSelection() on Win32.
  35.  * Added PEditBox::ReplaceSelection() function.
  36.  *
  37.  * Revision 1.37  2000/03/17 20:32:22  robertj
  38.  * Fixed race conditions in mult-threaded windows (dialogs in particular)
  39.  *
  40.  * Revision 1.36  1999/11/13 14:18:50  robertj
  41.  * Moved scrollBar nudge routines to platform dependent code
  42.  *
  43.  * Revision 1.35  1999/08/17 03:44:30  robertj
  44.  * Fixed WIN32 version of function.
  45.  *
  46.  * Revision 1.34  1999/08/07 07:13:22  robertj
  47.  * Fixed problems with "balloon help" text popup.
  48.  *
  49.  * Revision 1.33  1998/09/24 03:41:37  robertj
  50.  * Added open software license.
  51.  *
  52.  * Revision 1.32  1998/09/21 13:30:57  robertj
  53.  * Changes to support new PListView class. Different call back method.
  54.  *
  55.  * Revision 1.31  1998/03/20 03:13:44  robertj
  56.  * Added function to get physical bounds of canvas. Allows to scale drawing.
  57.  *
  58.  * Revision 1.30  1998/02/06 04:00:17  robertj
  59.  * Fixed colour of controls, again!
  60.  *
  61.  * Revision 1.29  1996/11/04 03:33:14  robertj
  62.  * Fixed bug in background colour of dialogs.
  63.  *
  64.  * Revision 1.28  1996/06/03 09:58:05  robertj
  65.  * Added PInteractor FromScreen/ToScreen for individual ordinates.
  66.  *
  67.  * Revision 1.27  1996/02/15 14:51:57  robertj
  68.  * Fixed bug in choice box get text, could crash heap.
  69.  *
  70.  * Revision 1.26  1996/01/28 03:04:16  robertj
  71.  * Added assert into all Compare functions to assure comparison between compatible objects.
  72.  *
  73.  * Revision 1.25  1996/01/02 12:59:18  robertj
  74.  * Added find interactor function.
  75.  *
  76.  * Revision 1.24  1995/11/09 12:36:23  robertj
  77.  * Fixed bug in control colours.
  78.  *
  79.  * Revision 1.23  1995/10/14 15:16:41  robertj
  80.  * Changed SetChoice to SetSelection for consistencies sake.
  81.  * Added function for getting ssytem colour.
  82.  *
  83.  * Revision 1.22  1995/06/04 12:50:54  robertj
  84.  * Added Add component functions.
  85.  * Added common constructor - Unix implementation requirement.
  86.  *
  87.  * Revision 1.21  1995/04/25 11:41:32  robertj
  88.  * Fixed Borland compiler warnings.
  89.  *
  90.  * Revision 1.20  1995/04/22 01:03:02  robertj
  91.  * Added common construct function for multi-line edit box.
  92.  *
  93.  * Revision 1.19  1995/02/19 04:16:07  robertj
  94.  * Moved PListBox::SetSelection to cxx file.
  95.  * Added callback when PListBox::SetSelection changes selection.
  96.  *
  97.  * Revision 1.18  1995/01/28  07:28:47  robertj
  98.  * Assured all Windows strings have n converted to rn and vice versa.
  99.  *
  100.  * Revision 1.17  1995/01/27  11:22:29  robertj
  101.  * Underscored library variables.
  102.  *
  103.  * Revision 1.16  1995/01/22  07:29:48  robertj
  104.  * Added font & colour standard dialogs.
  105.  *
  106.  * Revision 1.15  1995/01/21  05:19:33  robertj
  107.  * Fixed parameters.
  108.  *
  109.  * Revision 1.14  1995/01/15  04:53:39  robertj
  110.  * Moved function to interact.cxx
  111.  *
  112.  * Revision 1.13  1995/01/06  10:44:03  robertj
  113.  * Changed PRealFont usage from pointer to reference.
  114.  *
  115.  * Revision 1.12  1995/01/03  09:41:59  robertj
  116.  * Removed copy stuff for sub menus.
  117.  *
  118.  * Revision 1.11  1995/01/02  12:26:19  robertj
  119.  * Added update flag to list box select.
  120.  *
  121.  * Revision 1.10  1994/12/21  11:58:26  robertj
  122.  * Documentation and variable normalisation.
  123.  *
  124.  * Revision 1.9  1994/12/14  11:17:23  robertj
  125.  * Changed PDIMENSION to be unsigned causing untold number of changes.
  126.  *
  127.  * Revision 1.8  1994/12/05  11:34:30  robertj
  128.  * Major rewrite of images, pictures and pixmaps.
  129.  * Renamed PPict, PPixels and PImage to make sure all uses are found.
  130.  *
  131.  * Revision 1.7  1994/10/30  11:43:27  robertj
  132.  * Improved DC creation in RedrawCanvas.
  133.  * Added functions to check for in clip region.
  134.  * Changed mechanism for doing notification callback functions.
  135.  *
  136.  * Revision 1.6  1994/10/23  05:51:04  robertj
  137.  * Shortened OS error assert.
  138.  * Changed windows message handling technique.
  139.  *
  140.  * Revision 1.5  1994/08/21  23:43:02  robertj
  141.  * Moved some destructors from common.
  142.  * Added delayed close of interactors to avoid the "delete this" problem.
  143.  *
  144.  * Revision 1.4  1994/07/27  05:58:07  robertj
  145.  * Synchronisation.
  146.  *
  147.  * Revision 1.3  1994/07/17  10:46:06  robertj
  148.  * Enhancements, bug fixes etc.
  149.  *
  150.  * Revision 1.2  1994/06/25  11:55:15  robertj
  151.  * Unix version synchronisation.
  152.  *
  153.  * Revision 1.1  1994/04/20  12:17:44  robertj
  154.  * Initial revision
  155.  */
  156. ///////////////////////////////////////////////////////////////////////////////
  157. // PDim
  158. PINLINE PDim PDim::FromDWORD(DWORD dw)
  159.   { return PDim(LOWORD(dw), HIWORD(dw)); }
  160. PINLINE DWORD PDim::ToDWORD() const
  161.   { return MAKELONG(width, height); }
  162. ///////////////////////////////////////////////////////////////////////////////
  163. // PPoint
  164. PINLINE PPoint::PPoint()
  165.   { p.x = p.y = 0; }
  166. PINLINE PPoint::PPoint(PORDINATE nx, PORDINATE ny)
  167.   { p.x = nx; p.y = ny; }
  168. PINLINE PPoint::PPoint(const PDim & pt)
  169.   { p.x = pt.Width(); p.y = pt.Height(); }
  170. PINLINE PPoint::PPoint(const PPoint & pt)
  171.   { p.x = pt.p.x; p.y = pt.p.y; }
  172. PINLINE PORDINATE PPoint::X() const
  173.   { return (PORDINATE)p.x; }
  174. PINLINE PORDINATE PPoint::Y() const
  175.   { return (PORDINATE)p.y; }
  176. PINLINE void PPoint::SetX(PORDINATE nx)
  177.   { p.x = nx; }
  178. PINLINE void PPoint::SetY(PORDINATE ny)
  179.   { p.y = ny; }
  180. PINLINE void PPoint::AddX(PORDINATE nx)
  181.   { p.x += nx; }
  182. PINLINE void PPoint::AddY(PORDINATE ny)
  183.   { p.y += ny; }
  184. PINLINE PPoint & PPoint::operator+=(const PPoint & pt)
  185.   { p.x += pt.p.x; p.y += pt.p.y; return *this; }
  186. PINLINE PPoint & PPoint::operator+=(const PDim & dim)
  187.   { p.x += dim.Width(); p.y += dim.Height(); return *this; }
  188. PINLINE PPoint & PPoint::operator-=(const PPoint & pt)
  189.   { p.x -= pt.p.x; p.y -= pt.p.y; return *this; }
  190. PINLINE PPoint & PPoint::operator-=(const PDim & dim)
  191.   { p.x -= dim.Width(); p.y -= dim.Height(); return *this; }
  192. PINLINE PPoint & PPoint::operator*=(const PPoint & pt)
  193.   { p.x *= pt.p.x; p.y *= pt.p.y; return *this; }
  194. PINLINE PPoint & PPoint::operator*=(const PDim & dim)
  195.   { p.x *= dim.Width(); p.y *= dim.Height(); return *this; }
  196. PINLINE PPoint & PPoint::operator*=(PORDINATE scale)
  197.   { p.x *= scale; p.y *= scale; return *this; }
  198. PINLINE PPoint & PPoint::operator/=(const PPoint & pt)
  199.   { p.x /= pt.p.x; p.y /= pt.p.y; return *this; }
  200. PINLINE PPoint & PPoint::operator/=(const PDim & dim)
  201.   { p.x /= dim.Width(); p.y /= dim.Height(); return *this; }
  202. PINLINE PPoint & PPoint::operator/=(PORDINATE scale)
  203.   { p.x /= scale; p.y /= scale; return *this; }
  204. PINLINE BOOL PPoint::InRect(const PRect & rect) const
  205.   { return PtInRect(rect, p); }
  206. PINLINE DWORD PPoint::ToDWORD() const
  207.   { return MAKELONG(p.x, p.y); }
  208. PINLINE PPoint::operator POINT() const
  209.   { return p; }
  210. PINLINE PPoint::operator POINT*()
  211.   { return &p; }
  212. PINLINE PPoint::operator const POINT*() const
  213.   { return &p; }
  214. ///////////////////////////////////////////////////////////////////////////////
  215. // PRect
  216. PINLINE PRect::PRect(const RECT & rect)
  217.   { CopyRect(&r, &rect); }
  218. PINLINE PORDINATE PRect::Left() const
  219.   { return (PORDINATE)r.left; }
  220. PINLINE PORDINATE PRect::Right() const
  221.   { return (PORDINATE)r.right; }
  222. PINLINE PORDINATE PRect::Top() const
  223.   { return (PORDINATE)r.top; }
  224. PINLINE PORDINATE PRect::Bottom() const
  225.   { return (PORDINATE)r.bottom; }
  226. PINLINE PORDINATE PRect::X() const
  227.   { return (PORDINATE)r.left; }
  228. PINLINE PORDINATE PRect::Y() const
  229.   { return (PORDINATE)r.top; }
  230. PINLINE PDIMENSION PRect::Width() const
  231.   { return (PDIMENSION)(r.right - r.left); }
  232. PINLINE PDIMENSION PRect::Height() const
  233.   { return (PDIMENSION)(r.bottom - r.top); }
  234. PINLINE void PRect::SetWidth(PDIMENSION dx)
  235.   { r.right = r.left + dx; }
  236. PINLINE void PRect::SetHeight(PDIMENSION dy)
  237.   { r.bottom = r.top + dy; }
  238. PINLINE BOOL PRect::ContainsPoint(const PPoint & pt) const
  239.   { return PtInRect(&r, pt); }
  240. PINLINE BOOL PRect::IsEmpty() const
  241.   { return IsRectEmpty(&r); }
  242. PINLINE void PRect::Inflate(PORDINATE dx, PORDINATE dy)
  243.   { InflateRect(&r, (int)dx, (int)dy); }
  244. PINLINE void PRect::Offset(PORDINATE dx, PORDINATE dy)
  245.   { OffsetRect(&r, (int)dx, (int)dy); }
  246. PINLINE PRect::operator RECT*()
  247.   { return &r; }
  248. PINLINE PRect::operator const RECT*() const
  249.   { return &r; }
  250. ///////////////////////////////////////////////////////////////////////////////
  251. // PRegion
  252. PINLINE PRegion::PRegion()
  253.   { hRegion = CreateRectRgn(0, 0, 0, 0); }
  254. PINLINE PRegion::PRegion(HRGN hRgn)
  255.   { hRegion = PAssertNULL(hRgn); }
  256. PINLINE PRegion::~PRegion()
  257.   { DeleteObject(hRegion); }
  258. PINLINE HRGN PRegion::GetHRGN() const
  259.   { return hRegion; }
  260. PINLINE BOOL PRegion::ContainsPoint(const PPoint & pt) const
  261.   { return PtInRegion(hRegion, pt.X(), pt.Y()); }
  262. PINLINE BOOL PRegion::ContainsRect(const PRect & rect) const
  263.   { return RectInRegion(hRegion, rect); }
  264. PINLINE void PRegion::Offset(PORDINATE dx, PORDINATE dy)
  265.   { OffsetRgn(hRegion, dx, dy); }
  266. //////////////////////////////////////////////////////////////////////////////
  267. // PColour
  268. PINLINE COLORREF PColour::ToCOLORREF() const
  269.   { return RGB(component[RedComponent],
  270.                        component[GreenComponent], component[BlueComponent]); }
  271. PINLINE PColour & PColour::FromSYSCOLOR(int syscol)
  272.   { return FromCOLORREF(GetSysColor(syscol)); }
  273. //////////////////////////////////////////////////////////////////////////////
  274. // PRealColour
  275. PINLINE PObject * PRealColour::Clone() const
  276.   { return new PRealColour(ToCOLORREF()); }
  277. PINLINE PRealColour::PRealColour(COLORREF col)
  278.   { FromCOLORREF(col); }
  279. //////////////////////////////////////////////////////////////////////////////
  280. // PPalette
  281. PINLINE void PPalette::CopyContents(const PPalette & pal)
  282.   { hPalette = pal.hPalette; }
  283. PINLINE HPALETTE PPalette::GetHPALETTE() const
  284.   { return hPalette; }
  285. //////////////////////////////////////////////////////////////////////////////
  286. // PCanvas
  287. PINLINE void PCanvas::DrawFocusRect(const PRect & rect)
  288.   { ::DrawFocusRect(GetHDC(), rect); }
  289. PINLINE void PCanvas::SetCurrentPosition(PORDINATE x, PORDINATE y)
  290.   { MoveToEx(GetHDC(), x, y, NULL); }
  291. PINLINE BOOL PCanvas::IsInClipRegion(const PPoint & pt) const
  292.   { return PtVisible(GetHDC(), pt.X(), pt.Y()); }
  293. PINLINE BOOL PCanvas::IsInClipRegion(const PRect & rect) const
  294.   { return RectVisible(GetHDC(), rect); }
  295. PINLINE HDC PCanvas::GetHDC() const
  296.   { return PAssertNULL(_hDC); }
  297. PINLINE BOOL PCanvas::NullHDC() const
  298.   { return _hDC == NULL; }
  299. //////////////////////////////////////////////////////////////////////////////
  300. // PInteractorCanvas
  301. PINLINE PInteractorCanvas::PInteractorCanvas(PInteractor * theInteractor,BOOL)
  302.   : interactor(theInteractor) { }
  303. PINLINE PInteractorCanvas::~PInteractorCanvas()
  304.   { }
  305. PINLINE void PInteractorCanvas::Scroll(PORDINATE dx,
  306.                                                 PORDINATE dy, const PRect & rect)
  307.   { PAssertOS(ScrollDC(GetHDC(), dx, dy, rect, rect, NULL, NULL)); }
  308. PINLINE void PInteractorCanvas::Copy(const PRect & srcRect,
  309.                                                 PCanvas & dst, const PPoint & pt)
  310.   { PAssertOS(BitBlt(dst.GetHDC(),
  311.               pt.X(), pt.Y(), srcRect.Width(), srcRect.Height(), GetHDC(),
  312.               srcRect.Left(), srcRect.Top(), SRCCOPY)); }
  313. PINLINE void PInteractorCanvas::Copy(const PRect & srcRect,
  314.                                            PCanvas & dst, const PRect & dstRect)
  315.   { PAssertOS(StretchBlt(dst.GetHDC(),
  316.       dstRect.X(), dstRect.Y(), dstRect.Width(), dstRect.Height(), GetHDC(),
  317.       srcRect.X(), srcRect.Y(), srcRect.Width(), srcRect.Height(), SRCCOPY)); }
  318. //////////////////////////////////////////////////////////////////////////////
  319. // PPixels
  320. PINLINE BYTE PPixelBase::GetDepth() const
  321.   { return (BYTE)info.biBitCount; }
  322. //////////////////////////////////////////////////////////////////////////////
  323. // PPict
  324. PINLINE PMETAFILE PPictBase::GetMETAFILE() const
  325.   { return hMetafile; }
  326. //////////////////////////////////////////////////////////////////////////////
  327. // PPattern
  328. PINLINE PDim PPattern::GetDimensions() const
  329.   { return PDim((PDIMENSION)bitmap.bmWidth, (PDIMENSION)bitmap.bmHeight); }
  330. PINLINE HBITMAP PPattern::GetHBITMAP() const
  331.   { return hBitmap; }
  332. //////////////////////////////////////////////////////////////////////////////
  333. // PCursor
  334. PINLINE PCursor::PCursor()
  335.   { hCursor = LoadCursor(NULL, IDC_ARROW); deleteCursor = FALSE; }
  336. PINLINE HCURSOR PCursor::GetHCURSOR() const
  337.   { return hCursor; }
  338. //////////////////////////////////////////////////////////////////////////////
  339. // PCaret
  340. PINLINE PCaret::PCaret()
  341.   { activeWindow = NULL; }
  342. PINLINE PCaret::PCaret(const PDim & dim)
  343.   : caretSize(dim) { activeWindow = NULL; }
  344. PINLINE PCaret::PCaret(PDIMENSION dx, PDIMENSION dy)
  345.   : caretSize(dx, dy) { activeWindow = NULL; }
  346. //////////////////////////////////////////////////////////////////////////////
  347. // PImgIcon
  348. PINLINE PImgIcon::PImgIcon()
  349.   { hBitmap = NULL; }
  350. PINLINE PImgIcon::PImgIcon(HBITMAP hBits)
  351.   { hBitmap = hBits; }
  352. PINLINE HBITMAP PImgIcon::GetHBITMAP() const
  353.   { return hBitmap; }
  354. PINLINE void PImgIcon::CopyContents(const PImgIcon & icon)
  355.   { hBitmap = icon.hBitmap; }
  356. //////////////////////////////////////////////////////////////////////////////
  357. // PIcon
  358. PINLINE PIcon::PIcon(HICON hIcn)
  359.   : PImgIcon((HBITMAP)NULL), deleteIcon(FALSE) { hIcon = hIcn; }
  360. PINLINE HICON PIcon::GetHICON() const
  361.   { return hIcon; }
  362. //////////////////////////////////////////////////////////////////////////////
  363. // PInteractor
  364. PINLINE PInteractor::PInteractor()
  365.   { Construct(NULL, NULL, TRUE); }
  366. PINLINE PInteractor::PInteractor(PInteractor * par, BOOL hiddenChild)
  367.   { Construct(PAssertNULL(par), NULL, hiddenChild); }
  368. PINLINE PInteractor::PInteractor(PInteractor * par, HWND hWnd)
  369.   { Construct(PAssertNULL(par), hWnd, FALSE); }
  370. PINLINE void PInteractor::Enable(BOOL enabled)
  371.   { EnableWindow(GetHWND(), enabled); }
  372. PINLINE BOOL PInteractor::IsEnabled() const
  373.   { return IsWindowEnabled(GetHWND()); }
  374. PINLINE void PInteractor::Show(BOOL visible)
  375.   { ShowWindow(GetHWND(), visible ? SW_SHOW : SW_HIDE); }
  376. PINLINE BOOL PInteractor::IsVisible() const
  377.   { return IsWindowVisible(GetHWND()); }
  378. PINLINE void PInteractor::BringToTop()
  379.   { BringWindowToTop(GetHWND()); }
  380. PINLINE BOOL PInteractor::IsOnTop() const
  381.   { return GetHWND() == GetActiveWindow(); }
  382. PINLINE void PInteractor::Update()
  383.   { UpdateWindow(GetHWND()); }
  384. PINLINE void PInteractor::GrabMouse()
  385.   { SetCapture(GetHWND()); }
  386. PINLINE BOOL PInteractor::HasMouse() const
  387.   { return GetCapture() == GetHWND(); }
  388. PINLINE void PInteractor::GrabFocus()
  389.   { SetFocus(GetHWND()); }
  390. PINLINE BOOL PInteractor::HasFocus() const
  391.   { return GetFocus() == GetHWND(); }
  392. PINLINE void PInteractor::ShowCursor(BOOL show)
  393.   { ::ShowCursor(show); }
  394. PINLINE PPoint PInteractor::ToScreen(PORDINATE x, PORDINATE y, CoordinateSystem coords) const
  395.   { return ToScreen(PPoint(x, y), coords); }
  396. PINLINE PPoint PInteractor::FromScreen(PORDINATE x, PORDINATE y, CoordinateSystem coords) const
  397.   { return FromScreen(PPoint(x, y), coords); }
  398. PINLINE void PInteractor::SetWndText(const PString & str,
  399.                                                    UINT setMsg, WPARAM wParam)
  400.   { SendMessage(GetHWND(),
  401.                     setMsg, wParam, (DWORD)(const char *)PMakeOEMText(str)); }
  402. //////////////////////////////////////////////////////////////////////////////
  403. // PNamedControl
  404. PINLINE PNamedControl::PNamedControl(PInteractorLayout * parent,
  405.                 PRESOURCE_ID ctlID, const PNotifier & notify, void * valuePtr)
  406.   : PControl(parent, ctlID, notify, valuePtr) { }
  407. PINLINE PString PNamedControl::GetName() const
  408.   { return GetWndText(); }
  409. //////////////////////////////////////////////////////////////////////////////
  410. // PEditBox
  411. PINLINE PEditBox::PEditBox(PInteractorLayout * parent,
  412.              PRESOURCE_ID ctlID, const PNotifier & notify, PString * valuePtr)
  413.   : PControl(parent, ctlID, notify, valuePtr) { }
  414. PINLINE PEditBox::~PEditBox()
  415.   { }
  416. PINLINE void PEditBox::Construct()
  417.   { }
  418. PINLINE PString PEditBox::GetText() const
  419.   { return GetWndText(); }
  420. PINLINE void PEditBox::SetMaxText(PINDEX max)
  421.   { SendMessage(GetHWND(), EM_LIMITTEXT, max, 0L); }
  422. PINLINE PINDEX PEditBox::GetLength() const
  423.   { return (PINDEX)SendMessage(GetHWND(), WM_GETTEXTLENGTH, 0, 0L); }
  424. PINLINE BOOL PEditBox::IsModified() const
  425.   { return (BOOL)SendMessage(GetHWND(), EM_GETMODIFY, 0, 0L); }
  426. PINLINE void PEditBox::SetSelection(PINDEX start, PINDEX finish)
  427. #ifdef _WIN32
  428.   { SendMessage(GetHWND(), EM_SETSEL, start, finish); }
  429. #else
  430.   { SendMessage(GetHWND(), EM_SETSEL, 0, MAKELPARAM(start, finish)); }
  431. #endif
  432. PINLINE void PEditBox::ReplaceSelection(const PString & text, BOOL canUndo)
  433.   { SendMessage(GetHWND(), EM_REPLACESEL, canUndo, (LPARAM)(const char *)text); }
  434. PINLINE BOOL PEditBox::CanUndo() const
  435.   { return (BOOL)SendMessage(GetHWND(), EM_CANUNDO, 0, 0L); }
  436. PINLINE void PEditBox::Undo()
  437.   { SendMessage(GetHWND(), EM_UNDO, 0, 0L); }
  438. PINLINE void PEditBox::Cut()
  439.   { SendMessage(GetHWND(), WM_CUT, 0, 0L); }
  440. PINLINE void PEditBox::Copy() const
  441.   { SendMessage(GetHWND(), WM_COPY, 0, 0L); }
  442. PINLINE void PEditBox::Paste()
  443.   { SendMessage(GetHWND(), WM_PASTE, 0, 0L); }
  444. PINLINE void PEditBox::Clear()
  445.   { SendMessage(GetHWND(), WM_CLEAR, 0, 0L); }
  446. //////////////////////////////////////////////////////////////////////////////
  447. // PPasswordEditBox
  448. PINLINE void PPasswordEditBox::Construct()
  449.   { }
  450. PINLINE void PPasswordEditBox::SetPasswordCharacter(char c)
  451.   { SendMessage(GetHWND(), EM_SETPASSWORDCHAR, c, 0); }
  452. PINLINE char PPasswordEditBox::GetPasswordCharacter()
  453.   { return (char)SendMessage(GetHWND(), EM_GETPASSWORDCHAR, 0, 0);}
  454. //////////////////////////////////////////////////////////////////////////////
  455. // PMultiLineEditBox
  456. PINLINE void PMultiLineEditBox::Construct()
  457.   { }
  458. PINLINE PINDEX PMultiLineEditBox::GetLineCount()
  459.   { return (PINDEX)SendMessage(GetHWND(), EM_GETLINECOUNT, 0, 0L); }
  460. PINLINE PString PMultiLineEditBox::GetLine(PINDEX linenum)
  461.   { return GetWndText(EM_LINELENGTH, EM_GETLINE,
  462.                                          linenum, GetOffsetFromLine(linenum)); }
  463. PINLINE PINDEX PMultiLineEditBox::GetLineFromOffset(PINDEX offset)
  464.   { return (PINDEX)SendMessage(GetHWND(), EM_LINEFROMCHAR, offset, 0L); }
  465. PINLINE PINDEX PMultiLineEditBox::GetOffsetFromLine(PINDEX linenum)
  466.   { return (PINDEX)SendMessage(GetHWND(), EM_LINEINDEX, linenum, 0L); }
  467. //////////////////////////////////////////////////////////////////////////////
  468. // PNumberEditBox
  469. PINLINE PNumberEditBox::PNumberEditBox(PInteractorLayout * parent,
  470.                 PRESOURCE_ID ctlID, const PNotifier & notify, void * valuePtr)
  471.   : PEditBox(parent, ctlID, notify, (PString *)valuePtr) { }
  472. //////////////////////////////////////////////////////////////////////////////
  473. // PPushButton
  474. PINLINE void PPushButton::Construct()
  475.   { }
  476. PINLINE BOOL PPushButton::IsOwnerDraw() const
  477.   { return TRUE; }
  478. //////////////////////////////////////////////////////////////////////////////
  479. // PTextButton
  480. PINLINE PTextButton::PTextButton(PInteractorLayout * parent,
  481.                 PRESOURCE_ID ctlID, const PNotifier & notify, void * valuePtr)
  482.   : PPushButton(parent, ctlID, notify, valuePtr) { }
  483. //////////////////////////////////////////////////////////////////////////////
  484. // PCheck3WayBox
  485. PINLINE PCheck3WayBox::CheckValues PCheck3WayBox::GetValue() const
  486.   { return (CheckValues)SendMessage(GetHWND(), BM_GETCHECK, 0, 0L); }
  487. PINLINE void PCheck3WayBox::SetValue(CheckValues newVal)
  488.   { SendMessage(GetHWND(), BM_SETCHECK, newVal, 0L); }
  489. //////////////////////////////////////////////////////////////////////////////
  490. // PChoiceBox
  491. PINLINE PChoiceBox::~PChoiceBox()
  492.   { }
  493. PINLINE void PChoiceBox::Construct()
  494.   { }
  495. PINLINE PINDEX PChoiceBox::GetSelection() const
  496.   { return (PINDEX)SendMessage(GetHWND(), CB_GETCURSEL, 0, 0L); }
  497. PINLINE void PChoiceBox::SetSelection(PINDEX newVal)
  498.   { SendMessage(GetHWND(), CB_SETCURSEL, newVal, 0L); }
  499. PINLINE PINDEX PChoiceBox::AddString(const PString & str)
  500.   { return (PINDEX)SendMessage(GetHWND(), CB_ADDSTRING, 0, (DWORD)(LPCSTR)str); }
  501. PINLINE void PChoiceBox::InsertString(const PString & str, PINDEX index)
  502.   { SendMessage(GetHWND(), CB_INSERTSTRING, index, (DWORD)(LPCSTR)str); }
  503. PINLINE void PChoiceBox::DeleteString(PINDEX index)
  504.   { SendMessage(GetHWND(), CB_DELETESTRING, index, 0L); }
  505. PINLINE void PChoiceBox::DeleteAllStrings()
  506.   { SendMessage(GetHWND(), CB_RESETCONTENT, 0, 0L); }
  507. PINLINE PINDEX PChoiceBox::FindString(const PString & str,
  508.                                           PINDEX startIndex, BOOL exact) const
  509.   { return (PINDEX)SendMessage(GetHWND(),
  510.             exact ? CB_FINDSTRINGEXACT : CB_FINDSTRING,
  511.             startIndex == P_MAX_INDEX ? -1 : startIndex, (DWORD)(LPCSTR)str); }
  512. PINLINE void PChoiceBox::SetString(const PString & str, PINDEX index)
  513.   { DeleteString(index);  InsertString(str, index); }
  514. PINLINE PString PChoiceBox::GetString(PINDEX index) const
  515.   { return GetWndText(CB_GETLBTEXTLEN, CB_GETLBTEXT, index, index); }
  516. PINLINE PINDEX PChoiceBox::GetCount() const
  517.   { return (PINDEX)SendMessage(GetHWND(), CB_GETCOUNT, 0, 0L); }
  518. //////////////////////////////////////////////////////////////////////////////
  519. // PListBox
  520. PINLINE PListBox::~PListBox()
  521.   { }
  522. PINLINE PINDEX PListBox::GetCount() const
  523.   { return (PINDEX)SendMessage(GetHWND(), LB_GETCOUNT, 0, 0L); }
  524. PINLINE PINDEX PListBox::GetTopIndex() const
  525.   { return (PINDEX)SendMessage(GetHWND(), LB_GETTOPINDEX, 0, 0L); }
  526. PINLINE BOOL PListBox::IsSelected(PINDEX index) const
  527.   { return SendMessage(GetHWND(), LB_GETSEL, index, 0L) > 0; }
  528. PINLINE PINDEX PListBox::GetSelCount() const
  529.   { return (PINDEX)SendMessage(GetHWND(), LB_GETSELCOUNT, 0, 0L); }
  530. //////////////////////////////////////////////////////////////////////////////
  531. // PStringListBox
  532. PINLINE PStringListBox::PStringListBox(PInteractorLayout * parent,
  533.               PRESOURCE_ID ctlID, const PNotifier & notify, PINDEX * valuePtr)
  534.   : PListBox(parent, ctlID, notify, valuePtr) { AllowDeleteObjects(); }
  535. //////////////////////////////////////////////////////////////////////////////
  536. // PComboBox
  537. PINLINE PComboBox::~PComboBox()
  538.   { }
  539. PINLINE void PComboBox::Construct()
  540.   { }
  541. PINLINE PString PComboBox::GetText() const
  542.   { return GetWndText(); }
  543. PINLINE void PComboBox::SetText(const PString & name)
  544.   { SetWndText(name); }
  545. PINLINE void PComboBox::SetMaxText(PINDEX max)
  546.   { SendMessage(GetHWND(), CB_LIMITTEXT, max, 0L); }
  547. PINLINE PINDEX PComboBox::GetLength() const
  548.   { return (PINDEX)SendMessage(GetHWND(), WM_GETTEXTLENGTH, 0, 0L); }
  549. PINLINE void PComboBox::SetSelection(PINDEX start, PINDEX finish)
  550.   { SendMessage(GetHWND(), CB_SETEDITSEL, 0, MAKELPARAM(start, finish)); }
  551. PINLINE void PComboBox::Cut()
  552.   { SendMessage(GetHWND(), WM_CUT, 0, 0L); }
  553. PINLINE void PComboBox::Copy() const
  554.   { SendMessage(GetHWND(), WM_COPY, 0, 0L); }
  555. PINLINE void PComboBox::Paste()
  556.   { SendMessage(GetHWND(), WM_PASTE, 0, 0L); }
  557. PINLINE void PComboBox::Clear()
  558.   { SendMessage(GetHWND(), WM_CLEAR, 0, 0L); }
  559. PINLINE PINDEX PComboBox::AddString(const PString & str)
  560.   { return (PINDEX)SendMessage(GetHWND(), CB_ADDSTRING, 0, (DWORD)(LPCSTR)str); }
  561. PINLINE void PComboBox::InsertString(const PString & str, PINDEX index)
  562.   { SendMessage(GetHWND(), CB_INSERTSTRING, index, (DWORD)(LPCSTR)str); }
  563. PINLINE void PComboBox::DeleteString(PINDEX index)
  564.   { SendMessage(GetHWND(), CB_DELETESTRING, index, 0L); }
  565. PINLINE void PComboBox::DeleteAllStrings()
  566.   { SendMessage(GetHWND(), CB_RESETCONTENT, 0, 0L); }
  567. PINLINE PINDEX PComboBox::FindString(const PString & str,
  568.                                           PINDEX startIndex, BOOL exact) const
  569.   { return (PINDEX)SendMessage(GetHWND(),
  570.             exact ? CB_FINDSTRINGEXACT : CB_FINDSTRING,
  571.             startIndex == P_MAX_INDEX ? -1 : startIndex, (DWORD)(LPCSTR)str); }
  572. PINLINE void PComboBox::SetString(const PString & str, PINDEX index)
  573.   { DeleteString(index); InsertString(str, index); }
  574. PINLINE PString PComboBox::GetString(PINDEX index) const
  575.   { return GetWndText(CB_GETLBTEXTLEN, CB_GETLBTEXT, index, index); }
  576. PINLINE PINDEX PComboBox::GetCount() const
  577.   { return (PINDEX)SendMessage(GetHWND(), CB_GETCOUNT, 0, 0L); }
  578. PINLINE void PComboBox::SetCurrent(PINDEX index)
  579.   { SendMessage(GetHWND(), CB_SETCURSEL, index, 0L); }
  580. //////////////////////////////////////////////////////////////////////////////
  581. // PScrollBar
  582. PINLINE void PScrollBar::Construct()
  583.   { }
  584. PINLINE void PScrollBar::SetSmallNudge(PSCROLLBAR_VALUE val)
  585.   { smallNudge = val; }
  586. PINLINE void PScrollBar::SetLargeNudge(PSCROLLBAR_VALUE val)
  587.   { largeNudge = val; }
  588. /////////////////////////////////////////////////////////////////////////////
  589. // PDialog
  590. PINLINE PDialog::~PDialog()
  591.   { }
  592. PINLINE PString PDialog::GetTitle() const
  593.   { return GetWndText(); }
  594. PINLINE void PDialog::SetTitle(const PString & title)
  595.   { SetWndText(title); }
  596. /////////////////////////////////////////////////////////////////////////////
  597. // PTitledWindow
  598. PINLINE PTitledWindow::~PTitledWindow()
  599.   { }
  600. PINLINE PString PTitledWindow::GetTitle() const
  601.   { return GetWndText(); }
  602. PINLINE void PTitledWindow::SetTitle(const PString & title)
  603.   { SetWndText(title); }
  604. PINLINE void PTitledWindow::Activate()
  605.   { SetActiveWindow(GetHWND()); }
  606. PINLINE void PTitledWindow::MakeIconic()
  607.   { ShowWindow(GetHWND(), SW_MINIMIZE); }
  608. PINLINE void PTitledWindow::Zoom()
  609.   { ShowWindow(GetHWND(), SW_MAXIMIZE); }
  610. PINLINE void PTitledWindow::Normalise()
  611.   { ShowWindow(GetHWND(), SW_RESTORE); }
  612. /////////////////////////////////////////////////////////////////////////////
  613. // PTopLevelWindow
  614. PINLINE PSubMenu & PTopLevelWindow::GetHelpMenu()
  615.   { return helpMenu; }
  616. /////////////////////////////////////////////////////////////////////////////
  617. // PMDIFrameWindow
  618. PINLINE void PMDIFrameWindow::CascadeDocuments()
  619.   { SendMessage(mdiClient, WM_MDICASCADE, 0, 0L); }
  620. PINLINE void PMDIFrameWindow::TileDocuments(BOOL vertically)
  621.   { SendMessage(mdiClient, WM_MDITILE,
  622.                       vertically ? MDITILE_VERTICAL : MDITILE_HORIZONTAL, 0L); }
  623. PINLINE void PMDIFrameWindow::ArrangeIcons()
  624.   { SendMessage(mdiClient, WM_MDIICONARRANGE, 0, 0L); }
  625. PINLINE PSubMenu & PMDIFrameWindow::GetWindowMenu()
  626.   { return windowMenu; }
  627. /////////////////////////////////////////////////////////////////////////////
  628. // PMDIDocWindow
  629. PINLINE PMDIDocWindow::PMDIDocWindow(PMDIFrameWindow * parent,
  630.                                           const PString & newTitle, int CanDo)
  631.   : PTitledWindow(parent, CanDo), initialTitle(newTitle) { }
  632. //////////////////////////////////////////////////////////////////////////////
  633. // PMenuItem
  634. PINLINE void PMenuItem::Enable(BOOL enabled)
  635.   { EnableMenuItem(itsMenu->GetHMENU(), menuID,
  636.                                    (UINT)(enabled ? MF_ENABLED : MF_GRAYED)); }
  637. PINLINE BOOL PMenuItem::IsEnabled() const
  638.   { return (GetMenuState(itsMenu->GetHMENU(), menuID,
  639.                                                MF_BYCOMMAND)&MF_GRAYED) == 0; }
  640. PINLINE void PMenuItem::Check(BOOL checked)
  641.   { CheckMenuItem(itsMenu->GetHMENU(), menuID,
  642.                                 (UINT)(checked ? MF_CHECKED : MF_UNCHECKED)); }
  643. PINLINE BOOL PMenuItem::IsChecked() const
  644.   { return (GetMenuState(itsMenu->GetHMENU(), menuID,
  645.                                               MF_BYCOMMAND)&MF_CHECKED) != 0; }
  646. //////////////////////////////////////////////////////////////////////////////
  647. // PMenuSeparator
  648. PINLINE PMenuSeparator::PMenuSeparator(int, PSubMenu & menu)
  649.   : PMenuEntry(menu, NULL) { }
  650. //////////////////////////////////////////////////////////////////////////////
  651. // PSubMenu
  652. PINLINE PString PSubMenu::GetString() const
  653.   { return title; }
  654. PINLINE HMENU PSubMenu::GetHMENU() const
  655.   { return PAssertNULL(hMenu); }
  656. //////////////////////////////////////////////////////////////////////////////
  657. // PRootMenu
  658. PINLINE PRootMenu::~PRootMenu()
  659.   { entries.RemoveAll(); }
  660. PINLINE HACCEL PRootMenu::GetHACCEL() const
  661.   { return accelerators; }
  662. ///////////////////////////////////////////////////////////////////////////////
  663. // PSound
  664. PINLINE void PSound::Beep()
  665.   { MessageBeep(0); }
  666. ///////////////////////////////////////////////////////////////////////////////
  667. // PResourceData
  668. PINLINE BYTE PResourceData::operator[](PINDEX offset) const
  669.   { return lpResource[offset]; }
  670. PINLINE PResourceData::operator const BYTE *() const
  671.   { return (const BYTE *)lpResource; }
  672. ///////////////////////////////////////////////////////////////////////////////
  673. // PClipboard
  674. PINLINE BOOL PClipboard::InUse()
  675.   { return !opened; }
  676. ///////////////////////////////////////////////////////////////////////////////
  677. // PApplication
  678. PINLINE HINSTANCE PApplication::GetInstance() const
  679.   { return hInstance; }
  680. PINLINE WNDPROC PApplication::GetWndProcPtr(WndProcTypes proc) const
  681.   { return wndProcPtr[proc]; }
  682. PINLINE void PApplication::AddWindowHandle(HWND hWnd, PInteractor * pWnd)
  683.   { createdWindows.SetAt((HWNDKey)hWnd, pWnd); }
  684. PINLINE void PApplication::RemoveWindowHandle(HWND hWnd)
  685.   { createdWindows.SetAt((HWNDKey)hWnd, NULL); }
  686. PINLINE PInteractor * PApplication::GetWindowObject(HWND hWnd) const
  687.   { return (PInteractor *)createdWindows.GetAt((HWNDKey)hWnd); }
  688. PINLINE PInteractor * PApplication::FindInteractor(const PPoint & pt) const
  689.   { return GetWindowObject(WindowFromPoint(pt)); }
  690. // End Of File ///////////////////////////////////////////////////////////////