为什么mfc要注册WNDCLASS样式

MFC中注册WNDCLASS样式并建立窗口 2010年4月10日记:如果程序主窗口不是由CframeWnd派生而来,而是由CWnd派生而来,那么在创建窗口的时候,必须注册自己的WNDCLASS,因为CWnd::CreateEX不接受NULL WNDCLASS名称。这种情况下,注册WNDCLASS样式半建立窗口有两种方式。方式一,定义一个WNDCLASS结构实例,并对每个字段进行初始化,然后调用::RegisterClass或者M 阅读详情

        首先,我们必须要注册这一个类,否则在vc(c写的代码)是不能输出的,如果在mfc建立的项目中可以不用定义,因为frame文件里面已经有了相应的定义。同时,我们需要注意的是如果一个基类如果注册了相应的窗口样式,这时,子类可以不用定义(具体的原因不明,建议查看源码)。


      如果没有相应的注册,这时我们需要有一下两种思路解决问题:

方式一,定义一个WNDCLASS结构实例,并对每个字段进行初始化,然后调用::RegisterClass或者MFC的全局函数AfxRegisterClass注册WNDCLASS。

如:

WNDCLASS wc;

wc.style=0;

wc.lpfnWndProc=(WNDPROC)WndProc;

wc.cbClsExtra=0;

wc.cbWndExtra=0;

wc.hInstance=hInstance;

wc.hIcon=LoadIcon(NULL,IDI_WINLOGO);

wc.hCursor=LoadCursor(NULL,IDC_ARROW);

wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);

wc.lpszMenuName=NULL;

wc.lpszClassName="MyWndClass";

RegisterClass(&wc);

这种方式比较麻烦。

方式二:用MFC的全局函数AfxRegisterWndClass注册WNDCLASS,不需要定义所有字段,只需要关注其4个参数值。函数原型:LPCTSTR AfxRegisterWndClass(UINT nClassStyle,HCURSOR hCursor=0,HBRUSH hbrBackground=0,HICON hIcon=0);

第一个参数指定类样式,定义窗口的某种操作特性;第二个参数指定窗口识别“类光标”;第三个参数指定窗口默认背景颜色,可以传递一个画刷句柄,也可以指定一个预定义的Windows系统颜色并加1,第四个参数指定windows用来在桌面上、任务栏和其它地方代表应用程序的图标句柄,可以自定义图标然后加载,也可以加载系统图标。

该函数返回一个包含WNDCLASS名称的非空结尾字符串的指针,作用CreateEX函数的参数,用以创建窗口。

如:

CString strWndClass=AfxRegisterWndClass(CS_DBLCLKS, AfxGetApp()->LoadStandardCursor(IDC_ARROW), (HBRUSH)(COLOR_3DFACE+1), AfxGetApp()->LoadStandardIcon(IDI_WINLOGO));

CreateEx(0,strWndClass,_T("my program"),
   WS_OVERLAPPED|WS_SYSMENU|WS_CAPTION|WS_MINIMIZEBOX,
   CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
   NULL,NULL);

 

注:决定窗口能否缩放的部份,是创建窗口是为窗口指定样式的参数部份。

一般传递的参数是WS_OVERLAPPEDWINDOW,其定义如下:

#define WS_OVERLAPPEDWINDOW(WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZE|WS_MAXIMIZE);

其中WS_THICKFRAME样式增加了一个其边和角可以用鼠标抓取并拖动的可调整大小的边框,如果不定义这个样式,则所生成的窗口不能缩放,此时,一般情况下是把最大化按钮也撤消,即不定义WS_MAXIMIZE样式。


       

      

MFC——CWnd类 整理一下自己对于CWnd类的笔记。 函数 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, .. 阅读详情

相关推荐

Docker容器n8n中 read/write files from disk 无法读取容器内文件解决方案

《n8n文件读写Docker部署常见问题解决方案》摘要:针对n8n 1.90.2版本在Docker环境下文件读写失败问题,本文分析常见错误包括路径错误(ENOENT)、权限不足(EACCES)及节点误用问题。核心解决方案为:1)通过-v参数挂载宿主机目录到容器(如/files);2)使用新版Read/WriteFilesfromDisk节点操作文件;3)确保权限设置正确。提供可直接导入的示例工作流JSON,演示从CSV读取到结构化数据处理的全流程。特别强调已部署用户需重新挂载卷的正确操作方式,并附解决方案对

