整理一下自己对于CWnd类的笔记。

CWnd类的子类分为四种:Frame(框架)、Dialog(对话框)、View(视图)、Control(控件)

函数

1.virtual BOOL Create(LPCTSTR className, LPCTSTR windowName, DWORD style,
    Const RECT& rect, CWnd* parentWnd, UINT ID, CCreateContext* context = NULL);

virtual BOOL Create(LPCTSTR className, LPCTSTR windowName, DWORD style,Const RECT& rect, CWnd* parentWnd, UINT ID, CCreateContext* context = NULL);

Create函数总共7个参数:

className:已注册系统窗口类的名称,或预定义系统窗口类的名称,例如:"STATIC",代表CStatic类,不能传入空字符串"",如果不想传入可用类名,就必须传入NULL

windowName:该字符串包含窗口显示名称;否则为 NULL,表示没有窗口显示名称

style:按位组合(或)的窗口样式。 WS_POPUP 选项不是有效的样式

rect:窗口的大小和位置(相对于父窗口的左上角)

parentWnd:指向父窗口的指针

ID:窗口ID

context:指向CCreateContext结构的指针,该结构用于自定义应用程序的文档视图结构

【返回值】

如果方法成功,则为 TRUE,否则为 FALSE

2.ModifyStyle和ModifyStyleEx函数

这两个函数虽然形参列表、返回值相同,但是作用却不同

// 删除和添加窗口样式,成功返回TRUE,否则FALSE
// 传入的flag会和SWP_NOSIZE、SWP_NOMOVE、SWP_NOZORDER、SWP_NOACTIVATE组合
BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0);// 删除和添加扩展样式,扩展样式以 WS_EX_ 开头
BOOL ModifyStyleEx(DWORD dwRemove, DWORD dwAdd, UINT nFlags = 0);
// 以下为定义代码
// 保留当前大小
#define SWP_NOSIZE          0x0001
// 保留当前位置
#define SWP_NOMOVE          0x0002
// 保留当前 Z 顺序
#define SWP_NOZORDER        0x0004
#define SWP_NOREDRAW        0x0008
// 不会激活窗口
#define SWP_NOACTIVATE      0x0010
// 表明frame改变,发送WM_NCCALCSIZE消息,常用
#define SWP_FRAMECHANGED    0x0020
#define SWP_SHOWWINDOW      0x0040
#define SWP_HIDEWINDOW      0x0080
#define SWP_NOCOPYBITS      0x0100
#define SWP_NOOWNERZORDER   0x0200  /* Don't do owner Z ordering */
#define SWP_NOSENDCHANGING  0x0400  /* Don't send WM_WINDOWPOSCHANGING */#define SWP_DRAWFRAME       SWP_FRAMECHANGED
#define SWP_NOREPOSITION    SWP_NOOWNERZORDER

3.MoveWindow

设置相对父窗口的坐标

填入CRect和直接4个参数是不同的,CRect四个参数为左上和右下点,4个参数为左上和宽高

4.GetWindowRect

获取相对屏幕左上角(0,0)的位置

5.MessageBox

创建并显示一个窗口,其中包含应用程序提供的消息和标题,以及"消息框样式"列表中所述的预定义图标和按钮的组合

int MessageBox(LPCTSTR lpszText,LPCTSTR lpszCaption = NULL,UINT nType = MB_OK);

此方法使用 Windows MessageBox SDK 中定义的 函数。 此方法返回调用此函数的结果

6.SetWindowPos

BOOL SetWindowPos(const CWnd* pWndInsertAfter,int x,int y,int cx,int cy,UINT nFlags);

更改子窗口、弹出窗口和顶级窗口的大小、位置和 Z 顺序

2.修改样式

// 清楚原有样式,添加当前样式
DWORD style = m_testDlg.GetStyle();
m_testDlg.ModifyStyle(style, WS_CHILD, 1);
#define WS_OVERLAPPED       0x00000000L
#define WS_POPUP            0x80000000L    //
#define WS_CHILD            0x40000000L
#define WS_MINIMIZE         0x20000000L
#define WS_VISIBLE          0x10000000L
#define WS_DISABLED         0x08000000L
#define WS_CLIPSIBLINGS     0x04000000L
#define WS_CLIPCHILDREN     0x02000000L
#define WS_MAXIMIZE         0x01000000L
#define WS_CAPTION          0x00C00000L     /* WS_BORDER | WS_DLGFRAME  */
#define WS_BORDER           0x00800000L
#define WS_DLGFRAME         0x00400000L
#define WS_VSCROLL          0x00200000L
#define WS_HSCROLL          0x00100000L
#define WS_SYSMENU          0x00080000L
#define WS_THICKFRAME       0x00040000L
#define WS_GROUP            0x00020000L
#define WS_TABSTOP          0x00010000L#define WS_MINIMIZEBOX      0x00020000L
#define WS_MAXIMIZEBOX      0x00010000L

2.PostMessage

事件

