www.pudn.com > WinGOS.rar > Wnd.h


// Wnd.h: interface for the CWnd class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#ifndef _GOS_WND_H_ 
#define _GOS_WND_H_ 
 
#define IsMouseMessage(m) ((m)>=WM_LBUTTONUP && (m)<=WM_MOUSEMOVE) 
 
enum _tagWnd 
{ 
	//Style 
	WS_PARENT			=0x10000000L, 
	WS_NOFOCUS			=0x20000000L, 
	WS_SUBGROUP			=0x40000000L, 
	WS_USER1			=0x80000000L, 
	WS_CLIENTEDGE		=0x01000000L, 
	WS_BORDER			=0x02000000L, 
	WS_STATICEDGE		=0x04000000L, 
	WS_THICKFRAME		=0x06000000L, 
	WS_TRANSPARENT		=0x08000000L, 
	WS_OWNERDC			=0x00100000L, 
	WS_OWNERDATA		=0x00200000L, 
	WS_NOBKGND			=0x00400000L, 
	WS_SCRBKGND			=0x00800000L, 
	WS_HALFSCRBKGND		=0x00C00000L, 
	 
	//ParentWnd & Dialog 
	WS_CLIPSIBLINGS		=0x00001000L, 
	WS_TOPWND			=0x00002000L, 
	WS_MODALDLG			=0x00004000L, 
	WS_USERP			=0x00008000L,		 
	 
	//State 
	WS_INVALIDATE		=0x00010000L, 
	WS_PRVINVALID		=0x00020000L, 
	WS_FOCUSED			=0x00040000L, 
	WS_USERS2			=0x00080000L,		 
 
	GW_CHILD=0, 
	GW_PARENT, 
	GW_DESKTOP, 
	GW_FOCUS, 
	GW_HWNDFIRST, 
	GW_HWNDLAST, 
	GW_HWNDNEXT, 
	GW_HWNDPREV, 
 
	WM_PAINTSTART		=0x7fff7fff, 
	WM_PAINTOVER		=0x80008000, 
	 
	WM_CREATE=MAKEMSG(PriorityNormal,MsgClassGUI,1L), 
	WM_DESTROY, 
	WM_SHOWWINDOW, 
	WM_GETFONT, 
	WM_LBUTTONUP, 
	WM_LBUTTONDOWN, 
	WM_LBUTTONDBLCLK, 
	WM_MOUSEMOVE, 
	WM_MOVE, 
	WM_SIZE, 
	WM_SETACTIVATECONTROL, 
	WM_SETFOCUS, 
	WM_KILLFOCUS, 
	WM_CAPTURECHANGED, 
	WM_CHILDPAINT, 
	WM_GETOWNDC, 
	WM_SETPAINTCLIP, 
	WM_CTLCOLOR, 
	WM_ERASEBKGND, 
	WM_PAINT, 
	WM_NCPAINT, 
	WM_DRAWITEM, 
	WM_GETSCROLLBARCTRL, 
	WM_SHOWSCROLLBAR, 
	WM_SCROLLWINDOW, 
	WM_GETSCROLLPOS, 
	WM_SETSCROLLPOS, 
	WM_GETSCROLLRANGE, 
	WM_SETSCROLLRANGE, 
	WM_QUERYMOUSECURSOR, 
	WM_ADDCONTROL, 
	WM_REMOVECONTROL, 
	WM_ACTIVECONTROL, 
	WM_COMMAND, 
	WM_GETSYSMETRICS, 
	WM_PAINTING=MAKEMSG(PriorityNormal,MsgClassGUI,0xfff0L), 
	WM_INVALIDATE, 
	WM_CLOSE, 
	WM_NULL=msgNull, 
	WM_USER=msgUser, 
	WM_IDLE=msgIdle, 
	WM_QUIT=msgQuit, 
	WM_TIMER=msgTimer, 
	WM_CTLBASE=MAKEMSG(PriorityNormal,MsgClassGUI,0x1000L), 
	WM_CTLBASE2=MAKEMSG(PriorityNormal,MsgClassGUI,0x2000L), 
	WM_CTLBASE3=MAKEMSG(PriorityNormal,MsgClassGUI,0x3000L), 
	WM_CTLBASE4=MAKEMSG(PriorityNormal,MsgClassGUI,0x4000L), 
	WM_CTLBASE5=MAKEMSG(PriorityNormal,MsgClassGUI,0x5000L), 
	WM_CTLBASE6=MAKEMSG(PriorityNormal,MsgClassGUI,0x6000L), 
	WM_CTLBASE7=MAKEMSG(PriorityNormal,MsgClassGUI,0x7000L), 
}; 
 
 
class CPWnd; 
class CDesktop; 
 
