⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wnd.h

📁 一个更为先进的嵌入式操作系统.采用RMS线程调度算法,具有信号量等同步对象.亦包括GUI. 通过该系统您可以极大知道Windows的内部秘密.
💻 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_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -