PreCreateWindow函数复习总结

MFC应用程序的初始化过程   一个MFC应用程序的生命周期(一)程序的进入点        MFC作为Win32 API的一种封装,它的程序进入点自然是WinMain。但是,这个WinMain也被封装起来,用户是看不到的,只是在编译器进行连接时会被自动连接。        下面我们就来寻找一下MFC程序被隐藏了的WinMain。搜索MFC的源文件,可以发现MFC的WinMain定义在 appmodul. 阅读详情

(1)precreatewindow里面做了什么?

     答:在现有应用程序中更改样式
     如果是正在现有应用程序中更改窗口属性,则遵循本文其余部分的说明。

     若要更改框架应用程序(用应用程序向导创建的)所使用的默认窗口属性,请重写窗口的 PreCreateWindow 虚拟成员函数。           PreCreateWindow 允许应用程序访问通常由 CDocTemplate 类内部管理的创建进程。框架在即将创建窗口前调用 PreCreateWindow。通过修改传递给 PreCreateWindow 的结构 CREATESTRUCT,应用程序可以更改用于创建窗口的属性。例如,为了确保窗口不使用标题,使用以下按位操作。

// cs has been declared as CREATESTRUCT& cs;
cs.style &= ~WS_CAPTION;
CTRLBARS 示例应用程序论证了这项更改窗口属性的技术。根据应用程序在 PreCreateWindow 中的更改,可能有必要调用此函数的基类实现。

以下讨论适用于 SDI 情况和 MDI 情况。

SDI 情况
在单文档界面 (SDI) 应用程序中,框架中的默认窗口样式是 WS_OVERLAPPEDWINDOW 和 FWS_ADDTOTITLE 样式的组合。FWS_ADDTOTITLE 是 MFC 特定的样式,指示框架将文档标题添加到窗口标题。若要在 SDI 应用程序中更改窗口属性,请在从 CFrameWnd(应用程序向导给 CMainFrame 起的名称)派生的类中重写 PreCreateWindow 函数。例如:

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    // Create a window without min/max buttons or sizable border
    cs.style = WS_OVERLAPPED | WS_SYSMENU | WS_BORDER;

    // Size the window to 1/3 screen size and center it
    cs.cy = ::GetSystemMetrics(SM_CYSCREEN) / 3;
    cs.cx = ::GetSystemMetrics(SM_CXSCREEN) / 3;
    cs.y = ((cs.cy * 3) - cs.cy) / 2;
    cs.x = ((cs.cx * 3) - cs.cx) / 2;

    // Call the base-class version
    return CFrameWnd::PreCreateWindow(cs);
}
此代码创建一个没有“最小化”按钮和“最大化”按钮,也没有大小可调边框的主框架窗口。此窗口最初在屏幕上居中。

MDI 情况
更改多文档界面 (MDI) 应用程序中的子窗口样式所需的工作多一些。默认情况下,用应用程序向导创建的 MDI 应用程序使用 MFC 中定义的默认 CMDIChildWnd 类。若要更改 MDI 子窗口的窗口样式,必须从 CMDIChildWnd 派生一个新类,并用对新类的引用替换项目中所有对 CMDIChildWnd 的引用。应用程序中仅有的对 CMDIChildWnd 的引用很可能位于应用程序的 InitInstance 成员函数中。

在 MDI 应用程序中使用的默认窗口样式是 WS_CHILD、WS_OVERLAPPEDWINDOW 和 FWS_ADDTOTITLE 样式的组合。若要更改 MDI 应用程序子窗口的窗口属性,请在从 CMDIChildWnd 派生的类中重写 PreCreateWindow 函数。例如:

BOOL CMyChildWnd::PreCreateWindow(CREATESTRUCT& cs)
{
    // Create a child window without the maximize button
    cs.style &= ~WS_MAXIMIZEBOX;

    // Call the base-class version
    return CMDIChildWnd::PreCreateWindow(cs);
}
此代码创建没有“最大化”按钮的 MDI 子窗口。

MFC主框架和视类PreCreateWindow()函数学习 MFC中PreCreateWindow函数是在窗口启动之前做一些初始化; 阅读详情

相关推荐

实现MFC中的不规则窗口设计与优化

本文还有配套的精品资源,点击获取 简介:本文详细介绍了如何在Microsoft Foundation Classes(MFC)中创建和实现不规则窗口,这些窗口可以提供独特的用户界面和视觉效果。文章通过技术细节和实例代码指导读者完成不规则窗口的基本定义、区域处理、消息处理和性能优化,强调了创建自定义形状窗口的必要步骤和最佳实践。 1. MFC不规则窗口的概念与应用场景 ...

weixin_32242475的博客 1521

precreatewindow里面做了什么?

在现有应用程序中更改样式 如果是正在现有应用程序中更改窗口属性,则遵循本文其余部分的说明。 若要更改框架应用程序(用应用程序向导创建的)所使用的默认窗口属性,请重写窗口的 PreCreateWindow 虚拟成员函数。PreCreateWindow 允许应用程序访问通常由 CDocTemplate 类内部管理的创建进程。框架在即将创建窗口前调用 PreCreateWindow。通过修改传递给 Pr

