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

在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 cscs.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.mzph.cn/news/81304.shtml

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

相关文章

Bash脚本学习:AWK, SED

1. AWK AWK 是一种编程语言,设计用于处理文件或数据流中基于文本的数据,或者使用 shell 管道。 可以将 awk 与 shell 脚本结合使用或直接在 shell 提示符下使用。 以上展示使用AWK分别打印第一个位置变量和第二个位置变量。 建立一个文档 csvtest.cs…

设计模式:单例模式

目录 什么是单例模式为什么使用单例模式常见的单例写法1. 懒汉式(Lazy Initialization)2. 双重检查锁定(Double-Checked Locking)3. 饿汉式(Eager Initialization)4. 枚举实现单例 总结 什么是单例模式 单…

AI深度学习-卷积神经网络000

文章目录 前言1.什么是深度学习2.语义分割与实例分割概述3.什么是卷积?4.Unet网络 前言 本栏目,主要为深度学习保姆教程。 主要通过B站视频整理而来: 深度学习保姆级教学 Unet语义分割视觉三维重建算法 1.什么是深度学习 深度学习保姆级教…

Scapy 解析 pcap 文件从HTTP流量中提取图片

Scapy 解析 pcap 文件从HTTP流量中提取图片 前言一、网络环境示例二、嗅探流量示例三、pcap 文件处理最后参考 ​ 作者:高玉涵 ​ 时间:2023.9.17 10:25 ​ 环境:Linux kali 5.15.0-kali3-amd64,Python 3.11.4,scapy…

【OpenSSL】VC编译OpenSSL

VC编译OpenSSL 编译工具准备编译OpenSSL建立Hello World工程创建VS工程 编译工具准备 安装好Visual Studio。安装Perl, 主要是用来生成nmake的。准备好汇编语言编译工具nasm,并添加到path路径。下载好Open SSL源代码。 编译OpenSSL 安装Perl,并加入到path路径,检验…

HTML 学习笔记(基础)

它是超文本标记语言&#xff0c;由一大堆约定俗成的标签组成&#xff0c;而其标签里一般又有一些属性值可以设置。 W3C标准&#xff1a;网页主要三大部分 结构&#xff1a;HTML表现&#xff1a;CSS行为&#xff1a;JavaScript <!DOCTYPE html> <html lang"zh-…

SkyWalking快速上手(二)——架构剖析1

文章目录 介绍架构概述一、Agent组件介绍Agent的配置配置参数详解service_namesample_n_per_3_secsnamespacecollector.backend_service Agent的工作原理 二、Collector组件什么是Collector组件?Collector组件的配置配置Collector组件示例 总结 介绍 SkyWalking是一个开源的分…

使用 Feature Flags 实现数据库灰度迁移的监控与可观测性

作者&#xff1a;观测云与胡博 场景描述 很多企业会遇到数据库升级、或数据库迁移的情况&#xff0c;尤其是在自建数据库服务向云数据库服务、自建机房向云机房、旧数据库向新数据库迁移等场景。 然而&#xff0c;我们需要在整个移植过程中保证其稳定性、避免数据遗失、服务宕…

后端中间件安装与启动(Redis、Nginx、Nacos、Kafka)

后端中间件安装与启动 RedisNginxNacosKafka Redis 1.打开cmd终端&#xff0c;进入redis文件目录 2.输入redis-server.exe redis.windows.conf即可启动&#xff0c;不能关闭cmd窗口 &#xff08;端口配置方式&#xff1a;redis目录下的redis.windows.conf配置文件&#xff0c;…

【第四阶段】kotlin语言的定义类和field关键字学习

1.普通成员变量背后隐士代码 为什么在kotlin中是private 可以直接调用&#xff0c;隐式代码如下 package Kotlin.Stage4class Test54{var name"kotlin"/*背后做的事NotNullprivate String name"kotlin";public void setName(NotNull String name){this.na…

【项目经验】:elementui多选表格默认选中

