初识MFC第一天

文章目录

  • 前言
  • 一、初识MFC
  • 二、初始相关API
  • 附录


前言

刚开始进入Win32开发时,会发现一些变量类型似乎在C语言中未曾见过。其实这些变量类型或是与C/C++已有的数据类型相近的,是通过C语言的原始类型重新定义而成的。引入这些数据类型的主要目的是为了便于程序员开发Windows应用程序,增强程序的可读性;另一个目的是为了便于代码移植,从16位操作系统升级到32位操作系统的过程中,这些重新定义的数据类型就起了相当重要的作用。
这些重新定义的变量类型就叫做Windows数据类型,主要定义在Windef.h的系统头文件中。当包含了Windows.h或者其他任何Windows头文件,都会自动包含Windef.h.。下面列举出一些常见的Win32数据类型:
初识MFC第一天_第1张图片
初识MFC第一天_第2张图片
初识MFC第一天_第3张图片


一、初识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
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)库包括三维形状的计算等等

你可能感兴趣的:(MFC开发,mfc,microsoft,c++)