热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MFC杂记备忘录

在使用MFC中经常碰到一些细小的比较有用或者需要注意的地方.在这里备忘下.1.等待光标的使用当某个操作比较耗时的话最好的方法是使用进度条.但如果是虽耗时但也不会太久,那可以让光标

在使用MFC中经常碰到一些细小的比较有用或者需要注意的地方.在这里备忘下.

 

1.等待光标的使用

当某个操作比较耗时的话最好的方法是使用进度条.但如果是虽耗时但也不会太久,那可以让光标处于等待状态.这样的目的无他,只是使用户界面友好.

BeginWaitCursor();

//Do something will take much time.

EndWaitCursor();

 

2.String Table使用

假如字符只是用来做为提示,描述信息.(像典型的例子是错误提示信息).此时把一长串字符直接放代码里一来影响布局,降低代码的可读性.另一个也不利于维护,要修改起来还得一个个的去搜索~有时相同的字符出现在多个地方更要主流同时改动.

一个比较好的方法是使用string table.用法在简单在里面添加一行,填写ID和Caption.使用的时候利于ID获取Caption里面的内容

CString strTitle;

strTitle.LoadString( ID_TITLE);

如果软件产品支持多语言设置,String Table的作用就更加明显了啊.

 

3.ASSERT使用

c++的指针用起来非常灵活,但经常碰到的情况是由于存在bug,在一些地方指针为空,结果执行到那里就crash了,这样找起来也比较麻烦.如果用个ASSERT断言下,就可以直接定位到出错的地方.ASSERT只在Debug模式下执行,是为了方便调试代码而出现的机制.当然了除了常用来断言空指针,还可以断言其他一些条件是否满足.

ASSERT( m_pData);

此时如果m_pData为空,也就是ASSERT中为FALSE就会有一个断言错误.

 

4.释放内存时指针赋NULL值

当我们通过new动态分配内存,然后释放时通过delete释放.但是delete只是告诉操作系统标志这块内存失效.原来指向这块内存的指针的值仍然不为空,当使用该指针时就会出现未定义的错误.所以比较好的方式为delete后同时把指针赋值为NULL.

CMyData* pData;

pData = new CMyData;

//do some operation

delete pData;

pData = NULL;

 

5.对话框初始化

一个类的成员的初始化我们一般是放在构造函数中.而对话框CDialog的很多页面相关的初始化一般放到virtual BOOL OnInitDialog();函数中

OnInitDialog在调用DoModal创建模式对话框或调用Create创建无模式对话框时被调用.

动态Create CWnd的初始化操作一般放到virtual BOOL OnCreate(LPCREATESTRUCT lpCreateStruct);

 

6.RECT

我们指定一个控件的位置时经常用到结构体RECT.

看着那4个变量经常容易搞混.其实想下数学中在一个平面坐标上确定一个矩形只需要定义对角的两个点的坐标就可以了.

在这里指定控件位置也只需要控件左上方的点和右下方的点即可.这是习惯用法,实际上用右上角和左下角的点同样可以确定.

 

typedef struct tagRECT { LONG left;LONG top;LONG right;LONG bottom;
} RECT;

left :Specifies the x-coordinate of the upper-left corner of a rectangle.

top :Specifies the y-coordinate of the upper-left corner of a rectangle.

right :Specifies the x-coordinate of the lower-right corner of a rectangle.

bottom :Specifies the y-coordinate of the lower-right corner of a rectangle.

7.计算按钮上字的长度

假如button上要动态的显示不同的字,而且可能draw不同字体和大小的字上去.此时怎么去调整button的大小呢.那首先自然要知道字的长度.

int GetStringWidth(CString strInfo){

if(strInfo.IsEmpty())

return0;

CDC* pDC = GetDC();

pDC->SelectObject(GetFont());

returnpDC->GetTextExtent(strInfo).cx;

}


推荐阅读
  • 在尝试对 QQmlPropertyMap 类进行测试驱动开发时,发现其派生类中无法正常调用槽函数或 Q_INVOKABLE 方法。这可能是由于 QQmlPropertyMap 的内部实现机制导致的,需要进一步研究以找到解决方案。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 深入解析Android 4.4中的Fence机制及其应用
    在Android 4.4中,Fence机制是处理缓冲区交换和同步问题的关键技术。该机制广泛应用于生产者-消费者模式中,确保了不同组件之间高效、安全的数据传输。通过深入解析Fence机制的工作原理和应用场景,本文探讨了其在系统性能优化和资源管理中的重要作用。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • QT框架中事件循环机制及事件分发类详解
    在QT框架中,QCoreApplication类作为事件循环的核心组件,为应用程序提供了基础的事件处理机制。该类继承自QObject,负责管理和调度各种事件,确保程序能够响应用户操作和其他系统事件。通过事件循环,QCoreApplication实现了高效的事件分发和处理,使得应用程序能够保持流畅的运行状态。此外,QCoreApplication还提供了多种方法和信号槽机制,方便开发者进行事件的定制和扩展。 ... [详细]
  • 开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤
    开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤 ... [详细]
  • Delphi XE Rtti单元深入解析:TRttiContext的应用与实践
    Delphi XE Rtti单元深入解析:TRttiContext的应用与实践 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • 本文详细介绍了定时器输入捕捉技术的原理及其应用。通过配置定时器通道的引脚模式为输入模式,并设置相应的捕获触发条件,可以实现对外部信号的精确捕捉。该技术在实时控制系统中具有广泛的应用,如电机控制、频率测量等场景。文中还提供了具体的配置步骤和示例代码,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文深入解析了 jQuery 中用于扩展功能的三个关键方法:`$.extend()`、`$.fn` 和 `$.fn.extend()`。其中,`$.extend()` 用于扩展 jQuery 对象本身,而 `$.fn.extend()` 则用于扩展 jQuery 的原型对象,使自定义方法能够作为 jQuery 实例的方法使用。通过这些方法,开发者可以轻松地创建和集成自定义插件,增强 jQuery 的功能。文章详细介绍了每个方法的用法、参数及实际应用场景,帮助读者更好地理解和运用这些强大的工具。 ... [详细]
  • 使用Maven JAR插件将单个或多个文件及其依赖项合并为一个可引用的JAR包
    本文介绍了如何利用Maven中的maven-assembly-plugin插件将单个或多个Java文件及其依赖项打包成一个可引用的JAR文件。首先,需要创建一个新的Maven项目,并将待打包的Java文件复制到该项目中。通过配置maven-assembly-plugin,可以实现将所有文件及其依赖项合并为一个独立的JAR包,方便在其他项目中引用和使用。此外,该方法还支持自定义装配描述符,以满足不同场景下的需求。 ... [详细]
author-avatar
宋雨甄_938
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有