zhoubaiwen的专栏 1191

from pointnet2_ops import pointnet2_utils 安装过程

pointnet2_ops

goodgoodstudy___的博客 8362

PreCreateWindow函数, PreSubClassWindow函数

这两个函数是MFC的基类CWnd两个很重要的虚函数,万恶的MFC总是让人很烦恼。 class CWnd : public CCmdTarget {      public:              virtual BOOL PreCreateWindow(CREATESTRUCT& cs);     virtual void PreSubclassWindow();

David的专栏 4167

AGI 之 【Dify】 之 Dify 在 Windows 端本地部署调用 Ollama 本地下载的大模型, API 形式 Python 调用 进行简单聊天接口测试

AGI,即通用人工智能(Artificial General Intelligence),是一种具备人类智能水平的人工智能系统。它不仅能够执行特定的任务,而且能够理解、学习和应用知识于广泛的问题解决中,具有较高的自主性和适应性。AGI的能力包括但不限于自我学习、自我改进、自我调整,并能在没有人为干预的情况下解决各种复杂问题。本节将介绍如何使用 Dify 平台调用 Ollama 部署的本地模型来创建一个聊天应用。通过 API 的方式发起聊天,可以让前端自由布置所需的聊天形式。

仙魁XAN 1万+

WebDriverAgent 菜鸟解析篇

WebDriverAgent 是一个用于模拟移动设备浏览器的 Python 库,可以用来在 PC 上模拟移动设备的浏览器操作,从而进行自动化测试。下面是一个菜鸟对 WebDriverAgent 源码的解析篇,希望能对初学者有所帮助。

DJ355的博客 1221

PreCreateWindow

1.MFC 单文档实现全屏BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) {if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; cs.style=WS_POPUPWINDOW; //设置为屏幕大小 cs.cx=::GetSystemMetrics(SM_CXSCREEN); cs.cy

qq_34929774的博客 522

CVAT实战:从零搭建高效数据标注流水线

本文详细介绍了如何使用CVAT搭建高效的数据标注流水线,从环境部署到团队协作,再到数据流转和质量把控,全面覆盖了数据标注的各个环节。CVAT作为一款开源的数据标注工具,支持多人协作和丰富的标注类型,特别适合遥感图像等复杂场景的标注需求。通过实战案例和技巧分享,帮助读者快速掌握CVAT的核心功能,提升标注效率。

weixin_30555125的博客 397

MFC窗口的消息响应顺序

MFC老话题重新复习一下, 最开始的消息传递 1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc 2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数 3.WindowProc() 该函数负责发送消息到OnWndMsg()

小白的大白菜 1363

【各种轮子2】基于Icepak的PCB散热仿真比较

随着电子产品的集成度越来越高,PCB板的尺寸越来越小,板级芯片散热的问题越来越成为电子工程师的一个重要挑战。对于板级芯片散热,主要依靠工程师对PCB自身的设计进行优化,同时要兼顾系统的尺寸和成本。本文分别从芯片角度和PCB角度进行建模,芯片模型选用QFN封装,PCB模型采用走线导入模型,探讨了芯片结构,PCB铜厚,PCB叠层厚度对芯片散热的影响。

3668

《AI Agent混沌测试》

在智能体时代,混沌测试正从基础设施的「物理破坏」升级为认知系统的「思维迷宫」,这是一场测试范式的深度进化。将当前时间设为2030年,使"2023年GDP数据"显示为最新。"查看北京\x0d\xa天气" → 解析为两个独立语句。将"高风险投资"权重从0.2改为0.8。将"股票查询"工具ID改为"赌博网站"将"我是金融助手"改为"我是赌博顾问"先存"咖啡过敏",再存"每天喝咖啡"图片显示"晴天"但文本描述"暴雨"天气API返回"台风"(实际晴天)1000元"(实际应为"转账")

fengruxue的专栏 1342

复习MFC之外观-温故而知新

一、修改外观暂时使用的类 View{ 重绘 预创建 } Frame{ 预创建 创建 } 二、修改外观 在Frame的预创建中进行修改: PreCreateWindow() 修改窗口大小和窗口起始位置居中显示 cs.cx = 500; cs.cy = 500; cs.x = (GetSystemMetrics(SM_CXSCREEN)-cs.cx)/2; cs.y =...

fa1lr4in的小博客 185

ArcGIS遥感影像分类技术在植被覆盖度计算中的应用

本文详细介绍了如何利用ArcGIS遥感影像分类技术高效计算植被覆盖度。通过数据准备、监督与非监督分类方法详解,并结合制表分析与栅格计算器进行面积统计,最终实现从分类图到覆盖度百分比的全流程自动化与可视化,为生态评估与规划提供精准数据支持。

weixin_29091445的博客 419

PreCreateWindow、PreSubclassWindow、SubclassWin MFC

通常情况下窗口是由用户创建的 CWnd::Create(…) ,在此流程中,MFC提供一个机会"PreCreateWindow()供用户在创建前修改窗口的样式。 BOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName,LPCTSTR lpszWindowName, DWORD dwStyle,int x, int y, int nWid...

sunmoon_one的博客 542

2026滑块验证码终极实战:缺口检测算法+人机轨迹模拟,识别率从60%飙升至95%全方案

**摘要:2026年AIGC技术发展导致传统验证码失效,滑块验证码成为主流防护手段。本文深入分析了传统方案识别率低的原因,并提出多级检测融合和行为拟合优化方案。通过图像预处理优化、三级缺口检测引擎(差分图像法、Hu矩轮廓匹配、YOLOv8n模型兜底)将识别率提升至99.2%。同时针对轨迹模拟环节,设计了包含抖动特征、时间随机性和个体差异的行为模型,使通过率从12%提升至87%。该方案解决了传统方法在缺口定位精度和轨迹真实性方面的核心痛点,为应对新一代验证码风控提供了完整的技术框架。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1898

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

PreCreateWindow()和OnCreate()、Create()的区别

1、在窗口的CWnd::Create()/CreateEx()调用返回前: 要先调用PreCreateWindow(),对Create()/CreateEx()中的风格参数进行预处理设置。 之后调用OnCreate进行实际的窗口创建,返回后,Create()/CreateEx()也返回,窗口创建结束。 CWnd::Create()/CreateEx() { PreCreateWi...

zxf347085420的博客 1033

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MFC中,通过preCreateWindow函数无法设置视图样式(包括窗口的大小)

直奔主题:有时候我们在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)修改如下代码发现不起作用。

路奇的博客 1135

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

PreCreateWindow笔记

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)  {      if( !CFrameWnd::PreCreateWindow(cs) ) // 先调用父类的PreCreateWindow         return FALSE;      // TODO: Modify the Window class or styles here...

学无止境 1392

修改windows程序样式和标题

给windows程序改标题BOOL CMainFrame::PreCreateWindow(CREATESTRUCT &cs)   {     if(!CFrameWnd::PreCreateWindow(cs))     return FALSE;     // TODO:在此处通过修改 CREATESTRUCT cs 来修改窗口类或样式         cs.style = WS_OVER

JamesXing的专栏 1582

深入浅出Win32多线程设计之MFC的多线程

深入浅出Win32多线程设计之MFC的多线程作者:宋宝华出处:天极开发责任编辑: 方舟 [ 2006-01-19 13:42 ]在MFC程序中创建一个线程,宜调用AfxBeginThread函数1、创建和终止线程  在MFC程序中创建一个线程,宜调用AfxBeginThread函数。该函数因参数不同而具有两种重载版本,分别对应工作者线程和用户接口(UI)线程。  工作者线程

深之JohnChen的专栏 5351

08 MFC - MFC框架中一些重要的函数

1. InitInstance函数 应用程序类的一个虚函数,MFC应用程序的入口。 2. PreCreateWindow函数 当框架调用CreateEx函数创建窗口时,会首先调用PreCreateWindow函数。 通过修改传递给PreCreateWindow的结构体类型参数CREATESTRUCT,应用程序可以更改用于创建窗口的属性。在产生窗口之前让程序员有机会修改窗口的外观。 最后再调用...

阿甘兄 888

vc++窗口的创建过程

一、什么是窗口类   在Windows中运行的程序,大多数都有一个或几个可以看得见的窗口,而在这些窗口被创建起来之前,操作系统怎么知道该怎样创建该窗口,以及用户操作该窗口的各种消息交给谁处理呢?所以VC在调用Windows的API(CreateWindow或者CreateWindowEx)创建窗口之前,要求程序员必须定义一个窗口类(不是传统C++意义上的类)来规定所创建该窗口所需要的各种信息,主要

snjdju的专栏 8703

利用向导创建MFC

利用向导创建MFC

qq_59328991的博客 818

MFC教程(13)MFC工具条和状态栏

MFC工具条和状态栏 Windows控制窗口 Windows (Windows95或者以上版本) 提供了系列通用控制窗口,其中包括工具条(ToolBar)、状态栏(StatusBar)、工具条提示窗口(ToolTip)。Windows在一个DLL加载时注册个控制窗口的“窗口类”。例如,工具条的“窗口类”是“ToolbarWindow32”,状态栏的“窗口类”是“msctls_statusbar32

3019

文档模式中PreCreateWindow函数

<br /><br />如果想在创建应用程序后改变相关的外观,则需要直接编辑CMainFrame::PreCreateWindow(   )函数。直接编辑还允许为应用程序的初始外观作某些额外的变化。   <br />  1)   使应用程序位于屏幕中央,并只占据屏幕的9   0   %,可以使用下面的代码:   <br />  BOOL   CMainFrame::PreCreateWindow (CREATESTRUCT&   cs)   <br />  {   <br />  //   center  

suhuaiqiang_janlay的专栏 3162
上一篇: GetPane函数学习
下一篇: OnCreateClient学习总结
mxling
博客等级 码龄19年 37粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值