m0_74822402的博客 2184

selenium自动化测试入门 浏览器多窗口切换

有时web应用会打开多个浏览器窗口,当我们要定位新窗口中的元素时,我们需要将webDriver的handle(句柄)指定到新窗口。 什么意思? 假设我们打开web应用,在系统运行过程中重新打开一个新窗口(可以是页签,当前浏览器存在两个窗口),这时我们webDriver对浏览器的操作指针(句柄)还再原窗口,如果需要操作新窗口元素就要将handle句柄切换到新窗口。 一、常用方法 driver.current_window_handle 获取当前窗口handle driver.window_handles 获取

公众号:【伤心的辣条】 1423

langchain入门学习笔记

langchain快速入门

1731

VC++MFC框架窗口(三)CreateEx 函数 Create函数 下载PDB文件

2.创建窗口 按照Win32程序编写步骤,在设计窗口类并注册窗口类之后创建窗口。在MFC程序中,窗口的创建功能是由 CWnd 类的 CreateEx 函数实现的,该函数的声明位于afxwin.h文件中,具体代码如下所示。 CreateEx 函数(afxwin.h)声明: // advanced creation (allows access to extended styles) // 高级创建(允许访问扩展样式) virtual BOOL CreateEx(DWORD dw..

当路danglu0010 2128

【操作系统】实验楼操作系统实验三——系统调用

操作系统实验3——系统调用 环境配置 ​ 首先同样是配置环境 cd /home/shiyanlou/oslab tar -zxvf hit-oslab-linux-20110823.tar.gz -C /home/shiyanlou 实验步骤 添加函数声明 cd ~/oslab/linux-0.11/include/linux gedit sys.h //添加内容: extern int sys_whoami(); extern int sys_iam(); fn_ptr_sys_call_table

qq_46612803的博客 6357

数字IC后端PPA优化实战:Timing一致性策略与Module Region布局技巧

本文深入探讨了数字IC后端设计中的PPA优化实战,重点解析了Timing一致性问题及其解决方案。通过调整Clock Uncertainty、Timing Derate和RC Scale Factor等关键参数,使Innovus等PR工具的分析结果更接近PrimeTime签核结果。同时,文章详细介绍了Module Region布局技巧,通过为关键模块划定物理区域,优化单元摆放,有效减少线延迟,从而协同提升时序收敛效率与设计可预测性。

weixin_29218963的博客 203

CWnd::CreateEx

