MFC主框架和视类PreCreateWindow()函数学习

news2024/12/23 23:20:42

在VC++生成的单文档应用程序中,主框架类和视类均具有PreCreateWindow函数;

从名字可知,可在此函数中添加一些代码,来控制窗口显示后的效果;

并且它有注释说明,

Modify the Window class or styles here by modifying the CREATESTRUCT cs

在这里通过修改CREATESTRUCT类型变量cs来修改窗口类或者窗口风格;

在Win32 API中窗口类是如下一个结构体;

typedef struct _WNDCLASSEX {
UINT cbSize; //该结构的字节数
UINT style; //窗口类的风格
WNDPROC lpfnWndProc; //窗口过程
int cbClsExtra;
int cbWndExtra;
HANDLE hInstance; //该窗口类的窗口过程所属的应用实例
HICON hIcon; //该窗口类所用的像标
HCURSOR hCursor; //该窗口类所用的光标
HBRUSH hbrBackground; //该窗口类所用的背景刷
LPCTSTR lpszMenuName; //该窗口类所用的菜单资源
LPCTSTR lpszClassName; //该窗口类的名称
HICON hIconSm; //该窗口类所用的小像标
} WNDCLASSEX;

窗口风格是Windows预定义的以 WS_ 开头的一些常量;

WS_BORDER    窗口具有细线边框
WS_CAPTION    窗口具有标题栏, (包含 WS_BORDER 样式) 
WS_CHILD    窗口是子窗口;具有此样式的窗口不能有菜单栏;此样式不能与 WS_POPUP 样式一起使用;
WS_CHILDWINDOW    与 WS_CHILD 样式相同;

    等等;

在视类的PreCreateWindow函数中设置窗口样式多数不起作用;一般都在主框架类的PreCreateWindow函数中设置;

CREATESTRUCT结构体是MFC定义的;

typedef struct tagCREATESTRUCT
{
  LPVOID  lpCreateParams;  //指向将被用于创建窗口的数据的指针。  
  HANDLE  hInstance;       //标识了拥有新窗口的模块的模块实例的句柄。  
  HMENU   hMenu;           //标识了要被用于新窗口的菜单。如果是子窗口,则包含整数ID。  
  HWND    hwndParent;      //标识了拥有新窗口的窗口。如果新窗口是一个顶层窗口,这个参数可以为NULL。  
  int     cy;              //指定了新窗口的高。  
  int     cx;              //指定了新窗口的宽。  
  int     y;               //指定了新窗口的左上角的y轴坐标。  
  int     x;               //指定了新窗口的左上角的x轴坐标。 
  LONG    style;           //指定了新窗口的风格。  
  LPCSTR  lpszName;        //指向一个以null结尾的字符串,指定了新窗口的名字。  
  LPCSTR  lpszClass;       //指向一个以null结尾的字符串,指定了新窗口的Windows类名
  DWORD   dwExStyle;       //指定了新窗口的扩展风格。  
} CREATESTRUCT;

之前有一个MFC程序在窗口显示一些文字,下面看一下;

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.cx = 300; 
    cs.cy = 300;
	cs.x=10;
	cs.y=10;
	//cs.style &= ~WS_BORDER;
	cs.style&=~FWS_ADDTOTITLE;
	cs.style |= WS_HSCROLL | WS_VSCROLL;
	//自定义标题
	cs.lpszName = "HelloWorld";
	return TRUE;
}

    指定了窗口的大小,窗口左上角坐标,具有滚动条,修改了MFC的默认窗口标题;

cs.lpszName = "HelloWorld" 这句要先有 cs.style&=~FWS_ADDTOTITLE 这句才起作用;

有时间继续; 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1018554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RHCSA 重定向、vim练习题

1.重定向练习题 (1)新建一个文件redirect.txt,并在其中写入20210804RHCSA,保存并退出 先输入命令 [rootlocalhost ~]# vim redirect.txt进入vim编辑器后,按快捷键“i”进入编辑模式,再写入数据,写完之后按“esc"键退出编辑…

python 采用selenium+cookies 获取登录后的网页

百度网页由于需要登陆手机短信验证。比较麻烦 这里我采用先人工登录百度账号,然后将百度账号的相关cookies保存下来 然后采用selenium动态登录网页 整体代码如下 from selenium import webdriverimport timeoptions webdriver.ChromeOptions()options.add_argu…

LLM 08-分布式训练

LLM 08-分布式训练 8.1 为什么分布式训练越来越流行 近年来,深度学习被广泛应用到各个领域,包括计算机视觉、语言理解、语音识别、广告推荐等。在这些不同的领域中,一个共同的特点就是模型规模越来越大,比如 GPT-3 模型的参数量达…

华为云云耀云服务器L实例评测|基于L实例使用Docker部署MySQL服务并连接MySQL—phpMyAdmin管理工具

文章目录 一、云耀云服务器产品优势1、智能不卡顿2、价优随心用3、上手更简单4、管理更省心 二、远程连接云耀云服务器L实例三、安装Docker、docker-compse1、docker安装2、docker-compose安装 四、方法① 使用Docker安装部署MySQL服务五、方法② 使用docker-compse安装部署MyS…

2023年 python结合excel实现快速画图(零基础快速入门)