一.需求 在页面刚打开就默认选中指定项。 二.方法Table Methods toggleRowSelection用于多选表格&#xff0c;切换某一行的选中状态&#xff0c;如果使用了第二个参数&#xff0c;则是设置这一行选中与否&#xff08;selected 为 true 则选中&#xff09;row, selected 详细…

LinkedList 源码分析

LinkedList 是一个基于双向链表实现的集合类。 LinkedList 插入和删除元素的时间复杂度 头部插入/删除&#xff1a;只需要修改头结点的指针即可完成插入/删除操作&#xff0c;因此时间复杂度为 O(1)。尾部插入/删除&#xff1a;只需要修改尾结点的指针即可完成插入/删除操作…

vue2 维护状态key的作⽤和原理

1. key定义 为了给 Vue ⼀个提示&#xff0c;以便它能跟踪每个节点的身份&#xff0c;从⽽重⽤和重新排序现有元素&#xff0c;你需要为每项提供⼀个唯⼀ key 2. 写法 <li v-for"(item,index) in obj" :key"item.id">{{item.name}}</li>3. …

2024字节跳动校招面试真题汇总及其解答(五)

17.TCP的拥塞控制 TCP 的拥塞控制是指在 TCP 连接中,发送端和接收端通过协作来控制网络中数据包的流量,避免网络拥塞。TCP 的拥塞控制是 TCP 协议的重要组成部分,它可以确保 TCP 连接的稳定性和可靠性。 TCP 的拥塞控制主要有以下几个目的: 防止网络拥塞:当网络中的数据…

core文件的生成与使用

目录 core 设置例子 1例子 2core 名称及目录修改参考 在使用嵌入式系统时&#xff0c;出错后&#xff0c;不好使用 gdb 调试&#xff0c;这时&#xff0c;可让系统生成一个 core 文件&#xff0c;用于查看出错原因 core 设置 要生成 core 文件&#xff0c;需要先设置 core 文…

数据分析的概念

一、数据分析的目的&#xff1a;把隐藏在一大批看来杂乱无章的数据中的信息集中和提炼出来&#xff0c;从而找出研究对象的内在规律。&#xff08;主要在于分析目的及过滤脏数据&#xff09; 1.数据分析是有组织有目的地收集数据、分析数据&#xff0c;使之成为信息的过程。&a…

JDK18特性

文章目录 JAVA18概述1. 默认UTF-8字符编码2. 简单的Web服务器3.JavaDoc的增强4. 反射功能的新特性5.Vector API(三次孵化)6. 互联网地址解析SPI7. 外部函数和内存API(二次孵化)8.switch 表达式 JAVA18概述 Java 18 在 2022 年 3 月 22 日正式发布&#xff0c;Java 18 不是一个…

论文阅读之Learning and Generalization of Motor Skills by Learning from Demonstration

论文阅读其实就是用自己的话讲一遍&#xff0c;然后理解其中的方法 0、论文基本信息 为什么阅读此篇论文&#xff1a;因为它是DMP经典论文&#xff0c;被引多次&#xff0c;学史可以明智&#xff0c;了解最初机理。 论文题目&#xff1a;Learning and Generalization of Moto…

【Java 基础篇】Java字节字符流详解:轻松读写文本与二进制数据

在Java编程中&#xff0c;对文件和数据的读写操作是非常常见的任务。为了满足不同需求&#xff0c;Java提供了多种流类来处理输入和输出。本篇博客将详细介绍Java中的字节流和字符流&#xff0c;以及它们的使用方法&#xff0c;帮助初学者更好地理解和运用这些流来处理文件和数…

opencv形状目标检测

1.圆形检测 OpenCV图像处理中“找圆技术”的使用-图像处理-双翌视觉OpenCV图像处理中“找圆技术”的使用,图像处理,双翌视觉https://www.shuangyi-tech.com/news_224.htmlopencv 找圆心得&#xff0c;模板匹配比霍夫圆心好用 - 知乎1 相比较霍夫找直线算法&#xff0c; 霍夫找…