day18
******************************************************************************************
GDI绘图对象
1.画笔1.画笔的作用线的颜色、线型、线粗HPEN - 画笔句柄2.画笔的使用1.创建画笔HPEN CreatePen(int         fnPenStyle,         //画笔的样式int      nWidth,             //画笔的粗细COLORREF     crColor             //画笔的颜色); 创建成功返回句柄PS_SOLID - 实心线,可以支持多个像素宽,其他线型只能支持一个像素宽PS_DASH  - 虚线,线宽只能是1,如果是其他值,则会回到上一次的画笔样式2.将画笔应用到DC中HGDIOBJ SelectObiect(HDC          hdc,        //绘图设备句柄HGDIOBJ     jgdiobj     //GDI绘图对象句柄,画笔句柄); 返回原来的GDI绘图对象句柄注意保存原来DC当中画笔3.绘图 4.取出DC中的画笔将原来的画笔,使用SelectObject函数,放入到设备DC中,就会将我们创建的画笔取出5.释放画笔BOOL DeleteObject(HGDIOBJ        hObject     //GDI绘图对象句柄,画笔句柄);只能删除不被DC使用的画笔,所以在释放前,必须将画笔从DC中取出。
2.画刷画刷相关画刷   - 封闭图形的填充颜色、图案HBRUSH - 画刷句柄画刷的使用1.创建画刷CreateSolidBrush - 创建实心画刷CreateHatchBrush - 创建纹理画刷2.将画刷应用到DC中SelectObject3.绘图4.将画刷从DC中取出SelectObject5.删除画刷DeleteObject
3.封闭图形:在微软中,三条直线围成的三角形不属于封闭图形,不能使用画刷进行填充只要是用直线围起来的,即便他是封闭的,也不叫封闭图形day19
****************************************************************************************************
位图
1.位图相关光栅图形 - 记录图像中每一点的颜色等信息矢量图形 - 记录图像算法、绘图指令等等HBITMAP  - 位图句柄
2.位图的使用1.在资源中添加位图资源2.从资源中加载位图LoadBitmap3.创建一个与当前DC相匹配的DC(内存DC)HDC CreateCompatibleDC(HDC hdc        //当前DC句柄,可以为NULL(使用屏幕DC)); 返回创建好的DC句柄4.将位图放入匹配的DC中 SelectObiect5.成像(1:1)BOOL  BitBlt(HDC   hdcDest,      //目的DCint     nXDest,       //目的左上X坐标   int   nYDest,       //目的左上Y坐标int      nWidth,       //目的宽度int     nHeight,      //目的高度HDC   hdcSrc,     //源DCint   nXSrc,       //源左上X坐标int   nYsrc,        //源左上Y坐标DWORD dwRop         //成像方法  SRCCOPY);缩放图像BOOL StretchBlt(HDC   hdcDest,         //目的DCint     nXOriginDest,     //目的左上X坐标   int   nYOriginDest,     //目的左上Y坐标int      nWidthDest,       //目的宽度int     nHeightDest,      //目的高度HDC   hdcSrc,         //源DCint   nXOriginSrc,     //源左上X坐标int   nYOriginsrc,      //源左上Y坐标int   nWidthSrc,        //源DC宽int   nHeightSrc,     //源DC高DWORD dwRop               //成像方法  SRCCOPY );6.取出位图:SelectObiect7.释放位图:DeleteObject8.释放匹配的DC:DeleteDCday20
**************************************************************************************************
1.文字的绘制1.TextOut - 将文字绘制在指定坐标位置int DrawText(HDC      hDC,       //DC句柄LPCTSTR    lpString,  //字符串int     nCount,    //字符数量LPRECT   lpRect,  //绘制文字的矩形框UINT     uFormat  //绘制的方式         );绘制的模式:DT_LEFT       --- 文字靠左DT_TOP      --- 文字靠上DT_BOTTOM    --- 文字底部显示DT_CENTER    --- 文字居中DT_VCENTER   --- 文字垂直居中DT_SINGLELINE--- 单行显示DT_WORDBREAK --- 多行显示DT_NOCLIP    --- 打破矩形限制,多行显示1.DT_VCENTER / DT_BOTTOM 只适用于 DT_SINGLELINE  2.DT_VCENTER / DT_BOTTOM 和    DT_WORDBREAK冲突2.文字颜色和背景文字颜色:SetTextColor文字背景色:SetBkColor文字背景模式:SetBkMode(OPAQUE/TRANSPARENT)   可是设置文字的背景为透明的
2.字体相关window常用的字体为TrueType格式的字体文件字体名 - 表示字体类型HFONT  - 字体句柄1.字体的使用HFONT CreateFont(int   nHeight,                //字体高度int   nWidth,                 //字体宽度int   nEscapement,            //字符串倾斜角度int    nOrientation,           //字符旋转角度int     fnWeight,               //字体的粗细DWORD    fdwItalic,              //斜体DWORD   fdwUnderline,           //字符下划线DWORD    fdwStrikeOut,           //删除线DWORD  fdwCharSet,             //字符集DWORD  fdwOutputPrecision,     //输出精度DWORD fdwClipPrecision,       //剪切精度DWORD fdwQuality,             //输出质量DWORD fdwPitchAndFamily,      //匹配字体LPCTSTR   lpszFace                //字体颜色);2.应用字体到DC   SelectObject3.绘制文字       DrawText/TextOut4.取出字体       SelectObject5.删除字体         DeleteObjectday21
**********************************************************************************************
windows内核开发
1.对话框核心简介普通窗口:自定义函数调用缺省函数WndProc(...){...DefWindowProc(...);}对话框窗口:缺省函数 调用 自定义函数 缺省函数(...){...自定义函数(...);}1.对话框的分类模式对话框     --- 当对话框显示时,会禁止其他窗口和用户交互操作无模式对话框  --- 在对话框显示后,其他窗口仍然可以和用户交互操作2.对话框基本使用1.对话框窗口处理函数2.注册窗口类3.创建对话框4.对话框的关闭3.对话框窗口处理函数(并非真正的对话框窗口处理函数)INT CALLBACK DialogProc(HWND      hwndDlg,      //窗口句柄UINT    uMsg,         //消息IDWPARAM      wParam,       //消息参数LPARAM    lParam          //消息参数);返回TRUE  -- 缺省处理函数不需要处理返回FALSE -- 交给缺省处理函数处理不需要调用缺省对话框窗口处理函数4.创建模式对话框INT DialogBox(HINSTANCE     hInstance,      //应用程序实例句柄LPCTSTR       lpTemplate,     //对话框资源IDHWND       hWndParent,     //对话框父窗口DLGPROC     lpDialogFunc    //自定义函数);DialogBox是一个阻塞函数,只有当对话框关闭后,才会返回,继续执行后续的代码。返回值通过EndDialog设置。5.对话框的关闭BOOL EndDialog(HWND      hDlg,     //关闭的对话框窗口句柄INT_PTR   nResult   //关闭的返回值);关闭模式对话框,只能使用EndDialog,不能使用DestroyWindow等函数nResult是DialogBox函数退出时的返回值为什么不能使用DestroyWindow?因为DestroyWindow只能完成EndDialog的第一个功能,即只能完成销毁对话框的功能EndDialog的两个功能:1.销毁对话框2.解除DialogBox的绑定6.对话框的消息WM_INITDIALOG - 对话框创建之后显示之前,通知对话框窗口处理函数,可以完成自己的初始化相关的操作7.无模式对话框1.创建对话框HWND CreateDialog(HINSTANCE     hInstance,      //应用程序实例句柄LPCTSTR       lpTemplate,     //对话框资源IDHWND       hWndParent,     //对话框父窗口DLGPROC     lpDialogFunc    //自定义函数);非阻塞函数,创建成功返回窗口句柄,需要使用ShowWindow函数显示对话框2.对话框的关闭关闭时使用DestroyWindow销毁窗口,不能使用EndDialog关闭对话框day22
*****************************************************************************************************
静态库
1.静态库的特点1.运行不存在 只能编译链接2.静态库源码会被连接到调用程序中3.目标程序的归档
2.相关知识1. .lib文件是源码文件2.源码文件是二进制文件3.源文件是C/C++文件4.在window平台中用C语言去调用函数的话,不需要函数的声明、头文件等等C++则需要声明和头文件等等
C语言的静态库
3.C语言静态库的创建1.创建一个静态库项目2.添加库程序,源文件使用C文件
4.C静态库的使用库路径设置:可以使用pragma关键字设置#pragma comment(lib,"../xxx.lib")尽量使用相对路径,因为程序可能放在其他的计算机上去运行如果xxx.lib放在系统目录下,则不需要使用pragma说明
C++语言的静态库
5.C++静态库的创建1.创建一个静态库项目2.添加库程序,源文件使用CPP文件
6.C++静态库的使用库路径设置:可以使用pragma关键字设置#pragma comment(lib,"../xxx.lib")
7.用C语言做静态库与C++语言做静态库没什么太大差别
8.在C++环境下调用C语言编写的函数时,为了编译换名的问题,使用extern “C”声明调用的函数day23
*****************************************************************************************
动态库
1.动态库的特点1.运行时独立存在2.源码不会连接到执行程序3.使用时加载(使用动态库必须使动态库执行)
2.与静态库的比较1.由于静态库是将代码嵌入到使用程序中的,多个程序运行时,会有多份代码,所以代码体积会增大。动态库的代码只需要存在一份,其他程序通过函数地址使用,所以代码体积小。2.静态库发生变化后,新的代码需要重新链接嵌入到执行程序中。动态库发生变化后,如果库中函数的定义(或地址)未改变,其他使用DLL的程序不需要重新链接。
3.动态库的创建1.创建动态库项目2.添加库程序    3.库程序导出 - 提供给使用者库中函数等信息1.声明导出:使用_declspec(dllexport)导出函数注意:动态库编译链接之后,也会有LIB文件,是作为动态库函数映射使用,与静态库不完全相同。2.模块定义文件 .def例如:LIBRARY DLLFunc  //库EXPORTS          //库导出表DLL_Mul  @1      //导出的函数4.链接器只能到.lib文件中抓编号和.dll文件名,不能到.dll文件中抓取
4.动态库的使用1.隐式链接(操作系统负责使动态库执行)1.头文件和函数原型可以再函数原型的声明前,增加_declspec(dllimport)2.导入动态库的LIB文件3.在程序中使用函数4.隐式链接的情况,dll文件可以存放的路径:1.与执行文件中同一个目录下2.当前工作目录3.windows目录4.windows/system32目录5.windows/system 6.环境变量PATH指定目录2.显示链接(程序员自己负责使动态库执行)1.定义函数指针类型 typedef2.加载动态库HMODULE LoadLibrary(LPCTSTR lpFileName     //动态库文件名或全路径); 返回DLL的实例句柄(HINSTANCE)3.获取函数地址FARPROC GetProcAddress()HMODULE   hModule,        //DLL句柄LPCTSTR lpProcName       //函数名称;4.使用函数5.卸载动态库BOOL FreeLibrary(HMODULE hModule            //DLL的实例句柄);
5.动态库中封装类1.在类名称前增加_declspec(dllexport)定义,例如:class _declspec(dllexport) CMath{...};2.通常使用预编译开关切换类的导入与导出,例如: #ifdef  DLLCLASS_EXPORTS #define EXT_CLASS _declspec(dllexport)  //DLL  #else#define EXT_CLASS _declspec(dllimport)  //使用者#endifclass    EXT_CLASS CMath{...};

WINDOWS编程学习笔记(四)相关推荐

  1. 【Windows编程学习笔记】1:实现学生信息管理系统的简易页面

    本学期非常幸运能和李青老师学习使用纯C/C++实现Win32的应用程序开发.开发过程中不使用MFC,而是直接调用WindowsAPI来实现应用程序编程,这样做的好处是能够理解界面程序的实现机制,对于日 ...

  2. Python计算机视觉编程学习笔记 四 照相机模型与增强现实

    照相机模型与增强现实 (一)针孔照相机模型 1.1 照相机模型 1.2 三维点的投影 1.3照相机矩阵的分解 1.4 计算照相机中心 (二)照相机标定 (三)以平面和标记物进行姿态估计 (四)增强现实 ...

  3. Windows编程学习笔记01-Windows系统概述

    Windows的体系结构 Windows体系结构是分层的模块系统,主要层次有硬件抽象层HAL.内核.执行体和大量的子系统集合.前面三个都运行在保护模式下,而各子系统都在用户模式下运行.子系统又可分为环 ...

  4. python网络编程arp_python网络编程学习笔记(四):域名系统

    一.什么是域名系统 DNS 计算机域名系统 (DNS) 是由解析器以及域名服务器组成的.当我们在上网的时候,通常输入的是网址,其实这就是一个域名,而我们计算机网络上的计算机彼此之间只能用IP地址才能相 ...

  5. Windows异常学习笔记(四)—— 编译器扩展SEH

    Windows异常学习笔记(四)-- 编译器扩展SEH 要点回顾 编译器支持的SEH 过滤表达式 实验一:理解_try_except 实验二:_try_except 嵌套 拓展SEH结构体 scope ...

  6. Windows系统调用学习笔记(四)—— 系统服务表SSDT

    Windows系统调用学习笔记(四)-- 系统服务表&SSDT 要点回顾 系统服务表 实验:分析 KiSystemService 与 KiFastCallEntry 共同代码 SSDT 实验: ...

  7. 寒江独钓windows 内核安全编程学习笔记

    寒江独钓windows 内核安全编程学习笔记 本博客记录自己的学习过程,如有侵犯或者打扰请告知. 由于项目的需求,第一次接触到驱动程序.开始学习了寒江大神的的内核安全编程.小白一个,第一章就遇到了问题 ...

  8. Windows批处理程序编程学习笔记

    Windows批处理学习笔记(基础篇) 第一章 从零开始认识批处理(what why how) 1.1 什么是Windows批处理? 批处理程序全名为 Batch file programming 是 ...

  9. WCF服务编程 学习笔记(1)

    你或许可以使用某一技术实现某些功能,可以按着指定的要求,完成特定的功能,实现某一想要的效果,这表示你可以使用该技术,会使用该技术,但是我们不能停留在使用的层次上,还要了解它们的运行机制,可能有点深了, ...

最新文章

  1. ATS 5.3.0中开启最高级别的缓存调试信息
  2. C#发送邮件异常:根据验证过程,远程证书无效
  3. 3D神经接口系统可以感知和操纵“微型脑“
  4. php 队列取并集,PHP实现对数组简单求交集,差集,并集功能示例
  5. python 示例_在Python中带有示例的while关键字
  6. 29 WM配置-策略-出库策略2-定义“紧急FIFO”策略(Stringent FIFO)
  7. iPhone XR再降价:64GB到手最低仅需4149元
  8. zabbix小结(一)zabbix概述
  9. 用户体验设计和精益设计的平衡之道
  10. Java的GUI学习二(布局)
  11. Matlab信号提取、频谱分析、滤波、阈值设定、寻找极值点
  12. 方正平台(企业级应用的开发平台)
  13. PHP+实验室安全系统 毕业设计-附源码191610
  14. 最全官方win10系统安装教程,教你如何用u盘安装win10系统?
  15. CSS3之边框图片border-image
  16. Linux命令 --- cp与scp
  17. 汇编中的test和cmp指令[Z]
  18. 篱笆(Fenced In)
  19. Transform 3.1 用户手册(SPSS 的通用数据转换程序)
  20. Apache ab性能测试结果分析

热门文章

  1. 超级浏览器适合TikTok Shop使用吗?TikTok Shop群店如何管理?
  2. 文件时间修改器,修改文件创建时间、修改时间
  3. 计算机算法相关课程,计算机算法的分类
  4. 关于pycharm报错:Fatal Python error: Py_Initialize: unable to load the file system codec的解决
  5. 自定义Camera系列之:SurfaceView + Camera
  6. JAVA中一些术语的中英文对照
  7. 一起学ORBSLAM2(7)ORBSLAM中的优化问题
  8. 巴菲特的答卷:年净利润腰斩,百亿美元“错误”,但这些重仓股收益颇丰
  9. PHP获取客户端请求IP地址
  10. mysql MGR配置keepalived