class CWnd : public CMsgObject 
{ 
	friend class CPWnd; 
	friend class CDesktop; 
//公共方法 
public: 
	//构造、初始化或销毁 
	DEBUG_ONLY(CWnd()); 
	DEBUG_ONLY(~CWnd()); 
	BOOL Create(DWORD nStyle,LPCRECT pRect,CPWnd* pParent,int nID=0); 
	BOOL Create(LPCTSTR pszText,DWORD nStyle,LPCRECT pRect,CPWnd* pParent,int nID=0); 
	BOOL DestroyWindow(){return MsgProc(WM_DESTROY,0,0);} 
 
	//状态,属性、窗口访问 
	DWORD GetStyle(){return m_nStyle;} 
	void AddStyle(int nStyle){m_nStyle|=nStyle;} 
	void RemoveStyle(int nStyle){m_nStyle&=~nStyle;} 
	CWnd* GetWindow(UINT nCmd); 
	CPWnd* GetParent(){return m_pParent;} 
	CDesktop* GetDesktopWindow(); 
	CWnd* GetNextWindow(){return m_pNext;} 
	CWnd* GetPrevWindow(){return m_pPrev;} 
	BOOL IsChild(CPWnd* pWnd){return pWnd==m_pParent;} 
	int GetChildHierarchy(CWnd* pParent); 
	COLORREF GetCtlColor(int nClrIndex) 
		{ return MsgProc(WM_CTLCOLOR,WPARAM(this),nClrIndex); } 
	 
	//对话框 
	void SetDlgCtrlID(int nID){m_nCtrlID=nID;} 
	int GetDlgCtrlID(){return m_nCtrlID;} 
 
	//大小,位置 
	CWnd* WindowFromPoint(POINT pt); 
	const CRect& GetClientRect(){return m_rclClient;} 
	const CRect& GetWindowRect(){return m_rclWnd;} 
	void GetClientRect(LPRECT pRect){*pRect=m_rclClient;} 
	void GetWindowRect(LPRECT pRect){*pRect=m_rclWnd;} 
	void MoveWindow(LPCRECT pRect); 
 
	//更新与绘图 
	CDC* GetDC(); 
	void Invalidate(LPCRECT pRect=NULL); 
 
	//文本,数据 
	void SetData(PCVOID pData){m_pData=PVOID(pData);} 
	PCVOID GetData(){return m_pData;} 
	void SetWindowText(CString &string); 
	void SetWindowText(LPCTSTR pszString); 
	LPCTSTR GetWindowText() 
		{ ASSERT(!(m_nStyle&WS_OWNERDATA)); return LPCTSTR(m_pData);} 
	void GetWindowText(CString& str) 
		{ ASSERT(!(m_nStyle&WS_OWNERDATA)); str=LPCTSTR(m_pData); } 
	int GetWindowText(LPTSTR pszStringBuf,int nMaxCount); 
	int GetWindowTextLength() 
		{ ASSERT(!(m_nStyle&WS_OWNERDATA)); return CString::StrLenEx(LPCTSTR(m_pData));} 
	CFont* GetFont() 
		{ return (CFont*)MsgProc(WM_GETFONT,WPARAM(this),0); } 
	 
	//滚动条 
	CScrollBar* GetScrollBarCtrl(int nBar) 
		{ return (CScrollBar*)MsgProc(WM_GETSCROLLBARCTRL,nBar,0); } 
	void ShowSrollBar(int nBar,BOOL bShow) 
		{ MsgProc(WM_SHOWSCROLLBAR,nBar,bShow); } 
	void ScrollWindow(int nBar,int dx,int dy) 
		{ MsgProc(WM_SCROLLWINDOW,dx,dy); } 
	int GetSrollPos(int nBar) 
		{ return MsgProc(WM_GETSCROLLPOS,nBar,0); } 
	void SetSrollPos(int nBar,int nPos) 
		{ MsgProc(WM_SETSCROLLPOS,nBar,0); } 
	int GetScrollRange(int nBar,PINT pMinPos,PINT pMaxPos); 
	void SetScrollRange(int nBar,int nMinPos,int nMaxPos); 
 
//消息处理 
protected: 
	LRESULT MsgProc(UINT message, WPARAM wParam, LPARAM lParam); 
	void OnDestroy(); 
	void OnMove(); 
	void OnNcPaint(CDC* pDC); 
	void OnEraseBkgnd(CDC* pDC); 
	CBitmap* OnQueryMouseCursor(){return NULL;} 
 
//内部方法 
private: 
	void PrvOffsetWindow(POINT pt); 
	HANDLE PrvAddPaintMessage(CThread* pThread,HANDLE hRefMsg,LPCRECT pRect); 
	void PrvOnInvalidate(); 
	void PrvOnPainting(WPARAM wParam,LPARAM lParam); 
 
//成员变量 
private: 
	int m_nCtrlID; 
	PVOID m_pData; 
	CRect m_rclWnd; 
	CRect m_rclClient; 
	CRect m_rclInv; 
	DWORD m_nStyle; 
	CWnd* m_pNext; 
	CWnd* m_pPrev; 
	CPWnd* m_pParent; 
}; 
 
typedef CWnd *PWND; 
 
#endif _GOS_WND_H_