文章目录
- 前言
- 一、初识MFC
- 二、初始相关API
- 附录
前言
刚开始进入Win32开发时,会发现一些变量类型似乎在C语言中未曾见过。其实这些变量类型或是与C/C++已有的数据类型相近的,是通过C语言的原始类型重新定义而成的。引入这些数据类型的主要目的是为了便于程序员开发Windows应用程序,增强程序的可读性;另一个目的是为了便于代码移植,从16位操作系统升级到32位操作系统的过程中,这些重新定义的数据类型就起了相当重要的作用。
这些重新定义的变量类型就叫做Windows数据类型,主要定义在Windef.h的系统头文件中。当包含了Windows.h或者其他任何Windows头文件,都会自动包含Windef.h.。下面列举出一些常见的Win32数据类型:
一、初识MFC
1、MFC的动态链接和静态链接:
在使用MFC应用程序向导新建工程时,选择“As a statically linked library”这个选项会编译器把MFC类库代码编译到执行文件内部;选择“As a shared DLL”使用系统内有共享的MFC动态库。前者编译出来的虽然尺寸较大,但是不需要系统提供动态库支持更加安全。在各个软件公司内一般要求使用静态链接,要求新建MFC工程时都使用静态链接方式。
2、API和MFC的关系:
API(Application Programming Interface):应用程序编程接口,是由操作系统提供给开发者的C语言格式的全局函数。第三节用到的GetDlgItemInt和SetDlgItemInt函数就是API函数,这些函数是与对象无关的C格式函数。Win32是面向API的编程平台,操作系统提供的API数量相当庞大,而且没有分类难于组织和记忆。
MFC(Microsoft Fundation Classes):微软的基础类库,这个类库分类封装了大部分Windows API,便于开发人员分类了解类库函数功能。学习过C++封装原理都知道,没有封装类的函数接口无论功能有多么强大,但是对于开发者来说都是难于使用和难于记忆的。就如同没有机箱和按钮的电视机,选台或调节音量就得到电视机主板上去找接口一样。封装类就就如同为电视机安装上机箱和按钮而且还有遥控器,选台调节音量操作都非常方便。
MFC封装的数据类型不是函数库而是类库,最常用的基本类型有字符串类(CString)、文件类(CFile)和时间类(CTime)等。用于几何空间的类有坐标点(CPoint)、空间尺寸(CSize)和矩形区域类(CRect)等,还有用来记录个群体数据的集合类,链表(CList)、动态数组(CArray)和映射类(CMap)等等。
C++成员函数尾部带const修饰,表示该函数禁止修改类对象内的数据,称作“只读成员函数”或者“常成员函数”。MFC类库中有大量此类成员函数,表示调用该成员函数时对象自身不会被改变。
二、初始相关API
代码如下(示例):
LPCSTR 中C代表 const char*
LPSTR 没有C就是char*
以前从Main函数入口现在从WinMain入口
int CALLBACK WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
);
1、弹出消息:图标和文字
int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);
2、查找主窗口:根据标题或者窗口类型 返回类型也是hwnd窗口类型
HWND WINAPI FindWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName);
auto h = FindWindow("Notepad", NULL); //类型
HWND hwnd = FindWindow(NULL, "API知识点.txt - 记事本"); //标题名
3、设置标题文字:
BOOL WINAPI SetWindowText(HWND hWnd,LPCTSTR lpString);
4、获取窗口标题文字:
int WINAPI GetWindowText(HWND hWnd,LPTSTR lpString, int nMaxCount);
5、改变窗口位置和大小:
BOOL WINAPI MoveWindow(
HWND hWnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bRepaint
);
对FindWindow、SetWindowText、GetWindowText基础应用:
#include<Windows.h>
int WinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nShowCmd
) {
auto h = FindWindow("Notepad", "API知识点.txt - 记事本");
auto x = FindWindow("Notepad", "提纲.txt - 记事本");
if (!h)
return -1;
// bool b = SetWindowText(h, "hhh");
char s[256];
int n = GetWindowText(h, s, sizeof(s));
SetWindowText(x, s);
return 0;
}
附录
什么是API(Application Programming Interface)
a)第一方接口:C语言函数库,C++类库(STL) Standard Template Library,
b)第二方接口:是操作系统提供的函数库:比如windows下是CreateThread、linux下是pthread_create
c)第三方接口:某个公司的接口,比如mysql是Oracle公司提供的mysql.h里面的所有函数。
opencv是IBM研发的图形开发库,包括识别,生成框图,计算面积等等。
点云(PCL)库包括三维形状的计算等等