// 20170809 ,毕业的生活wagnxm老师给了我三门课程的代码和课件,一直超级喜欢老师的编程风格。曾经翻看过几回,每一次都因为看不懂windows的消息模式和MFC的工作机制而放弃了,以为每一个函数都是要背下来的,MFC的代码中间过程的代码也是自己填充的。这次没有放弃,而是结合着几本不同的教材硬看了几天,终于把windows 32 位编程和MFC编程的基本原理搞明白,并且能完成一些简单的功能,总算是入门了。原理性质的内容就不在这里讲了,就是消息驱动机制。
一、一些踩过的坑。
1 - 工程设置 : 运行windows 游戏编程的代码时记得添加附加依赖项 winmm.lib
2 - playsound : 用rc的方法,定义int ,用MAKEINTRESOURCE调用,或者不用rc,直接 TEXT("filename.wav")
二、windows 编程模型
windows编程就是掌握消息驱动机制的过程。而且在《windows程序设计》和《MFC程序设计》这两本书的开头部分都着重讲了这个过程,当然MFC的编程在掌握基本的套路后,就是多多参看MSDN,VC6.0的程序在VS2017也能跑,虽说MFC没落了,但是这种兼容性还是保证了这部分学习对于编程环境的弱依赖性,在此.sln皆为2017, .dsw为VC6程序,而且尽量避免VC6的使用。
MFC的入门可以从CFile、CString、Button、EDTI 这4个入手,一共是两个类和两个控件。项目创建时选择 Dialog base,搭配C++基本的用法就能完成这些项目。当然,还可以插入控制台用于调试。要习惯查询MSDN这种开发方式。
以下是windows 开发的GitHub地址,原来的仓库被我用来实践git 命令搞得乱七八糟的,删了重新创建一个。
https://github.com/hanxinle/mfc-base
project 说明:
1.add - 演示EDIT Control 和 Button 的使用,在DoDataExchange,文本框绑定接收数据的变量,在OnButton中,j将 CString --> float,Unicode下用_tstof,非Unicode下用 atof,f_result调用Format输出结果,Format中对CString用 _T 这个宏。
2.CFile
学习使用CFile,参考MSDN的解释进行编写,开发windows程序离不开MSDN,非常可惜的是,VS2013以后,我就没有在本地见过配置好的MSDN,推荐网页版,离线情况下用VC6.0版本的吧。
3.consoleInMfc
在MFC程序中使用控制台,VS2017不支持,这是从《十年VC++老鸟》上找的程序。其实用BUTTON,EDIT Control,CString用于调试也是可行的。占用一块儿页面的位置。
4. RegEdit
查看,修改注册表的程序。把前面的知识综合运用。
5、MFC 编程中涉及的一些数据类型及解释
BOOL // TRUE | FALSE
BSTR // 32 BIT CHAR POINTER
BYTE // 8 BIT ,likes unsigned char in c
COLORREF // 32BIT DESCRIBE COLOR,USED IN GDI
DWORD // 32BIT UNSINGNED INT
LONG // 32BIT INT (+ -)
LPARAM // 32BIT ,OFFTEN USED FOR FUNCTION'S Parameters
LPCSTR // POITER TO 32BIT CONST STR
LPSTR // POITER TO 32BIT STR
LPCTSTR // POITER TO 32BIT CONST STR,Used for Unicode and DBCS
LPTSTR // POITER TO 32BIT STR,USED for Unicode and DBCS
LPVOID // POITER TO ANY TYPE
LRESULT // window process or 32bit value callback function returns
UINT // 32BIT UNSIGNED INT
WNDPROC // 32BIT POITER TO WINDOWS FUNCTION
WORD // 16BIT UNSIGNED INT
WPARAM // 32BIT VALUE IN WIN32,OFTEN AS FUNCTION'S PARAMETERS
/*ONLY IN MFC*/
POSITION // POSITION OF ELEMENT IN SET
LPCRECT // 32BIT POITER TO A CONST RECT STRUCT