
深入探索Visual C++ MFC编程技巧与方法

### Visual C++ MFC编程方法笔记知识点
#### 窗口/描画
- **非模态对话框的生成方法**:与模态对话框相比,非模态对话框允许用户在不关闭对话框的情况下与父窗口交互。在MFC中,通常通过调用`Create`函数而不是`DoModal`来创建非模态对话框。
- **对话栏的实现方法**:对话栏是一种浮动在其他窗口之上的特殊类型对话框,常用于实现工具栏功能。在MFC中,对话栏是通过资源编辑器创建并关联一个类来实现的。
- **矩形区域定位**:MFC中对矩形区域进行定位通常涉及到`CRect`类,它用于表示和操作矩形区域的位置和大小。
- **SetWindowExt与SetViewportExt**:这两个函数用于设置设备上下文的窗口扩展和视口扩展,它们影响GDI绘图时的比例转换。
- **SetWindowOrg与SetViewportOrg**:这两个函数用于设置设备上下文的窗口原点和视口原点,它们影响绘图时的起始坐标位置。
- **椭圆形窗口**:在MFC中创建椭圆形窗口需要使用区域(`CRgn`)类,并通过创建一个椭圆形状的区域来裁剪窗口,以实现椭圆形窗口的效果。
- **为控件显示工具提示信息**:通过为控件添加`TTN_GETDISPINFO`通知消息处理函数来显示工具提示信息。
- **对话框的背景色与背景图**:可以通过处理`WM_CTLCOLOR`消息来改变对话框的背景色或使用背景画刷绘制背景图。
- **Splash窗口**:启动窗口,显示应用程序的名称、版本或版权信息等。在MFC中,可以通过创建一个模态对话框实现Splash窗口,并在程序初始化后显示。
- **防止描画时画面闪烁**:双缓冲技术是常用的减少或防止画面闪烁的方法。在MFC中可以使用内存设备上下文(`CMemDC`)来实现双缓冲。
- **表现颜色(VC++)**:MFC中颜色的表现通常通过`COLORREF`类型表示,或者使用`CBrush`类来创建颜色画刷进行绘图。
#### 打印
- **使用打印机**:在MFC中,可以通过`CPrintInfo`类和`CPrintDialog`类来进行打印机设置以及管理打印任务。
- **打印坐标纸**:实现打印坐标纸效果,可以使用`CDC`类的`MoveTo`和`LineTo`函数来绘制坐标网格。
#### 程序控制
- **资源文件国际化**:涉及到多语言支持,需要为不同语言创建资源文件,并在程序运行时根据用户语言环境选择相应的资源。
- **直接从DLL调用函数**:MFC支持使用`AfxLoadLibrary`和`AfxFreeLibrary`函数来加载和卸载DLL,以及使用`GetProcAddress`来获取函数地址进行调用。
- **防止应用程序重复起动**:在程序的入口点`WinMain`中通过检查系统中是否已存在同名的互斥体或窗口句柄来实现。
- **CException类的派生与使用**:在MFC中,可以派生自`CException`来创建自定义异常类,并通过`AfxThrow`函数抛出异常。
- **实现VB的DoEvents函数**:在MFC中,可以使用消息泵(`PeekMessage`函数)模拟VB中的`DoEvents`函数,允许应用程序处理其他消息。
- **用CWinThread派生类创建带有窗口的线程**:通过继承`CWinThread`类并重写`InitInstance`和`ExitInstance`方法来创建和管理具有用户界面的后台线程。
#### 数据交换
- **使用剪贴板(VC++)**:MFC中剪贴板的使用涉及到`OpenClipboard`、`EmptyClipboard`、`SetClipboardData`和`CloseClipboard`等函数来管理剪贴板数据。
#### 通讯与网络
- **串行通信(简易版)**:实现串行通信需要配置串口参数并使用`ReadFile`和`WriteFile`函数进行数据读写。
- **命名管道通讯(简易版)**:MFC提供了`CNamedPipe`类来创建命名管道通信,允许不同进程间进行双向数据交换。
#### 部品/控件
- **文件选择框CFileDialog的个性化**:可以通过重载`DoModal`函数,自定义对话框界面和行为。
- **列举可以使用的字模名**:使用`EnumFontFamilies`函数可以获取系统支持的字体信息。
- **自描画按钮**:通过处理`BN_PAINT`通知消息来自定义按钮的绘制过程。
- **自描画列表框**:处理`WM_DRAWITEM`消息来自定义列表框中每个项目的绘制方式。
- **自描画下拉组合框**:通过处理`CBN DRAWITEM`通知消息来自定义下拉组合框的绘制。
- **自描画列表控件与列表VIEW**:通过`NM CUSTOMDRAW`通知消息实现对列表控件(`CListCtrl`)或列表视图(`CListView`)的自定义绘制。
- **在MFC中实现平面滚动条**:可以通过创建一个自定义的滚动条控件并处理相关消息来自定义滚动条行为。
- **菜单的自描画**:通过处理`WM_MENUCHAR`和`WM_MEASUREITEM`消息来自定义菜单项的绘制。
#### 算法
- **坐标旋转**:涉及到2D图形变换,使用数学公式进行坐标点的旋转计算。
- **快速傅氏变换**(FFT):将信号从时域转换到频域的算法,通常用于信号处理。
- **拉格朗日插值法**和**牛顿插值法**:两种不同的数学插值方法,用于预测未知数据点。
- **计算圆周率**:利用算法近似计算圆周率值。
- **河内塔(动画)**:递归算法的一个例子,用于解决经典的数学问题。
- **递归曲线**:例如C-曲线,利用递归方法绘制复杂图形。
- **描画曼德布洛特集合**:分形图形的一种,用于展示数学上的混沌理论。
#### 文件/目录操作
- **文件查找,文件属性**:利用`FindFirstFile`、`FindNextFile`、`GetFileAttributes`等函数进行文件系统操作。
- **文件的复制,移动,删除,更名**:使用`CopyFile`、`MoveFile`、`DeleteFile`、`SetFileAttributes`等API实现文件的基本操作。
- **遍历文件目录**:通过递归遍历目录树来枚举文件和子目录。
- **文件目录操作**:包括创建、打开、关闭、删除目录等操作,主要通过`CreateDirectory`、`RemoveDirectory`、`SetCurrentDirectory`等API函数完成。
相关推荐



















