为什么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, .. 阅读详情

相关推荐

深入解析Android SoundTrigger架构:从HIDL到AIDL的演进与实践

本文深入解析Android SoundTrigger架构,从HIDL到AIDL的演进与实践。SoundTrigger是Android系统中低功耗语音唤醒的关键技术,通过分层设计和硬件协同实现高效语音识别。文章详细介绍了核心组件、HIDL与AIDL的对比及优化技巧,帮助开发者掌握语音模型优化和功耗管理。

brown的博客 230

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

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

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

第 4 课 树莓派5的换源与中文输入法

树莓派换源、中文输入法的安装

嵌入式老牛的博客 2288

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

(P2)PALM软件的基本使用流程

上一篇介绍了PALM在Ubuntu系统上的下载安装及安装后的目录文件结构,这一篇以自带的案例介绍软件的基本操作流程。(请转至example_cbl项目) 输入 声明:官网均有各个变量的说明,以下代码来自软件自带案例 palm的最小输入文件是p3d文件,以下是example_cbl_p3d的详细说明。(文件语言格式Fortran,请自行先学习下语言的基本语法。笔者也是新学者,有非常多的问题,很多参数也不能准确的说出是什么意思,还请不吝赐教,谢谢!!!) !几点说明 !1、该运行文件基本由三大块组成:1)in

ysqzhatian的博客 3259

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装。

weixin_40132006的博客 2241

CWnd::CreateEx

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

lishunxi0519的专栏 1675

ISCC-Amy‘s Code CTF-Reverse

ISCC-Amy's Code CTF-Reverse

m0_72904009的博客 682

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

Mac和VScode配置fortran

macOS系统 vscode fortran gfortran 终端

weixin_43047707的博客 2410

【数据集】GPM IMERG Daily Precipitation Dataset

GPM IMERG Daily Precipitation Dataset

WW、forever的博客 1219

MFC窗口格式的设置

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

一刀 895

MATLAB计算各种复合干热指数,如SDHI、DHMI等

MATLAB编程实现各种复合干热指数

WW、forever的博客 5079

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

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

qq_42840244的博客 1609

蓝牙模块HM-10手册

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

MFC API:AfxRegisterWndClass(注册窗口类)

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

zxf347085420的博客 2739

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

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

u014250897的专栏 1493

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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、付费专栏及课程。

余额充值