1.窗口移动事件(OnMoving、OnMove

// 移动完成后触发事件
afx_msg void OnMove(int x,int y);// 移动中触发事件
afx_msg void OnMoving(UINT nSide,LPRECT lpRect);

常见问题:

1.将一个窗口嵌入到指定窗口(但是不要将其它app的窗体嵌入,很容易出现界面卡死问题,因为定时器过多集中在一个界面)

// 这是一个对话框
m_testDlg.Create(IDD_DIALOG1);// 修改样式
DWORD style = m_testDlg.GetStyle();
m_testDlg.ModifyStyle(style, WS_VISIBLE|WS_CHILD, 1);// 设置SetParent
m_testDlg.SetParent(this);

MFC——CWnd类相关推荐

  1. CWnd类与Windows窗口的关系-3、CWnd类如何封装Windows窗口

    现在,可以比较深入地对CWnd类的封装机制进行剖析了. 在建立窗口句柄映射方面,CWnd使用了一个未公开的类CHandleMap进行管理.使用CWnd及派生类创建窗口时,建立了句柄映射,在窗口销毁时删 ...

  2. MFC常用类、成员函数、数组类、Cstring类、CTime类、CPoint类

    MFC数组类CByteArray: CDWordArray: CPtrArray: CUIntArray: CWordArray: CStringArray: 常用成员函数 1.int Add( AR ...

  3. VS2010-MFC(MFC常用类:MFC异常处理)

    VS2010-MFC(MFC常用类:MFC异常处理) 参考文章: (1)VS2010-MFC(MFC常用类:MFC异常处理) (2)https://www.cnblogs.com/Tang-tangt ...

  4. c语言cfile用法,MFC CFile类读写文件详解

    CFile类提供了对文件进行打开,关闭,读,写,删除,重命名以及获取文件信息等文件操作的基本功能,足以处理任意类型的文件操作. 一个读写文件的例子: 文件I/O 虽然使用CArchive类内建的序列化 ...

  5. Visual Studio/MFC编程入门之MFC常用类:CString类

    上一节讲了分割窗口的有关知识,本节开始讲解MFC的一些常用类,先来说说CString类.在内容开始前为大家介绍一款MFC界面开发控件: Xtreme Toolkit Pro | 免费下载:是屡获殊荣的 ...

  6. 错误: 内存泄漏,当您使用 GetDC 方法和 ReleaseDC 方法的 CWnd 类版本

    症状 调用CWnd::GetDC函数跟CWnd::ReleaseDC函数的代码运行时,会出现 4 个字节的内存泄漏. 原因 导致此错误的原因是当前未知. 解决方案 若要避免此问题,请不要使用GetDC ...

  7. 【MFC】MFC异常类——异常处理

    01.目录 目录 01.目录 02.异常机制 03.MFC异常宏 04.MFC异常类 05.MFC异常处理 06.MFC异常处理实例 07.小结 02.异常机制 我们开发的软件一般按照正常的流程操作时 ...

  8. BCGControlBar库专业版,完整记录的MFC扩展类

    BCGControlBar库专业版,完整记录的MFC扩展类 BCGControlBar Library Professional (BCGControlBar Pro MFC) 是一个 MFC 扩展库 ...

  9. MFC架构之CWnd类

    在Windows系统里,一个窗口的属性分两个地方存放:一部分放在"窗口类"里头,如上所述的在注册窗口时指定:另一部分放在Windows Object本身,如:窗口的尺寸,窗口的位置 ...

最新文章

  1. 上海交大研究人员使用非侵入性脑机接口和计算机视觉引导对机器人手臂进行共享控制...
  2. 查询oracle数据库adg的模式,Oracle11g ADG配置
  3. OpenGL Cubic Bezier三次贝塞尔曲线修补实例
  4. centos 服务器装与python34源码安装
  5. Oracle笔记:创建表空间、创建用户、授权
  6. 3详细参数_大疆精灵3值得入手吗?最详细的实测体验,各种参数应有尽有!
  7. XXX packages are looking for funding run `npm fund` for details
  8. memcache和redis本质区别在哪里?
  9. 技术实践如何支持演进式架构和持续集成
  10. 安装程序无法验证产品密钥解决方案
  11. Proteus进行单片机仿真(一)
  12. 格雷码与二进制转换的verilog实现
  13. 中基鸿业人人都要懂的投资理财常识
  14. DMG计算机,dmg文件怎么打开?dmg是什么意思?
  15. PSPICE仿真数据转MATLAB
  16. 一图看懂80年“AI革命”简史
  17. python批量关键字百度搜索结果url解码
  18. 埃森哲2021财年第三季度全球营收达133亿美元;富士胶片创新解决方案新成员亮相CHINA PRINT 2021 | 全球TMT...
  19. MMX、SSE、AVX等SIMD指令集说明
  20. 虽然中国超大城市的施工成本可能上升,但仍处于世界最便宜之列

热门文章

  1. 新开业和新签约酒店 | 上海世茂皇家艾美酒店开业;福州滨海新城那迪广场、Casa Cook桂山岛度假酒店等顺利签约...
  2. 用ASP.NET创建网络相册
  3. NISP一级知识点学习笔记总结
  4. html5怎么引入苹方简,css 引入苹方字体
  5. 生活随记-找爸爸的小女孩
  6. 抖音有这样一个姑娘她活成了大家都想要的样子
  7. 见一博客搬家公司 把老紫竹火龙果和我的blog全搬他家去了
  8. c51单片机烧录程序 控制台显示正在检测目标单片机
  9. 201809CCF真题
  10. 使用proteus仿真验证基尔霍夫定律