CRect类
数据成员有left,top,right,和bottom。
left左上角X坐标,top左上角Y坐标,right右下角X坐标,bottom右下角Y坐标。
rect.InflateRect(3,3);//修改CRect的宽和高,每次增加3,3
rect.OffsetRect(5,5);//修改CRect的x、y值,每次增加5,5
CWnd中计时器操作函数:
CWnd::SetTimer
功能:设置计时器
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void(CALLBACK * lpfnTimer
)(HWND,
UINT,
UINT_PTR,
DWORD
)
);
参数nIDEvent指定一个非零的定时器ID;
参数nElapse指定间隔时间,单位为毫秒;
参数lpfnTimer指定一个回调函数的地址,如果该参数为NULL,则WM_TIMER消息被发送到应用程序的消息队列,并被CWnd对象处理。如果此函数成功则返回一个新的定时器的ID,我们可以使用此ID通过KillTimer成员函数来销毁该定时器,如果函数失败则返回0。
例如:
SetTimer(123,500,NULL);//ID为123,每隔500ms触发一次OnTimer
CWnd::KillTimer
功能:清除计时器
BOOL KillTimer(
UINT_PTR nIDEvent //计时器ID
);
例如:
KillTimer(123);//关闭计时器123
CWnd中窗口操作函数:
CWnd::ShowWindow
功能:设定视窗的可视性状态。
BOOL ShowWindow(
int nCmdShow
);
nCmdShow指定了CWnd应如何被显示。它必须是下列值之一:
SW_HIDE | 隐藏窗口并将活动状态传递给其它窗口。 |
SW_MINIMIZE | 最小化窗口并激活系统列表中的顶层窗口。 |
SW_RESTORE | 激活并显示窗口。如果窗口是最小化或最大化的,Windows恢复其原来的大小和位置。 |
SW_SHOW | 激活窗口并以其当前的大小和位置显示。 |
SW_SHOWMAXIMIZED | 激活窗口并显示为最大化窗口。 |
SW_SHOWMINIMIZED | 激活窗口并显示为图标。 |
SW_SHOWMINNOACTIVE | 将窗口显示为图标。当前活动的窗口将保持活动状态。 |
SW_SHOWNA | 按照当前状态显示窗口。当前活动的窗口将保持活动状态。 |
SW_SHOWNOACTIVATE | 按窗口最近的大小和位置显示。当前活动的窗口将保持活动状态。 |
SW_SHOWNORMAL | 激活并显示窗口。如果窗口是最小化或最大化的,则Windows恢复它原来的大小和位置。 |
CWnd::EnableWindow
功能:激活或者禁用窗口
BOOL EnableWindow(
BOOL bEnable = TRUE
);
参数bEnable为TRUE,启用。FALSE禁用。
例如:
CWnd* pCanc = GetDlgItem(IDCANCEL);
if(pCanc->IsWindowEnabled())//可用
pCanc->EnableWindow(false);//禁用
else
pCanc->EnableWindow(true);//激活
CWnd::MoveWindow
作用:改变窗口的位置。如果是父窗口,则坐标系是基于屏幕。如果是子窗口,则坐标系是基于父窗口。
void MoveWindow(
int x,//左边的新坐标
int y,//顶端的新坐标
int nWidth,//宽度
int nHeight,//高度
BOOL bRepaint = TRUE //为TURE表示需要重新绘制。
);
void MoveWindow(
LPCRECT lpRect,
BOOL bRepaint = TRUE
);
CWnd::CenterWindow
作用:相对于父窗口居中。
void CenterWindow(
CWnd * pAlternateOwner = NULL //指向居中窗口的指针。(父窗口除外)
);
CWnd::SetWindowPos
作用:更改窗口的x,y,z轴的位置。
BOOL SetWindowPos(
const CWnd* pWndInsertAfter,
int x,//指定窗口的左侧的新位置。
int y,//指定窗口顶部的新位置。
int cx,//指定窗口的新的宽度
int cy,//指定窗口的新高度
UINT nFlags
);
pWndInsertAfter为以下几个参数:
wndBottom 将窗口底部的z-顺序。 如果此 CWnd 是一个最顶层窗口,窗口丢失其最顶层的状态;系统将窗口在其他窗口底部。
wndTop 将窗口在z-顺序的顶部。
wndTopMost 将windows首先非最顶层窗口。 即使当停用,窗口保留其最顶层的位置它。
wndNoTopMost 在任何非最顶层窗口的顶部重新定位窗口(即所有最顶层窗口)后。 如果窗口已非最顶层窗口,此标志将不起作用。
nFlags可以为以下参数的组合:
SWP_DRAWFRAME 在窗口周围绘制帧(定义窗口时所创建的)。
SWP_FRAMECHANGED 发送 WM_NCCALCSIZE 信息到窗口,因此,即使未更改窗口的大小。 如果此标志未指定,则发送 WM_NCCALCSIZE,仅当更改时窗口的大小。
SWP_HIDEWINDOW 隐藏窗口。
SWP_NOACTIVATE 不窗口被激活。 如果此未设置任何标志,窗口激活和移到最顶层或非最顶层的组顶级(基于设置 pWndInsertAfter 参数)。
SWP_NOCOPYBITS 放弃工作区的整个内容。 如果此标志未指定,工作区的有效内容保存并将其复制到工作区,在窗口的大小或重新定位之后。
SWP_NOMOVE 保留当前位置(忽略 x 和 y 参数)。
SWP_NOOWNERZORDER 不会更改。z-顺序的所有者窗口的位置。
SWP_NOREDRAW 不重绘更改。 如果此标志设置,重新绘制任何类型不会发生。 这适用于工作区、非工作区(包括标题和滚动条)和由于移动后的窗口中的父窗口的任何部分。 在此标志设置为时,应用程序必须显式无效或重绘必须重绘窗口和父窗口的所有部件。
SWP_NOREPOSITION 和 SWP_NOOWNERZORDER相同。
SWP_NOSENDCHANGING 防止窗口收到 WM_WINDOWPOSCHANGING 消息。
SWP_NOSIZE 保留当前范围(忽略 cx 和 cy 参数)。
SWP_NOZORDER 保留当前排序(忽略 pWndInsertAfter)。
SWP_SHOWWINDOW 显示窗口。
CWnd::BringWindowToTop
作用:将窗口带到重叠窗口的最顶层。
void BringWindowToTop( );
CWnd中判断窗口状态函数:
CWnd::IsWindowVisible
作用:判断窗口是否可见或被隐藏。
BOOL IsWindowVisible( ) const;
CWnd::IsWindowEnabled
作用:判断窗口是激活或者禁用状态。
BOOL IsWindowEnabled( ) const;
CWnd::IsIconic
作用:判断是否最小化
BOOL IsIconic( ) const;
CWnd::IsZoomed
作用:判断是否最大化
BOOL IsZoomed( ) const;
CWnd::GetWindowRect
作用:获取以屏幕坐标系为基础的窗口矩形区域。
void GetWindowRect(
LPRECT lpRect //用于接收窗口的位置信息。
)const;
例如:
CRect rect;
m_edit.GetWindowRect(rect);//得到相对于当前屏幕的位置
CWnd::GetClientRect
作用:获取以对象关联的以其客户区为基础的客户区矩形区域。(left和top必然是0)
void GetClientRect(
LPRECT lpRect
) const;
CWnd::GetTopWindow
作用:获取当前父窗口内所有子窗口中最底(top)的子窗口。
CWnd* GetTopWindow( ) const;
CWnd::GetForegroundWindow
作用:获取任务栏内目前正在前台的一个主窗口。
static CWnd* PASCAL GetForegroundWindow( );
CWnd::GetActiveWindow
作用:在同一进程内所有窗口中处于激活状态的窗口。
static CWnd* PASCAL GetActiveWindow( );
CWnd中刷新函数:
CWnd::Invalidate
作用:使整个窗口客户区无效
void Invalidate(
BOOL bErase = TRUE //参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。
);
CWnd::InvalidateRect
作用:使指定客户区无效,窗口的客户区无效意味着需要重绘
void InvalidateRect(
LPCRECT lpRect,
BOOL bErase = TRUE
);
CWnd::UpdateWindow
作用:使整个窗口客户区无效
与Invalidate区别:UpdateWindow( )的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。
CWnd::ClientToScreen
作用:客户区坐标转换为屏幕区坐标
void ClientToScreen(
LPPOINT lpPoint
) const;
void ClientToScreen(
LPRECT lpRect
) const;
CWnd::ScreenToClient
作用:屏幕区坐标转换为客户区坐标
void ScreenToClient(
LPPOINT lpPoint
) const;
void ScreenToClient(
LPRECT lpRect
) const;