分类 C-lang articles

简单的GDI操作

简单的GDI操作 窗口程序的本质 :GUI GDI GDI: Graphics Device Interface,图形设备接口,这是Windows提供的一组用于绘制图像的API GUI: Graphical User Interface,图形用户界面,是指用户操作软件的界面方式,以区别于字符方式 说白了 GDI是一套实打实的接口,真实存在 GUI只是一个概念 GDI 图像设备接口(……

Continue reading

消息机制与模拟消息

消息机制与模拟消息 消息机制 硬件产生事件 被操作系统捕获,封装成消息 操作系统发送到系统消息队列 再由操作系统由系统消息队列发送到 对应的线程内核对象中的线程消息队列 线程消息队列处理完毕后,将时间送回操作系统 由操作系统调用窗口回调函数 => WindowProc() 线程消息队列 处理 GetMessage() => 取出消息 DispathMessage() => 把消息再送回系统中系……

Continue reading

新建一个窗口程序

新建一个窗口程序 消息机制 创建窗口的几个步骤 创建窗口类 注册窗口类 创建窗口 显示窗口 构建消息循环 创建过程 demo : https://github.com/luodaoyi/cpp_code/tree/master/MemoryInjectTool/CreateWindows //1 创建窗口类型模板 WNDCLASS wndclass = { 0 }; wndclass.lpszClassName = className; //名字 wndclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND; //背景画笔句柄 wndclass.hInstance = hInstance; //窗口过程的实例句柄 wndclass.lpfnWndProc = WndProc; //窗口过程函数 //2 注册窗口 RegisterClass(&wndclass); //3 创建窗口 HWND hwindows = CreateWindow(className, TEXT("MYWINDOWS"), WS_OVERLAPPEDWINDOW, 500, 300, 300, 250, NULL, NULL, hInstance,NULL); //创建窗口……

Continue reading

文件系统

文件系统 什么是文件系统 文件系统是操作系统用于管理磁盘上文件的方法和数据结构,简单说就是在磁盘上如何组织文件的方法,是软件层面的东西 windows上有哪几种文件系统 类型 NTFS FAT32 磁盘分区容量 2T 512MB – 2TB (早先只有32GB) 单个文件容量 4GB以上 最大4GB EFS加密 Y N 磁盘配额 Y N 如何操作文件……

Continue reading

静态链接库

静态链接库 如何创建静态链接库 vs新建项目,选择静态链接库 在项目文件中新建 .cpp 文件与.h 文件 项目编译生成后会产生一个 .lib文件 如何使用静态链接库 将生成的.h与.lib文件复制到项目根目录 直接添加.lib与.h到项目中 在项目代码中添加头文件引用 #include “xxx.h” #pragma comment(lib,“xxx.lib”) 静态链接库的生成 lib的生成和我……

Continue reading

进程的遍历、获取与销毁

进程的遍历、获取与销毁 创建快照遍历 //获得进程所使用的堆,模块和线程的信息快照 HANDLE WINAPI CreateToolhelp32Snapshot ( DWORD dwFlags,//标志位 DWORD th32ProcessID //进程ID ) //dwFlags: 指定的快照中,指定需要拍的系统部分 TH32CS_INHERIT 声明快照句柄是可继承的。 TH32CS_SNAPALL 在快照中包含系统中所有的 进程和线程。 TH32CS_SNAPHEAPLIST 在快照中包含ID所指定的进程的所有的堆。 TH32CS_SNAPMODULE 在快……

Continue reading

C语言23 终极篇 预处理之宏定义、条件编译和文件包含

什么是预处理 预处理一般是指在程序源代码被转换为二进制代码之前,由预处理器对程序源代码文本进行处理,处理后的结果再由编译器进一步编译。 预处理功能主要包括宏定义,文件包含,条件编译三部分 宏定义 简单宏: #define 标识符 字符序列 #define FALSE 0 #define NAME "LUODAOYI" #define __IN #define __OUT //极端例子 #define NAME "LUODAOYI" #define A int method() { #define B char buffer[0x10]; #define C strcpy(buffer,NAME); #define D return……

Continue reading

C语言22 调用约定和函数指针

函数调用约定 就是告诉编译器:怎么传递参数,怎么传递返回值,怎么平衡堆栈 int method(int x,int y) { return x+y; } //调用 method(1,2); 常见的几种调用约定: 调用约定 参数压栈顺序 平衡堆栈 __cdecl 从右至左入栈 调用者清理栈 __stdcall 从右至左入栈 自身清理堆栈 __fastcall ECX/EDX 传送前两个,剩下:从右至左入栈 自身清理堆栈 int __stdcall method(int x,int y) { return x+y; } //调用 method(1,2); //观察反……

Continue reading

C语言21 指针数组与数组指针

指针数组的定义 char arr[10]; //10 char char* arr[10]; //10 指针(char*) Point* arr[10]; //10 指针(Point*) int******** arr[10]; 指针数组的赋值 char* a = "Hello"; char* b = "World"; //方式1: char* arr[2]= {a,b}; //方式2: char* arr[2]; arr[0]=a; arr[1]=b; 结构体指针数组 struct Point { int x; int y; } Point p; //8字节 一个结构体 Point arr[10]; //8字节 * 10 结构体数组 Point* arrPoint[10]; //4字节 * 10 结构体指针数组 分析下面的代码 int arr[] = {1,2,3,4,5,6,7,8,9,0};……

Continue reading

C语言20 结构体指针

探测结构体指针的特性 struct Point { int x; int y; } ++、– 加法与减法 指针相减 使用结构体指针 //创建结构体 Point p; p.x=10; p.y=20; //声明结构体指针 Point* ps; //为结构体指针赋值 ps = &p; //通过指针读取数据 printf("%d \n",ps->x); //通过指针修改数据 ps->y=100; printf("%d\n",ps=>y); 结构体指针一定要指向结构体吗? struct Point { int x; int y; } int arr[10]={1,2,3,4,5,6,7,8,9,10} Point* p = (Point*)arr; for(int i = 0;i < 5;i++,p++) { printf("%d %d\n",p->x,p->y); }……

Continue reading