📄 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_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -