161 lines
4.2 KiB
C++
161 lines
4.2 KiB
C++
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved
|
|
|
|
|
|
#pragma once
|
|
|
|
#define RECT_INSIDE (0x0001)
|
|
#define RECT_OVER_LEFT (0x0002)
|
|
#define RECT_OVER_TOP (0x0004)
|
|
#define RECT_OVER_RIGHT (0x0008)
|
|
#define RECT_OVER_BOTTOM (0x0010)
|
|
#define RECT_TOO_WIDE (0x0020)
|
|
#define RECT_TOO_TALL (0x0040)
|
|
#define RECT_ERROR (0x0080)
|
|
|
|
class CStringRange;
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// CBaseWindow
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CBaseWindow
|
|
{
|
|
public:
|
|
CBaseWindow();
|
|
virtual ~CBaseWindow();
|
|
|
|
static BOOL _InitWindowClass(_In_ LPCWSTR lpwszClassName, _Out_ ATOM *patom);
|
|
static void _UninitWindowClass(ATOM atom);
|
|
|
|
virtual BOOL _Create(ATOM atom, DWORD dwExStyle, DWORD dwStyle, _In_opt_ CBaseWindow *pParentWnd = nullptr, int wndWidth = 0, int wndHeight = 0, _In_opt_ HWND parentWndHandle = nullptr);
|
|
virtual void _Destroy();
|
|
|
|
virtual void _Move(int x, int y);
|
|
virtual void _Resize(int x, int y, int cx, int cy);
|
|
virtual void _Show(BOOL isShowWnd);
|
|
virtual BOOL _IsWindowVisible();
|
|
virtual void _Enable(BOOL enableWindowReceiveInput);
|
|
virtual BOOL _IsEnabled();
|
|
virtual void _InvalidateRect();
|
|
virtual BOOL _GetWindowRect(_Inout_ LPRECT lpRect);
|
|
virtual BOOL _GetClientRect(_Inout_ LPRECT lpRect);
|
|
|
|
virtual LRESULT CALLBACK _WindowProcCallback(_In_ HWND wndHandle, UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam) = 0;
|
|
virtual void _OnPaint(_In_ HDC dcHandle, _In_ PAINTSTRUCT *pps) { dcHandle; pps; }
|
|
virtual void _OnLButtonDown(POINT pt) { pt; }
|
|
virtual void _OnLButtonUp(POINT pt) { pt; }
|
|
virtual void _OnMouseMove(POINT pt) { pt; }
|
|
virtual void _OnTimer() { }
|
|
|
|
CBaseWindow* _GetTopmostUIWnd();
|
|
|
|
HRESULT _GetWindowExtent(_In_ const RECT *prcTextExtent, _In_opt_ RECT *prcCandidateExtent, _Inout_ POINT *pptCandidate);
|
|
|
|
HWND _GetWnd()
|
|
{
|
|
return _wndHandle;
|
|
}
|
|
|
|
CBaseWindow *_GetParent()
|
|
{
|
|
return _pParentWnd;
|
|
}
|
|
|
|
void _SetUIWnd(_In_ CBaseWindow *pUIWnd)
|
|
{
|
|
_pUIWnd = pUIWnd;
|
|
}
|
|
|
|
CBaseWindow* _GetUIWnd()
|
|
{
|
|
return _pUIWnd;
|
|
}
|
|
|
|
CBaseWindow *_GetCaptureObject()
|
|
{
|
|
return _pUIObjCapture;
|
|
}
|
|
|
|
CBaseWindow *_GetTimerObject()
|
|
{
|
|
return _pTimerUIObj;
|
|
}
|
|
|
|
UINT _GetScrollDelay()
|
|
{
|
|
return (GetDoubleClickTime() * 4 / 5);
|
|
}
|
|
|
|
UINT _GetScrollSpeed()
|
|
{
|
|
return (_GetScrollDelay() / 8);
|
|
}
|
|
|
|
protected:
|
|
LRESULT _NotifyCommand(UINT uMsg, DWORD dwSB, int nPos);
|
|
|
|
void _StartCapture()
|
|
{
|
|
_SetCaptureObject(this);
|
|
}
|
|
|
|
void _EndCapture()
|
|
{
|
|
_SetCaptureObject(nullptr);
|
|
}
|
|
|
|
BOOL _IsCapture();
|
|
|
|
void _StartTimer(UINT uElapse)
|
|
{
|
|
_SetTimerObject(this, uElapse);
|
|
}
|
|
|
|
void _EndTimer()
|
|
{
|
|
_SetTimerObject(nullptr);
|
|
}
|
|
|
|
BOOL _IsTimer();
|
|
|
|
private:
|
|
void _SetCaptureObject(_In_opt_ CBaseWindow *pUIObj);
|
|
void _SetTimerObject(_In_opt_ CBaseWindow *pUIObj, UINT uElapse = 0);
|
|
|
|
void GetWorkAreaFromPoint(_In_ const POINT& ptPoint, _Out_ LPRECT lprcWorkArea);
|
|
void CalcFitPointAroundTextExtent(_In_ const RECT *prcTextExtent, _In_ const RECT *prcWorkArea, _In_ const RECT *prcWindow, _Out_ POINT *ppt);
|
|
DWORD RectInRect(_In_ const RECT *prcLimit, _In_ const RECT *prcTarget);
|
|
|
|
static LRESULT CALLBACK _WindowProc(_In_ HWND wndHandle, UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam);
|
|
|
|
static CBaseWindow *_GetThis(_In_ HWND wndHandle)
|
|
{
|
|
return (CBaseWindow *)GetWindowLongPtr(wndHandle, GWLP_USERDATA);
|
|
}
|
|
|
|
static void _SetThis(_In_ HWND wndHandle, _In_opt_ void *lpv)
|
|
{
|
|
SetWindowLongPtr(wndHandle, GWLP_USERDATA, (LONG_PTR)lpv);
|
|
}
|
|
|
|
private:
|
|
HWND _wndHandle;
|
|
|
|
CBaseWindow *_pParentWnd;
|
|
CBaseWindow *_pUIWnd;
|
|
|
|
CBaseWindow *_pTimerUIObj;
|
|
CBaseWindow *_pUIObjCapture;
|
|
|
|
BOOL _enableVirtualWnd;
|
|
BOOL _visibleVirtualWnd;
|
|
RECT _RectOfVirtualWnd;
|
|
};
|