windows平台窗口程序。typedef:为一个类型起新名字。windows开发把C语言类型进行了重定义
什么是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)库包括三维形状的计算等等
为什么windows重新定义了大量类型?
有历史原因,早期windows是在16位操作系统下,int类型是16位2个字节。
windows95进入windows32位,int变成了32位4个字节。
#ifdef _WIN32
typedef int INT;
#else
typedef short INT;
#endif
如果宏 _WIN32 已经定义(通常在 Windows 环境下会定义该宏),则将 INT 定义为 int 类型。
如果宏 _WIN32 未定义(例如在非 Windows 环境下),则将 INT 定义为 short 类型。
非常量的引用必须为左值 这句话如何理解?
# include <Windows.h>
# include <iostream>
using namespace std;
void Test ( const int & n)
{
int nContents = 0x0000000f & n;
int nBehavior = 0x000000f0 & n;
switch ( nContents)
{
case 0x01 :
cout << "捕获成功" << endl;
}
}
int CALLBACK WinMain (
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
int n = MessageBox (
NULL ,
"hello windows" ,
"温馨提示:" ,
MB_OKCANCEL | MB_ICONWARNING
) ;
Test ( MB_OKCANCEL | MB_ICONWARNING) ;
return 0 ;
}
名为 HWND
的结构体指针类型别名。在 Windows 下,句柄(Handle)是用于标识和引用系统资源的一种特殊数据类型。它通常是一个整数值或一个指针,用于表示不同类型的对象,如窗口、图标、菜单、光标
宏定义是一种在C语言中用来定义宏的预处理指令。宏是一种在代码中进行文本替换的机制,可以通过宏来定义常量、函数或代码片段的缩写形式。#表示这是一条预处理命令,所有的预处理命令都以 # 开头。
HWND hWnd = FindWindow(NULL, "API汇总.txt - Notepad");//捕捉当前活跃窗口。HWND 是一个抽象的句柄类型,具体的句柄值和内部结构由操作系统维护和管理,开发者无需关心其具体实现细节,只需使用句柄来引用和操作窗口即可。
int n = MessageBox(
//_In_opt_标志物,输入型参数
hWnd,
"hello windows",//LPCSTR LPSTR
"温馨提示:",
MB_OKCANCEL | MB_ICONWARNING
);
//DECLARE_HANDLE(HWND) 是一个宏调用,将 HWND 作为参数传递给了宏
DECLARE_HANDLE (HWND);
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
//struct name##__{int unused;};:宏展开后的第一行代码,生成一个以 name 为名称的结构体类型,其中包含一个未使用的整型成员。name##__ 是使用预处理器连接运算符 ## 连接 name 参数的值和 __,以形成唯一的结构体名称。
struct HWND__ {int unused;}; typedef struct HWND__ *HWND;
# 运算符用于在预处理期将宏参数转换为字符串 # 的转换作用是在预处理期完成的(编译器不知道),因此只在宏定义中有效
// 25-1.c
#include<stdio.h>
#define STRING(x) #x
int main()
{
printf("%s\n", STRING(hello world!));
printf("%s\n", STRING(100));
printf("%s\n", STRING(while));
printf("%s\n", STRING(return));
return 0;
}
#define CALL(f, p)(printf("Call function %s\n", #f), f(p))
result = CALL(square, 4);
result = (printf("Call function %s\n", "square"), square(4))//定义的宏是个逗号表达式,返回值等于最后一个表达式的值,利用 # 操作符将函数名转换为字符串,再调用这个函数,计算结果。
// 25-3.c
#include<stdio.h>
#define NAME(n) name##n
int main()
{
int NAME(1);
int NAME(2);
NAME(1) = 1;
NAME(2) = 2;
printf("%d\n", NAME(1));
printf("%d\n", NAME(2));
return 0;
}
# 1 "25-3.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 31 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 32 "<command-line>" 2
# 1 "25-3.c"
int main()
{
int name1;
int name2;
name1 = 1;
name2 = 2;
printf("%d\n", name1);
printf("%d\n", name2);
return 0;
}