随笔分类 - DNC++视频教程笔记
学习DN的C++时做的笔记
摘要:一 MFC的发展VC 1.0->VC 5.0->VC 6.0->VC2008 SP1)->VS2010二 MFC基础1 MFC 微软基础类库 采用类的方式,将Win32 API等进行封装,形成的库. 2 MFC相关的头文件 afx.h (application framework, X) afxwin.h (类似于windows.h) afxext.h (MFC扩展头文件) ...三 MFC应用程序MFC应用程序主要分为以下三类,对比通常的应用程序,变化的地方如下:1 MFC的控制台程序1.1 包含afx系列的头文件1.2 CWinApp theApp - MFC的应用
阅读全文
摘要:一.信号量(同步)1.回顾:一个进程控制另外一个进程.逻辑变量+pause/sleep+信号2.信号量(semaphore)信号灯三个数据:红灯/绿灯/黄灯60 90 10信号量是共享内存整数数组.根据需要定义指定的数组长度信号量就是根据数组中的值,决定阻塞还是解除阻塞3.编程3.1.创建或者得到信号量semget3.2.初始化信号量中指定下标的值semctl3.3.根据信号量阻塞或者解除阻塞semop3.4.删除信号量semctl案例:A:B创建信号量 得到信号量初始化信号量根据信号量阻塞解除阻塞删除信号量semget函数说明int semget(key_t key, int ...
阅读全文
摘要:一.基于文件的通信1.普通文件(io/mmap)2.有名管道文件3.匿名管道4.Socket二.基于内存的通信0.一组内核内存的工具ipcs ipcs -mipcs -qipcs -sipcrm -q 编号ID1.普通的父子进程之间的匿名内存共享映射2.内核共享内存编程模型2.1.创建共享内存,得到一个ID shmget2.2.把ID影射成虚拟地址(挂载) shmat2.3.使用虚拟地址访问内核共享内存 使用任何内存函数与运算符号2.4.卸载虚拟地址 shmdt2.5.删除共享内存 shctl(修改/获取共享内存的属性) 共享内存的属性案例:A.创建共享内存,并且修改内存数据。1.创建共享内存
阅读全文
摘要:回顾:1.信号的作用2.理解信号:软中断可靠与不可靠信号kill -l3.信号发送与注册kill/raise alarm setitimer signal4.信号的屏蔽sigprocmasksigemptyset sigfillset ...5.信号屏蔽的切换sigpendingsigsuspend=pause+ 指定屏蔽信号pause与sigsuspend都回被信号中断.中断的是pause与sigsuspen,不是进程中其他代码sigsuspend放在sigprocmask环境中思考:5.1.sigsuspend是否影响sigprocmask屏蔽的信号呢?影响.使原来的屏蔽信号全部失效.当s
阅读全文
摘要:问题解答:1.exit(状态码)返回状态码有什么意义?返回值被系统得到.系统根据状态码进行日志记录.返回值被调用者得到:system/wait.程序会根据返回状态码进行对应处理。exit(状态码)=main函数中的return 状态码;2.状态码的第二个字节才是exit()的返回值或者return值。一.进程的基本控制1.进程的常见控制函数1.1.为什么需要控制进程?1.2.pause/sleep/usleep1.3.atexit on_exitView Code #include <stdio.h>#include <stdlib.h> void fun(){ pri
阅读全文
摘要:一.IO与文件目录管理1.pread=lseek+readpread读取以后不改变读写位置2.mmap映射:/proc/${pid}/mem 无法映射3.IO的有效用户与实际用户默认情况:实际用户与有效用户一致。实际用户:执行用户有效用户:权限用户uid_t getuid()uid_t geteuid()View Code #include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>main(){ int fd
阅读全文
摘要:一.IO与文件映射1.IO的共享与效率read与write其中数据缓冲的大小读取数据的缓冲大小:getpagesize。2.定位与定位读取(随机读取)read与write在操作的时候,自动移动读取位置.lseek改变读取位置.pread/pwrite在指定位置读写。2.1.lseek的函数说明: off_t lseek( int fd,//定位文件描述符号 off_t off,//定位位置 int whence//定位参照点:文件开始位置/文件结束...
阅读全文
摘要:一、make与makefile1.回顾:目标的语法目标名:依赖目标@命令@命令make的命令行使用make -f make脚本文件 目标名2.目标的划分目标依赖3.默认规则:a.不指定目标,执行第一个目标b.不指定make文件,默认文件是makefile Makefilemakefile优先4.目标的调用规则:(make把目标当作文件)make执行目标:搜索与目标相同的文件如果文件存在,则判定日期。日期最新,则停止执行,输出提示日期不是最新,则进行执行。比较:当前目标与依赖目标5.建议:只要有文件输出,就把任务作为一个目标,并且把输出的文件作为目标名。6.潜规则(不建议).c目标与.o目标。查
阅读全文
摘要:一 线程局部存储 Thread Local Storage 1 由于多个线程使用同一个变量,各个线程 都对变量进行操作,那么变量的值会被不同 线程操作覆盖。 通常 变量A <-- 线程A <-- 线程B TLS 变量A <-- 线程A 变量A <-- 线程B 2 TLS的使用 2.1 使用关键字 __declspec(thread) __declspec(thread) CHAR * g_pszText2 = NULL; 2.2 TLS相关API 2.2.1 创建TLS索引 DWORD TlsAlloc(VOID) 返回一个TLS索引号 2.2.2 设置值 BOOL T
阅读全文
摘要:一 Windows进程1 Windows进程 进程是一个容器,包含了一个应用程序实例的各种资源。Windows多任务的操作系统,因此可以同时执行多个进程。 2 Windows进程的一些特点 2.1 进程中包含了执行代码等资源。 2.2 进程都具有私有的地址空间。 2.3 每个进程都有一个ID,标识进程。 2.4 每个进程都有自己的安全属性 2.5 至少要包含一个可以执行的线程。 二 进程的环境 1 环境信息的获取 获取: LPVOID GetEnvironmentStrings(VOID) 返回值是获取到的所有环境信息 释放: BOOL FreeEnvironmentStrings( ...
阅读全文
摘要:Windows的内存管理一 地址空间 1 地址空间 一个程序最大的寻址范围。对于Win32操作系统最大的寻址范围是2的32次方,0-0xFFFFFFFF。这个寻址范围由CPU决定。CPU的寻址范围越大,编程难度降低。 2 地址空间的划分 通常情况下: 2.1 用户空间 地址范围 0 - 0x7FFFFFFF(2G),运行应用程序代码、数据等等。 2.2.1 空指针区(NULL区) 地址范围 0 - 0x0000FFFF 2.2.2 用户区 地址范围 0x00010000 - 0x7FFEFFFF 2.2.3 64K禁入区 地址范围 0x7FFEFFFF - 0x7FFFFFFF 2.2 ...
阅读全文
摘要:一 Windows卷(Volumn) 1 卷的获取 GetLogicalDrives 返回一个DWORD值,这个值的每个位代表是否存在相应的卷 GetLogicalDriveStrings 获取一个所有卷的盘符的字符串 DWORD GetLogicalDriveStrings( DWORD nBufferLength,//BUFF的大小 LPTSTR lpBuffer );//BUFF的指针 BUFF存放数据的格式: A:\ + 0 + C:\ + 0 ... + 0 Windows的盘符从A-Z 2 卷的类型 UINT GetDrive...
阅读全文
摘要:一 Windows的库 由于项目的复杂程度,或者为了提高代码的重用率等等,所以才引入了库程序。 库包含两种: 1 静态库:扩展名为LIB的文件,是不能被加载的程序,可以理解为目标程序的归档。 2 动态库:扩展名是DLL的文件,是可以被应用程序加载的程序。 二 静态库 1 静态库的特点 1.1 目标程序的归档 1.2 静态库的代码会被嵌入到程序当中。 1.3 程序执行时不需要静态库存在 2 C语言静态库 2.1 创建静态库 创建Win32静态库项目,使用*.C文件建立项目。 在Setting里将library选项卡下的output路径改为 ../lib/*.lib 2.2 添加静态库函数View
阅读全文
摘要:一 组合框 ComboBox 1 组合框的样式 1.1 简单组合框 CBS_SIMPLE 1.2 下拉式组合框 CBS_DROPDOWN 能输入或者从下拉列表中选择 1.3 下拉列表式组合框 CBS_DROPDOWNLIST 只能从下拉列表中选择 2 组合框的使用 2.1 组合框的创建 窗口类名称是 COMBOBOX, 使用CreateWindow创建, 创建时要注意窗口高度(弹出的列表). 2.2 增加选项 CB_ADDSTRING/CB_INSERTSTRING CB_ADDSTRING: WPARAM为0不使用, LPARAM是添加字符串的地址 2.3 删除选项 CB_DELET...
阅读全文
摘要:一 对话框 1 对话框的分类 2 对话框的基本使用方式 3 对话框资源 4 有模式对话框的使用 5 无模式对话框的使用 5.1 添加对话框资源 5.2 定义窗口处理函数 BOOL CALLBACK DialogProc( HWND hwndDlg, // handle to dialog box UINT uMsg, // message WPARAM wParam, // first message parameter LPARAM lParam ); // second message parameter 5.3 创建对话框 HWND CreateDi...
阅读全文
摘要:一 Windows绘图 1 图形绘制 1.1 图形绘制的方式 获取到绘图句柄-设备描述表(DC),使用相应的绘图的API,在设备上绘制图形. 1.2 颜色 R\G\B三色, 每种颜色8位, 共24位颜色. 32位颜色: 颜色数量24位颜色, 多出来的8位表示灰度. 16位: 颜色数量2的16次方. Win32下,颜色的定义 COLORREF(DWORD), RGB宏定义颜色 COLORREF nColor = RGB( 0, 0, 0 ); COLORREF nColor = RGB( 255,255,255 ); COLORREF nColor = RGB( 255,0, 0 ); 从...
阅读全文
摘要:一 系统菜单 1 执行系统提供的窗口命令,例如最大化、关闭等命令。本质上和普通菜单一样,所以我们也可以在程序中使用这个菜单 2 系统菜单的使用 2.1 获取系统菜单 GetSystemMenu HMENU GetSystemMenu( HWND hWnd, //要获取的窗口句柄 BOOL bRevert //获取时重置标示 ); bRevert: TRUE 重置 FLASE 不重置 当Revert为TRUE时,会将菜单重新置成默认的状态,并返回菜单句柄。如果为FALSE,菜单项不重置,获取到当前系统菜单的状态。 2.2 修改系统菜单,例如增加、删除 2.2.1 AppednMen...
阅读全文
摘要:一 鼠标消息 1 鼠标消息 1) 基本鼠标消息 WM_LBUTTONDOWN 左键按下 WM_LBUTTONUP 左键抬起 WM_RBUTTONDOWN 右键按下 WM_RBUTTONUP 右键抬起 WM_MOUSEMOVE 鼠标移动 2) 双击消息 WM_LBUTTONDBLCLK 左键双击 WM_RBUTTONDBLCLK 右键双击 3) 滚轮消息 WM_MOUSEWHEEL 鼠标滚轮 2 消息的参数 WPARAM - 当前键盘和鼠标按键状态,例如MK_CONTROL/MK_SHIFT,MK_LBUTTON等 LPARAM - 当前鼠标的坐标,坐标的原点是窗口客户区的左上角. X坐标 -.
阅读全文
摘要:一 Win32消息机制 1 消息机制 过程驱动:程序是按照我们预先定义好的顺序执行,每执行一步,下一步都已经按照预定的顺序继续执行,直到程序结束。 事件驱动:程序的执行顺序是无序的。某个时间点所执行的代码,是由外界通知。由于我们无法决定用户执行顺序,所以代码的执行也是无序。 Win32的消息机制 - 事件驱动 2 Win32消息程序 2.1 Win32窗口注册 2.2 Win32窗口创建 2.3 WIn32消息循环 2.3.1 GetMessage BOOL GetMessage( LPMSG lpMsg,//存放获取到的消息数据 HWND hWnd,//获取消息...
阅读全文
摘要:一 窗口注册和创建 1 Win32窗口程序创建步骤 1.1 WinMain入口函数的定义 1.2 WindowProc函数的定义 1.3 注册窗口类 RegisterClass/RegisterClassEx 1.4 创建窗口 CreateWindow/CreateWindowEx 1.5 窗口的显示和刷新 ShowWindow/UpdateWindow 1.6 消息处理 GetMessage/DispatchMessage 1.7 窗口退出 WM_DESTROY/PostQuitMessage 2 窗口的注册 2.1 窗口类的分类 2.1.1 系统全局的窗口类.比如按钮("BUTT
阅读全文