CWnd::CreateEx 创建指定的窗口并将它附加到 CWnd 对象。  virtual BOOL CreateEx(    DWORD dwExStyle,    LPCTSTR lpszClassName,    LPCTSTR lpszWindowName,    DWORD dwStyle,    int x,    int y,    int nWidth,

lishunxi0519的专栏 1675

【优化求解】基于matlab粒子群算法PSO确定最佳开关角对称级联多层逆变器【含Matlab源码 13080期】

粒子群算法PSO确定最佳开关角对称级联多层逆变器 完整代码,包运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 97

MFC中注册WNDCLASS样式并建立窗口(使用WNDCLASS创建无父窗口的窗口)

<br />转自:http://blog.youkuaiyun.com/moon19870104/archive/2010/04/10/5471207.aspx<br /> <br />如果程序主窗口不是由CframeWnd派生而来,而是由CWnd派生而来,那么在创建窗口的时候,必须注册自己的WNDCLASS,因为 CWnd::CreateEX不接受NULL WNDCLASS名称。<br />这种情况下,注册WNDCLASS样式半建立窗口有两种方式。<br />方式一,定义一个WNDCLASS结构实例,并对每个字段进

王晓斌的专栏 1240

ISO2626 --- Item Definition相关项定义

本文并不是针对ISO26262的一个项目,而是针对ISO26262的规范,我们在相关项定义阶段,我们需要做什么,我们的文档需要包含哪些内容的一个描述。

wj博客 909

专为AI打造的浏览器:内存占用仅为Chrome的1/9、比Chrome快11倍(Docker部署教程,支持飞牛nas等服务器部署)

🚀 专为AI打造的无头浏览器来了! 用Zig从零构建,内存仅Chrome的1/9,速度快11倍,原生CDP协议支持Docker部署,适合爬虫、自动化测试和AI代理应用。✨

XiaoqiangClub的博客 732

MFC窗口格式的设置

1. 在窗口没有创建之前PreCreateWindow(CREATESTRUCT& cs): 注册一个WNDCLASS,将cs.lpszClass赋值为"myWnd.org",注册的WNDCLASS的为生成窗口的格式; 修改CREATESTRUCT cs的值,设置窗口的标题栏的名字:cs.style &= ~FWS_ADDTOTITLE;cs.lpszName = "鸟人"; 调用AfxRe

一刀 895

【C++项目】从零实现RPC框架「三」:项⽬抽象层实现

本文详细介绍了如何从零实现一个 C++ RPC(远程过程调用)框架,包括通信抽象、消息抽象、通信实现、以及消息分发器的实现。通过系统化的代码示例,展示了如何构建一个高效、灵活且可扩展的 RPC 框架。

You build it, you run it 2162

怎么用CWnd::CreateEX创建主窗口

如果程序主窗口不是由CframeWnd派生而来,而是由CWnd派生而来,那么在创建窗口的时候,必须注册自己的WNDCLASS,因为CWnd::CreateEX不接受NULL WNDCLASS名称。 这种情况下,注册WNDCLASS样式半建立窗口有两种方式。 方式一,定义一个WNDCLASS结构实例,并对每个字段进行初始化,然后调用::RegisterClass或者MFC的全局函数AfxRegist...

qq_42840244的博客 1609

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MFC API:AfxRegisterWndClass(注册窗口类)

如果程序主窗口不是由CframeWnd派生而来,而是由CWnd派生而来,那么在创建窗口的时候,必须注册自己的WNDCLASS,因为CWnd::CreateEX不接受NULL WNDCLASS名称。 这种情况下,注册WNDCLASS样式半建立窗口有两种方式。 方式一,定义一个WNDCLASS结构实例,并对每个字段进行初始化,然后调用::RegisterClass或者MFC的全局函数AfxR...

zxf347085420的博客 2739

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

在MFC中注册自己的窗口类名

之所以产生这个想法,或者说关注这个问题,是因为想通过FindWindow找到(自己设计的程序中的)窗口的句柄。 一般情况下,MFC使用了默认的窗口属性来帮助我们建立窗口。这里单独说一下基于Dialog建立起来的程序,窗口有些是通过有些是Dialog(有名字/标题,但窗口类型名与其他基于Dialog的程序的窗口的窗口类型名相同;只能通过名字来查找),有些是DialogBar(既没有名字/标题,也没

u014250897的专栏 1493

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MFC注册窗口类

MFC带有注册("register")字样的函数不少呀!主要有下面几个: AfxDeferRegisterClass BOOL AFXAPI AfxEndDeferRegisterClass(LONG fToRegister) LPCTSTR AFXAPI AfxRegisterWndClass(UINT nClassStyle,HCURSOR hCursor, HBRUSH hbrBackgr

TMS_LI的专栏 3740

MFC 窗体注册 WNDCLASS

//初始化 //初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分 {   HWND hwnd;   MSG Msg;   WNDCLASS wndclass;   char lpszClassName[]="窗口";//窗口类名   char lpszTitle[]="徐新坡"; //窗口标题名   //窗口类定义   //窗口类定义了窗口的形式与功能 窗口类定义通过给窗口类数据结构...

kakarrot2009的专栏 64

MFC注册控件用法

自己建立一个MFC空间,步骤如下: 一、     将CUSTOM控件拖入方框,然后在属性class中,给控件命名ID1(注册函数需要用到ID端号RegisterWindowClass()) 二、给控件添加一个类,该类是用来申明和定义注册函数RegisterWindowClass() 2.1在控件上单击鼠标右键—Class Wizard—Add Class Class name:SCOM

净无邪博客 1720

CWnd和WNDCLASS的误解

在设计一种窗体类型时需要用到WNDCLASS类 两者的作用分别是 CWnd是MFC类,将Windows API和C++结合封装产生的类。 利用WNDCLASS可以设计自己的封装类并注册

245

MFC基础入门

VS2019中MFC开发入门

Star_ID的博客 1万+

帮你快速理解什么是MFC(Windows环境下)

帮你快速理解什么是MFC(Windows环境下)

荔园微风的博客 1万+
上一篇: 模块句柄(实例句柄)和句柄的区别
下一篇: 如何查看MFC源码(转)
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值