05 2019 档案
摘要:聊天室-IOCP服务器 main 创建完成端口内核对象(CreateIoCompletionPort) 获取核心数并创建线程(GetSystemInfo + CreateThread) 创建套接字并绑定接听(socket + bind + listen) 接收客户端并绑定IOCP(accept +
阅读全文
摘要:双进程守护 当打开一个进程A的时候,此进程检测是否存在进程B,如果不存在就创建进程B。 进程B的作用是检测进程A是否被关闭,如果被关闭了,就再创建一个进程A。 双进程守护A.exe代码如下: 双进程守护B.exe代码如下:
阅读全文
摘要:第三部分:内核区同步 等待函数(WaitForObject) 等待函数的形式 单个:WaitForSingleObject 多个:WaitForMultipleObjects 单个:WaitForSingleObject 多个:WaitForMultipleObjects 一个可以被等待的对象通常由
阅读全文
摘要:第二部分:用户区同步 同步和互斥 同步:就是按照一定的顺序执行不同的线程 互斥:当一个线程访问某一资源的时候,其它线程不能同时访问 同步:就是按照一定的顺序执行不同的线程 互斥:当一个线程访问某一资源的时候,其它线程不能同时访问 多线程产生的问题 产生问题的原因 原子操作(Interlocked..
阅读全文
摘要:第一部分:线程 什么是线程? 线程其实可以理解为一段正在执行中的代码,它最少由一个线程内核对象和一个栈组成。 线程之间是没有从属关系的,同一进程下的所有线程都可以访问进程内的所有内容。 主线程其实是创建进程时创建的线程,主线程一旦退出,所有子线程也会退出。 线程其实可以理解为一段正在执行中的代码,它
阅读全文
摘要:进程通信 使用 WM_COPYDATA 客户端(发送端) // 1. 找到窗口程序 HWND hWnd = FindWindow(NULL, L"Window1"); // 2. 构建一个 COPYDATASTRUCT 结构体 COPYDATASTRUCT CopyData = { 0 }; C
阅读全文
摘要:文件操作 不带句柄的文件操作 // 1. 拷贝文件,第三个参数为 FALSE 表示会覆盖 // CopyFile(L"D:\\1.txt", L"E:\\2.txt", FALSE); // 2. 移动文件,相当于改名 // MoveFile(L"D:\\1.txt", L"D:\\2.txt"
阅读全文
摘要:进程 什么是进程? 通俗的来讲,进程就是一个运行中的程序,最少包含一个虚拟空间,通常是 4 GB大小,一组提供数据和代码的模块,通产是 dll 和 exe 文件,一个进程内核对象和最少一个线程。 进程类似于一个容器,提供给线程一块空间和需要执行的操作,线程用于进行执行。 什么是模块? 提供代码和数据
阅读全文
摘要:内核对象 什么是内核对象? 内核对象本质上是一个结构体,我们不能直接的操作一个内核对象,需要通过操作系统提供的一系列函数和我们使用的内核对象句柄对它进行一系列的修改。 如何操作内核对象? 创建一个内核对象:CreateXXX(对象) 打开一个内核对象使用: OpenXXX(对象名) 通常来讲,每一个
阅读全文
摘要:选项卡控件的封装 1.新建默认MFC项目 2.添加资源Dialog,属性style改child,边框改none,添加类取名CMyDialog1; 同理,CMyDialog2; 3.类向导,添加MFC类-CTabCtrl类,取名CMyTabCtrl。 4.CMyTabCtrl类添加自定义封装函数 5.
阅读全文
摘要:使用状态栏工具栏 1.资源-添加-TOOLBAR 画图标。画了一个,第二个会出来。 2.头文件添加成员 CToolBar m_ToolBar; CStatusBar m_StatusBar; 3.初始化 4.Ctrl+Shift+X召唤类向导-消息-搜索TIMER。编辑代码 5.响应按钮
阅读全文
摘要:树控件的基本使用 1.添加控件设置变量绑定 2.添加数据
阅读全文
摘要:使用菜单列表和控件 1.添加List Control控件 2.属性设置VIEW 为REPORT 3.初始化 4.设置图片 5.设置右键弹出菜单 添加菜单资源 资源文件Dialog里面右键-添加事件处理程序-选择右键处理事件。
阅读全文
摘要:选项卡控件的使用 1.新建默认MFC文件。 2.资源-添加Dialog-添加类。(假设生成3个,Dialog1Dialog2Dialog3) 3.类向导,添加类,点小三角形,添加MFC类。添加CTabCtrl类 4.CTabCtrl 里面添加新的函数 6.默认生成的Dialog绑定变量,类型为CMy
阅读全文
摘要:组合框和图片控件 1.拖控件 图片属性更改Type 为Bitmap 名字也要改,不能为IDC_STATIC 绑定变量控件,重命名。 2.初始化 3.响应定时器跟按钮
阅读全文
摘要:编辑框和文本控件 1.拖控件 2.绑定变量。用户名密码编辑框控件类型。取名字。用户协议用值类型,默认CString。 设置属性。用户类型。选择mustiline TRUE。 AOTO HScroll FALSE.AOTO VScroll TRUE
阅读全文
摘要:定时器、滑块、进度条控件 1.拖控件 2.绑定变量。默认,然后取名字 3.初始化设置定时器 4.响应滑块消息和响应定时器消息
阅读全文
摘要:使用单选和多选框 单选 1.拖控件 设置名字,CTRL+D设置顺序,属性设置第一个GROUP为TRUE; 2.设置第一个按钮绑定变量为 值 INT型 名称m_RadioIndxe; 3.设置单击响应内容。 多选框 1.拖复选框控件 2.设置绑定变量属性。值的设置BOOL类型。控件默认类型。tri的会
阅读全文
摘要:控件子类化 如果想要在默认的控件类中添加一些功能,就需要子类化一个控件类 在类内可以响应控件所有的消息,并且可以添加自己的函数和数据 通过类向导子类化控件的步骤 打开类向导,创建一个 MFC 类,不要选错项目 创建继承自对应类的子类 可以在子类中添加新功能,想要应用必须要绑定到控件 如果想要在默认的
阅读全文
摘要:消息映射宏 有三个主要的宏 类内声明 DECLARE_MESSAGE_MAP 表示使用消息映射 在CPP文件中使用 BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 包含对应的消息映射 添加消息处理函数的几个步骤 在消息映射宏之间添加对应的消息映射 在类内对消息处理函数进行声明
阅读全文
摘要:如何创建一个MFC项目 选择 MFC 应用程序进行创建,不要使用非英文名 选择对话框风格进行编写 可以通过自定义的设置修改类名 MFC 的基本知识 MFC 是纯面向对象的编程,是 SDK 经过 C++ 封装产生 MFC 是装了 SDK 大部分的函数,简化了操作,同时保留了原函数(::) MFC 入口
阅读全文
摘要:动态库 动态链接库简称DLL,同时以.dll 为后缀,主要用于提供代码和数据 dll 并不是所有数据都能被访问到,必须要进行导出 动态链接库在内存中始终只保存了一份数据,起到了节约内存的作用 生成动态链接库的时候会附带一个 lib,这个lib叫做导入库 导入库同于提供导出函数和数据在 dll 中所处
阅读全文
摘要:按键消息的拦截 拦截是为了在原有功能的基础上增加自己的操作 扩展:当按钮接收到点击消息的时候,响应的是WM_LBUTTONDOWN消息,按钮的会被这个消息打包成一个WM_COMMAND 消息发送给父窗口,父窗口接收到之后再进行处理 关键函数 SetWindowLong \ SetClassLong
阅读全文
摘要:列表控件的使用 列表控件是通用控件,响应WM_NOTIFY 消息 主要包含了 4 种风格,我们学的是 report 风格 如何设置列表的扩展风格 LVS_EX_GRIDLINES: 列表拥有表格线 LVS_EX_FULLROWSELECT:可以进行整行选中 // 1. 设置列表的风格ListView
阅读全文
摘要:进度条和滑块 进度条和滑块属于通用控件,通用控件的使用需要加 CommCtrl.h 头文件 如何初始化进度条和滑块的数值范围和默认的位置 // 设置默认的范围值SendDlgItemMessage(hWnd, IDC_SLIDER1, TBM_SETRANGE, 0, MAKELPARAM(0, 1
阅读全文
摘要:组合框的使用 组合框的创建:有三种风格,分别 Simaple,Dropdown(可输入), 下拉列表(不可输入) 可以通过可视化编程中下拉列表的 下拉箭头 设置列表的长度 如何向组合框控件中添加数据,并且指定默认的选项 // 1. 找到组合框的句柄HWND hComboBox = GetDlgIte
阅读全文
摘要:静态控件的使用 静态控件主要区分两种使用方式:文本 \ 图片 在使用静态控件的时候,ID始终默认为 IDC_STATIC,需要进行更改 怎样通过可视化编程显示一张图片 需要添加一个位图资源 需要添加一个 Picture Control 设置图片控件的属性 动态修改图片的步骤 获取想要设置的位图的资源
阅读全文

浙公网安备 33010602011771号