目录 1.适用人群 2.环境配置 3.基本用法 3.1 数据读取 3.2 数据分析 3.3 数据组装 3.4 制表: 4.快速提升 5.效果展示 1.适用人群 电脑有python环境,会python基本使用,需要短时间内完成大量画图任务的数据分析的人群。(有…

AlexNet——训练花数据集

目录 一、网络结构 二、创新点分析 三、知识点 1. nn.ReLU(inplace) 2. os.getcwd与os.path.abspath 3. 使用torchvision下的datasets包 4. items()与dict()用法 5. json文件 6. tqdm 7. net.train()与net.val() 四、代码 AlexNet是由Alex Krizhevsky、Ilya S…

深入学习 Redis Cluster - 基于 Docker、DockerCompose 搭建 Redis 集群,处理故障、扩容方案

目录 一、基于 Docker、DockerCompose 搭建 Redis 集群 1.1、前言 1.2、编写 shell 脚本 1.3、执行 shell 脚本,创建集群配置文件 1.4、编写 docker-compose.yml 文件 1.5、启动容器 1.6、构建集群 1.7、使用集群 1.8、如果集群中,有节点挂了&am…

基于springboot+vue的养老院管理系统 前后端分离项目

养老院管理系统 前后端分离项目 后端技术:springbootmybatis-plusredismysql 前端:vue3.0elementui-plus 【人员管理】 用户管理 客户管理【药品食品管理】 药品管理 食品管理【报修管理】【外出管理】外出管理 访客管理【留言管理】【新闻管理】新闻…

服务器杀掉死进程

清掉服务器上的死进程 查看服务器使用情况 nvidia-smi发现并没有显示进程,那应该是有死进程。 查看占用情况 ps aux会显示如上图的进程列表。 PID进程号STAT状态(S休眠R运行Z死掉了)TIME占用时间(过长的有问题)COMMAND进程启动命令(应该能帮助回忆起这是什么程…

IDEA——工程项目的两种窗口开发模式

文章目录 引言一、多项目窗口模式的便利1.1 源码 debug 二、多项目窗口模式的弊端三、多项目窗口的版本管理四、单项目、多项目窗口模式转换 引言 idea编辑器有两种窗口模式,一种是单项目窗口,另一种是多项目窗口。 我个人使用较多的是单项目窗口&#…

指针和数组笔试题讲解(3)

🐵本篇文章将对指针相关笔试题进行讲解,同时也是指针和数组笔试题讲解的最后一篇文章,那么接下来将会对8道笔试题进行逐一讲解 笔试题1💻 int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d…

C#调用C++ dll 返回数组

先看一下C语言函数返回数组的问题&#xff1b; 先看一个错误的示范&#xff1b; 因为 a 是局部变量&#xff0c;只存在函数 function() 中&#xff0c;返回给main中的b是错误的&#xff1b; 函数返回数组的一种写法如下&#xff1b; #include<stdio.h> int function(in…

二维凸包(Graham) 模板 + 详解

&#xff08;闲话&#xff09; 上了大学后没怎么搞oi&#xff0c;从土木跑路到通信了&#xff08;提桶开润大成功&#xff01;&#xff09;&#xff0c;但是一年上两年的课&#xff08;补的&#xff09;&#xff0c;保研也寄掉了&#xff08; 说起来自从博客被大学同学发现并…

地牢大师问题(bfs提高训练 + 免去边界处理的特殊方法)

地牢大师问题 文章目录 地牢大师问题前言题目描述题目分析输入处理移动方式【和二维的对比】边界判断问题的解决 代码总结 前言 在之前的博客里面&#xff0c;我们介绍了bfs 基础算法的模版和应用,这里我们再挑战一下自己&#xff0c;尝试一个更高水平的题目&#xff0c;加深一…

vue2——电商项目 黑马

创建项目 初始化 router app.vue vant 组件库 Viewport 布局 vw适配 路由配置 底部导航组件 二级路由配置 登录页面 新建默认样式 main.js 引入commonless 登录静态页面—头部组件NavBar 导入navbar 引用 axios封装 图形验证码 获取 get 渲染 api接口模块 toast轻提示 使用 …

Flutter图标

https://fluttericon.cn/ Flutter 内置了丰富的图标。 Icon(Icons.ac_unit)

智能批量重命名,轻松删除文件名后缀数字并添加编号!

亲爱的用户们&#xff0c;您是否曾经为繁琐而重复的文件重命名工作而感到头疼&#xff1f;现在&#xff0c;我们为您提供一款智能化的工具&#xff0c;让文件重命名变得如此简单&#xff01; 首先&#xff0c;我们要进入文件批量改名高手&#xff0c;并在板块栏里选择“文件批…

overleaf 插入图片,引用图片,图标标题Fig与文章引用Figure不一致解决

目录 1.一般插图 2.插入双栏图片 3 插入子图 4. 引用出现问题 问题1 &#xff1a; pdf 文中引用只出现了图片序号&#xff0c;如“3”。没有出现“Fig.3 或者Figure.3” 问题2&#xff1a;文中引用的标题和图片下面的标题不一致 1 首先&#xff0c;在导言区添加以下行…

七天学会C语言-第二天(数据结构)

1. If 语句&#xff1a; If 语句是一种条件语句&#xff0c;用于根据条件的真假执行不同的代码块。它的基本形式如下&#xff1a; if (条件) {// 条件为真时执行的代码 } else {// 条件为假时执行的代码 }写一个基础的If语句 #include<stdio.h> int main(){int x 10;…

HarmonyOS开发环境搭建

一 鸿蒙简介&#xff1a; 1.1 HarmonyOS是华为自研的一款分布式操作系统&#xff0c;兼容Android&#xff0c;但又区别Android&#xff0c;不仅仅定位与手机系统。更侧重于万物物联和智能终端&#xff0c;目前已更新到4.0版本。 1.2 HarmonyOS软件编程语言是ArkTS&#xff0c…