当前位置:   article > 正文

MFC-核心类库-CWnd的成员函数介绍(三)_cwnd默认刷新函数

cwnd默认刷新函数

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

功能:设置计时器

  1. UINT_PTR SetTimer(
  2. UINT_PTR nIDEvent,
  3. UINT nElapse,
  4. void(CALLBACK * lpfnTimer
  5. )(HWND,
  6. UINT,
  7. UINT_PTR,
  8. DWORD
  9. )
  10. );

参数nIDEvent指定一个非零的定时器ID;
参数nElapse指定间隔时间,单位为毫秒;

参数lpfnTimer指定一个回调函数的地址,如果该参数为NULL,则WM_TIMER消息被发送到应用程序的消息队列,并被CWnd对象处理。如果此函数成功则返回一个新的定时器的ID,我们可以使用此ID通过KillTimer成员函数来销毁该定时器,如果函数失败则返回0。

例如:

SetTimer(123,500,NULL);//ID为123,每隔500ms触发一次OnTimer

CWnd::KillTimer

功能:清除计时器

  1. BOOL KillTimer(
  2. UINT_PTR nIDEvent //计时器ID
  3. );

例如:

KillTimer(123);//关闭计时器123

CWnd中窗口操作函数:

CWnd::ShowWindow

功能:设定视窗的可视性状态。

  1. BOOL ShowWindow(
  2. int nCmdShow
  3. );

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

功能:激活或者禁用窗口

  1. BOOL EnableWindow(
  2. BOOL bEnable = TRUE
  3. );

参数bEnable为TRUE,启用。FALSE禁用。

例如:

  1. CWnd* pCanc = GetDlgItem(IDCANCEL);
  2. if(pCanc->IsWindowEnabled())//可用
  3. pCanc->EnableWindow(false);//禁用
  4. else
  5. pCanc->EnableWindow(true);//激活

CWnd::MoveWindow

作用:改变窗口的位置。如果是父窗口,则坐标系是基于屏幕。如果是子窗口,则坐标系是基于父窗口。

  1. void MoveWindow(
  2. int x,//左边的新坐标
  3. int y,//顶端的新坐标
  4. int nWidth,//宽度
  5. int nHeight,//高度
  6. BOOL bRepaint = TRUE //为TURE表示需要重新绘制。
  7. );
  8. void MoveWindow(
  9. LPCRECT lpRect,
  10. BOOL bRepaint = TRUE
  11. );

CWnd::CenterWindow

作用:相对于父窗口居中。

  1. void CenterWindow(
  2. CWnd * pAlternateOwner = NULL //指向居中窗口的指针。(父窗口除外)
  3. );

CWnd::SetWindowPos

作用:更改窗口的x,y,z轴的位置。

  1. BOOL SetWindowPos(
  2. const CWnd* pWndInsertAfter,
  3. int x,//指定窗口的左侧的新位置。
  4. int y,//指定窗口顶部的新位置。
  5. int cx,//指定窗口的新的宽度
  6. int cy,//指定窗口的新高度
  7. UINT nFlags
  8. );

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

作用:获取以屏幕坐标系为基础的窗口矩形区域。

  1. void GetWindowRect(
  2. LPRECT lpRect //用于接收窗口的位置信息。
  3. const;

例如:

  1. CRect rect;
  2. m_edit.GetWindowRect(rect);//得到相对于当前屏幕的位置

CWnd::GetClientRect

作用:获取以对象关联的以其客户区为基础的客户区矩形区域。(left和top必然是0)

  1. void GetClientRect(
  2. LPRECT lpRect
  3. ) const;

CWnd::GetTopWindow

作用:获取当前父窗口内所有子窗口中最底(top)的子窗口。

CWnd* GetTopWindow( ) const;

CWnd::GetForegroundWindow

作用:获取任务栏内目前正在前台的一个主窗口。

static CWnd* PASCAL GetForegroundWindow( );

CWnd::GetActiveWindow

作用:在同一进程内所有窗口中处于激活状态的窗口。

static CWnd* PASCAL GetActiveWindow( );

CWnd中刷新函数:

CWnd::Invalidate

作用:使整个窗口客户区无效

  1. void Invalidate(
  2. BOOL bErase = TRUE //参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。
  3. );

CWnd::InvalidateRect

作用:使指定客户区无效,窗口的客户区无效意味着需要重绘

  1. void InvalidateRect(
  2. LPCRECT lpRect,
  3. BOOL bErase = TRUE
  4. );

CWnd::UpdateWindow

作用:使整个窗口客户区无效

Invalidate区别:UpdateWindow( )的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。

CWnd::ClientToScreen

作用:客户区坐标转换为屏幕区坐标

  1. void ClientToScreen(
  2. LPPOINT lpPoint
  3. ) const;
  4. void ClientToScreen(
  5. LPRECT lpRect
  6. ) const;

CWnd::ScreenToClient

作用:屏幕区坐标转换为客户区坐标

  1. void ScreenToClient(
  2. LPPOINT lpPoint
  3. ) const;
  4. void ScreenToClient(
  5. LPRECT lpRect
  6. ) const;


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/690682
推荐阅读
相关标签
  

闽ICP备14008679号