133 lines
4.1 KiB
C
133 lines
4.1 KiB
C
|
//-----------------------------------------------------------------------------
|
||
|
// File: flexwnd.h
|
||
|
//
|
||
|
// Desc: CFlexWnd is a generic class that encapsulates the functionalities
|
||
|
// of a window. All other window classes are derived from CFlexWnd.
|
||
|
//
|
||
|
// Child classes can have different behavior by overriding the
|
||
|
// overridable message handlers (OnXXX members).
|
||
|
//
|
||
|
// Copyright (C) 1999-2000 Microsoft Corporation. All Rights Reserved.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef __FLEXWND_H__
|
||
|
#define __FLEXWND_H__
|
||
|
|
||
|
|
||
|
#include "flexmsg.h"
|
||
|
|
||
|
class CFlexToolTip;
|
||
|
|
||
|
class CFlexWnd
|
||
|
{
|
||
|
public:
|
||
|
CFlexWnd();
|
||
|
~CFlexWnd();
|
||
|
|
||
|
// class registration
|
||
|
static void RegisterWndClass(HINSTANCE hInst);
|
||
|
static void UnregisterWndClass(HINSTANCE hInst);
|
||
|
|
||
|
// Unhighlight callouts when a click is made elsewhere besides the callouts
|
||
|
static HWND s_CurrPageHwnd;
|
||
|
|
||
|
// Tooltip
|
||
|
static CFlexToolTip s_ToolTip; // Shared tooltip window object
|
||
|
static DWORD s_dwLastMouseMove; // Last GetTickCount() that we have a WM_MOUSEMOVE
|
||
|
static HWND s_hWndLastMouseMove; // Last window handle of WM_MOUSEMOVE
|
||
|
static LPARAM s_PointLastMouseMove; // Last point of WM_MOUSEMOVE
|
||
|
|
||
|
// public read-only access to hwnd
|
||
|
const HWND &m_hWnd;
|
||
|
|
||
|
// creation
|
||
|
int DoModal(HWND hParent, int nTemplate, HINSTANCE hInst = NULL);
|
||
|
int DoModal(HWND hParent, LPCTSTR lpTemplate, HINSTANCE hInst = NULL);
|
||
|
HWND DoModeless(HWND hParent, int nTemplate, HINSTANCE hInst = NULL);
|
||
|
HWND DoModeless(HWND hParent, LPCTSTR lpTemplate, HINSTANCE hInst = NULL);
|
||
|
HWND Create(HWND hParent, LPCTSTR tszName, DWORD dwExStyle, DWORD dwStyle, const RECT &rect, HMENU hMenu = NULL);
|
||
|
HWND Create(HWND hParent, const RECT &rect, BOOL bVisible);
|
||
|
|
||
|
// destruction
|
||
|
void Destroy();
|
||
|
|
||
|
// operations
|
||
|
void RenderInto(HDC hDC, int x = 0, int y = 0);
|
||
|
void Invalidate();
|
||
|
|
||
|
// information
|
||
|
SIZE GetClientSize() const;
|
||
|
void GetClientRect(LPRECT) const;
|
||
|
static CFlexWnd *GetFlexWnd(HWND hWnd);
|
||
|
BOOL HasWnd() {return m_hWnd != NULL;}
|
||
|
static LPCTSTR GetDefaultClassName();
|
||
|
BOOL IsDialog();
|
||
|
BOOL InRenderMode();
|
||
|
void SetReadOnly(BOOL bReadOnly) { m_bReadOnly = bReadOnly; }
|
||
|
BOOL GetReadOnly() { return m_bReadOnly; }
|
||
|
|
||
|
// mouse capture
|
||
|
void SetCapture();
|
||
|
void ReleaseCapture();
|
||
|
|
||
|
protected:
|
||
|
|
||
|
// derived operations
|
||
|
void SetRenderMode(BOOL bRender = TRUE);
|
||
|
BOOL EndDialog(int);
|
||
|
|
||
|
// overridable message handlers
|
||
|
virtual void OnInit() {}
|
||
|
virtual LRESULT OnCreate(LPCREATESTRUCT lpCreateStruct) {return 0;}
|
||
|
virtual BOOL OnInitDialog() {return TRUE;}
|
||
|
virtual void OnTimer(UINT uID) {}
|
||
|
virtual BOOL OnEraseBkgnd(HDC hDC);
|
||
|
virtual void OnPaint(HDC hDC) {}
|
||
|
virtual void OnRender(BOOL bInternalCall = FALSE);
|
||
|
virtual LRESULT OnCommand(WORD wNotifyCode, WORD wID, HWND hWnd) {return 0;}
|
||
|
virtual LRESULT OnNotify(WPARAM wParam, LPARAM lParam) {return 0;}
|
||
|
virtual void OnMouseOver(POINT point, WPARAM fwKeys) {}
|
||
|
virtual void OnClick(POINT point, WPARAM fwKeys, BOOL bLeft) {}
|
||
|
virtual void OnWheel(POINT point, WPARAM wParam) {}
|
||
|
virtual void OnDoubleClick(POINT point, WPARAM fwKeys, BOOL bLeft) {}
|
||
|
virtual LRESULT WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||
|
virtual void OnDestroy() {}
|
||
|
|
||
|
private:
|
||
|
|
||
|
// implementation...
|
||
|
|
||
|
// information and initialization
|
||
|
int m_nID;
|
||
|
HWND m_privhWnd;
|
||
|
BOOL m_bIsDialog;
|
||
|
BOOL m_bReadOnly; // Whether this window is read-only (disabled).
|
||
|
void SetHWND(HWND hWnd);
|
||
|
void InitFlexWnd();
|
||
|
|
||
|
// paint helper (for inserting debug painting)
|
||
|
virtual void DoOnPaint(HDC hDC);
|
||
|
|
||
|
// render mode
|
||
|
BOOL m_bRender;
|
||
|
HDC m_hRenderInto;
|
||
|
BOOL RenderIntoClipChild(HWND hChild);
|
||
|
BOOL RenderIntoRenderChild(HWND hChild);
|
||
|
|
||
|
friend static BOOL CALLBACK RenderIntoClipChild(HWND hWnd, LPARAM lParam);
|
||
|
friend static BOOL CALLBACK RenderIntoRenderChild(HWND hWnd, LPARAM lParam);
|
||
|
|
||
|
// class information
|
||
|
static void FillWndClass(HINSTANCE hInst);
|
||
|
static BOOL sm_bWndClassRegistered;
|
||
|
static WNDCLASSEX sm_WndClass;
|
||
|
static LPCTSTR sm_tszWndClassName;
|
||
|
static HINSTANCE sm_hInstance;
|
||
|
|
||
|
friend LRESULT CALLBACK __BaseFlexWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||
|
friend LRESULT CALLBACK __BaseFlexWndDialogProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif //__FLEXWND_H__
|