apple0280
- 粉丝: 0
最新资源
- GitHub映射提示:内容哈希至仓库提交一键绑定
- CSCop开源软件:半条命反恐精英服务器团队消灭控制
- MEAN架构演示项目实战:SPA与实时交互实现
- 开源远程望远镜控制工具Device Control Device
- Eclipse下vizix-kafka-connect-rabbitmq项目配置教程
- TechMasters Slack Group官方网站:技术交流与协作平台
- 提升DevOps安全性:OWASP DevSecOps成熟度模型解析
- 探索JavaScript技术的深度应用与优化
- Firebase一对一Web推送通知完全指南
- 开源Magic:The Gathering集换式卡牌管理工具
- GitIssues:通过命令行利用GitHub API管理Issues的Python工具
- 掌握前端构建流程:引导Domotica项目指南
- 疯狂八人版开源纸牌游戏Punish下载指南
- 2018 NACOSS职业工作坊:探索Haskell与职业发展
- Fr8协议智能合约v0.0.1:物流连接系统的标准
- Python西班牙协会网站:静态内容生成与本地开发指南
- ubidiscordbot.github.io: 探索JavaScript驱动的Discord机器人开发
- Hyperchess:四维国际象棋游戏引擎的JavaScript实现
- 打造现代化Python后台管理 django_oa:集成xadmin和django-ueditor
- Linux与GIT教程:从基础到高级应用
- Xipe开源软件:宏基因组学统计分析利器
- 智能门票:基于以太坊的去中心化活动售票平台
- Bangumi用户脚本:GitHub发布与管理指南
- 如何在Nuxt.js中轻松集成Google reCAPTCHA