一个、使用位图

1 位图 - 由图像上的各点的颜色被保存,生成对应的位图文件

栅格 - 保存图像可以理解为晶格

矢量图 - 能够理解为画图命令的保存

2 位图的使用

2.1 载入位图

LoadBitmap

2.2 创建放置位图的DC

CreateCompatibleDC

2.3 将位图放入创建的DC中

SelectObject

2.4 绘制位图到当前DC中

BitBlt

StretchBlt 能够实现图像的缩放。可是缩放的效果不好

2.5 取出位图

SelectObject

2.6 删除创建的DC

DeleteDC

2.7 删除位图

DeleteObject

2.8 获取位图信息

  1. int GetObject(
  2. HGDIOBJ hgdiobj, // handle to graphics object GDI对象句柄 这里就是HBITMAP
  3. int cbBuffer, // size of buffer for object information 位图信息的BUFF的大小
  4. LPVOID lpvObject // buffer for object information 位图信息的BUFF指针
  5. );
  1. 位图的BUFF结构为BITMAP结构

二 坐标系和映射模式

1 坐标系

1.1 设备坐标系

设备坐标系以像素为单位。x正方向从左往右,y正方向从上往下

屏幕坐标系 - 以屏幕的左上角为(0,0)点

窗体坐标系 -  以窗体最外边框的左上角为(0,0 )点

客户区坐标系 - 以窗体内的客户区的左上角为(0, 0) 点

1.2 逻辑坐标系

以逻辑单位定义的坐标系。

画图过程中使用的坐标基本是以逻辑坐标系绘制 默认情况下和设备坐标系保持一致,

可是能够改动

2 映射模式

逻辑坐标系和设备坐标系之间的映射关系

2.1 映射模式的种类

MM_TEXT - 默认的映射方式,逻辑坐标系和设备坐标系一致

MM_LOMETRIC - 0.1MM  X 方向一致 Y方向相反

MM_HIMETRIC  -  0.01MM    X 方向一致 Y方向相反

MM_LOENGLISH - 0.1inX     方向一致 Y方向相反

MM_HIENGLISH - 0.01inX     方向一致 Y方向相反

MM_TWIPS - 1/1400in 方向一致 Y方向相反

MM_ANISOTROPIC  -  能够指定逻辑单位 XY方向能够指定          X轴单位能够不等于 Y轴单位

MM_ISOTROPIC       - 能够指定逻辑单位  XY的方向也能够指定。 X轴单位 = Y轴单位

3  映射模式的使用

3.1 设置映射模式

  1. int SetMapMode(
  2. HDC hdc, // handle to device context 映射的句柄
  3. int fnMapMode // new mapping mode 新的映射方式
  4. ); //返回旧的映射模式

3.2 画图

3.3 回复旧映射模式

  1. int SetMapMode(
  2. HDC hdc, // handle to device context
  3. int fnMapMode // new mapping mode
  4. );

3.4 MM_ISOTROPIC

须要自己设计X/Y轴的正方向以及逻辑单位和设备单位的比例

设备坐标  像素

  1. BOOL SetWindowExtEx(
  2. HDC hdc, // handle to device context
  3. int nXExtent, // new horizontal window extent
  4. int nYExtent, // new vertical window extent
  5. LPSIZE lpSize // original window extent
  6. );

逻辑坐标

  1. BOOL SetViewportExtEx(
  2. HDC hdc, // handle to device context
  3. int nXExtent, // new horizontal viewport extent
  4. int nYExtent, // new vertical viewport extent
  5. LPSIZE lpSize // original viewport extent
  6. );

通过加入正负号设置Y轴方向

2.3 坐标系的原点

2.3.1 窗体坐标系 - 逻辑坐标系

视口坐标系 - 设备坐标系

2.3.2 窗体坐标系和视口坐标系原点重合

SetViewPortOrgEx  设备坐标系原点相应逻辑坐标系的位置

SetWindowOrgEx  逻辑坐标系原点相应设备坐标系的位置

三 文字和字体

1 文字的绘制

1.1 TextOut

1.2 DrawText

  1. int DrawText(
  2. HDC hDC, // handle to DC
  3. LPCTSTR lpString, // text to draw
  4. int nCount, // text length
  5. LPRECT lpRect, // formatting dimensions
  6. UINT uFormat // text-drawing options
  7. );

1.3 ExtTextOut

对于汉字字符。因为一个字符占2个字节,所以汉字字符之间的间距应该为0

1.4 字符绘制的相关属性

SetTextColor 设置字符的颜色

SetBkColor 设置背景色

SetBkMode 绘制的方式

2 字体

2.1 创建字体

  1. HFONT CreateFont(
  2. int nHeight, // height of font 字体的逻辑高
  3. int nWidth, // average character width 字体的逻辑宽
  4. int nEscapement, // angle of escapement 字符倾斜度
  5. int nOrientation, // base-line orientation angle 字符的旋转
  6. int fnWeight, // font weight 加粗
  7. DWORD fdwItalic, // italic attribute option 斜体
  8. DWORD fdwUnderline, // underline attribute option 下划线
  9. DWORD fdwStrikeOut, // strikeout attribute option 中划线
  10. DWORD fdwCharSet, // character set identifier 字符集
  11. DWORD fdwOutputPrecision, // output precision 输出精度
  12. DWORD fdwClipPrecision, // clipping precision 剪切
  13. DWORD fdwQuality, // output quality 输出质量
  14. DWORD fdwPitchAndFamily, // pitch and family
  15. LPCTSTR lpszFace // typeface name 字体名称
  16. );

2.2 设置字体

SlectObject

2.3 画图

2.4 取出字体

SelectObject

2.5 删除字体

DeleteObject

四、对话框

1 对话框的分类

无模式对话框 - 对话框显示后。不影响其它窗体的使用

有模式对话框 - 对话框显示后,会将其它的窗体禁止输入

2 对话框的基本使用方式

2.1 对话框的窗体处理函数

2.2 注冊窗体

2.3 创建对话框

2.4 关闭对话框

3 对话框资源

4 有模式对话框的使用

4.1 加入对话框资源

4.2 定义对话框窗体处理函数

  1. INT_PTR CALLBACK DialogProc(
  2. HWND hwndDlg, // handle to dialog box
  3. UINT uMsg, // message
  4. WPARAM wParam, // first message parameter
  5. LPARAM lParam // second message parameter
  6. );

4.3 创建对话框

  1. INT_PTR DialogBox(
  2. HINSTANCE hInstance, // handle to module
  3. LPCTSTR lpTemplate, // dialog box template
  4. HWND hWndParent, // handle to owner window
  5. DLGPROC lpDialogFunc // dialog box procedure
  6. );

4.4 关闭对话框

  1. BOOL EndDialog(
  2. HWND hDlg, // handle to dialog box
  3. INT_PTR nResult // value to return
  4. );

返回值就是nResult

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Win32 Windows计划 十一年的更多相关文章

  1. 利用开源的TaskScheduler组件实现监控和管理windows计划任务

    对于计划任务的执行有很多种解决方案,如利用开源Quartz作业调度框架,在SQL Server的作业等等,同时Windows的任务计划程序功能也很强大,利用此可以很方便的实现很多计划任务,除了人工进行 ...

  2. 如何在windows计划中调用备份sharepoint2010网站集的powershell脚本

    最近有个项目需要在在windows计划中使用powershell脚本备份sharepoint2010网站集,打开sharepoint的powershell执行命令管理界面的属性 查看: C:\Wind ...

  3. Windows计划任务执行时不显示窗口的问题

    最近开发了工具,带界面的,需要定时执行的,为了方便直接用Windows计划任务做定时了.跑了一段时间发现,进程中也有,就是看不到程序的界面,进程的执行貌似也阻塞了. 从网上查了下,发现时启动方式的问题 ...

  4. windows计划任务执行SQLserver脚本

    2016年3月1号,北京出差,documentbrowser系统改善上线. 其中有一个数据库表需要每天进行同步,原计划使用SQLServer的作业来执行又方便又快捷,但是客户的数据库是05的expre ...

  5. 不需要密码的windows计划任务设置

    使用windows计划任务定时做些事情,确实非常方便,但创建任务时老是需要设置密码,否则在执行任务时会报80070005的系统错误导致任务无法执行. 有时windows没设密码或当账户修改密码就必须修 ...

  6. windows 计划任务执行python脚本

    1.  查找并打开Windows计划任务 2. 创建任务 3. 输入名称 4. 通过触发器设置运行时间或周期 5. 通过操作,设置运行的脚本 a. 操作选择'启动程序' b. 程序或脚本选择 pyth ...

  7. 用windows计划任务执行一些内容的写法,

    用windows计划任务执行一些内容的写法, 以下示例: 1.创建ws对象 2.关闭java进程 3.执行bat文件 start.vbe文件内容 set ws=wscript.createobject ...

  8. VBS调用OUTLOOK发送邮件,windows计划任务定时拉起VBS调用OUTLOOK发送邮件

    OUTLOOK有延迟传递功能,可延迟传递的发送邮件在功能设计时(mircosoft的support帮助页的解释)就是邮件发送时的时间而不是邮件发送成功后的时间.比如早上10点发一封11点后的延迟传递邮 ...

  9. Windows系统使用vbs脚本或bat脚本强制杀死指定所有进程 vbs实现循环持续写入内容到vbs打开开的记事本 使用vbs、bat添加windows计划任务 使用cmd schtasks命令添加windows计划任务

    以下脚本windows7下成功运行过,脚本也可以windows计划任务程序一起组合使用 新建一个记事本文档粘贴下面代码后将新建的记事本文档重命名下面对应的脚本名就能使用了: 添加windows计划任务 ...

随机推荐

  1. c#.net公共帮助类

    c#.net公共帮助类 比较全面的c#帮助类 比较全面的c#帮助类,日常工作收集,包括前面几家公司用到的,各式各样的几乎都能找到,所有功能性代码都是独立的类,类与类之间没有联系,可以单独引用至项目,分 ...

  2. [array] leetCode-26. Remove Duplicates from Sorted Array - Easy

    26. Remove Duplicates from Sorted Array - Easy descrition Given a sorted array, remove the duplicate ...

  3. 利用VS安装项目打包软件的做法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 昨天摸索了一下,发现使用VS安装项目来打包软件还是挺方便的. 1. 创建一个安装项目工程,如下图: 2. 设置工程属性 ...

  4. POJ2739_Sum of Consecutive Prime Numbers【筛法求素数】【枚举】

    Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19350 Ac ...

  5. js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可)

    js进阶ajax的XMLHttpRequest对象的status和statustext属性(如果ajax和php联合使用的话:open连接服务器的第二个参数文件路径改成请求php的url即可) 一.总 ...

  6. [Now] Deploy a Node project with Zeit’s Now

    Use Zeit’s now to deploy a node application from your local machine to a remote cloud service in mom ...

  7. 提高编程能力的7条建议 分类: T_TALENT 2014-04-12 10:41 294人阅读 评论(0) 收藏

    编程是非常酷的一件事情,但是在酷炫的背后它对很多人来说还是挺难的.很多人在学习编程之初就被困难击败了. 当你不熟悉编程的时候,你可能会觉得无从下手,并且不知道如何运用学到的知识.只要你通过了这一困难的 ...

  8. Xcode6 模拟器路径

    Xcode6公布后,出现了非常多的变动,功能性的变动,在这里不进行过多的赘述,在WWDC上苹果已经进行了讲述,网上也有非常多文章,这里要介绍的是一些不太easy发现的,但非常重要的小地方.      ...

  9. Linux下使用Python的Tkinter库出现的No module named _tkinter问题

    这是由于python的版本没有包含tkinter的模块,只需要把tk的package安装就可以了. 一般在linux才出现,windows版本一般已经包含了tkinter模块.

  10. .Net Core Socket 压力测试

    原文:.Net Core Socket 压力测试 .Net Core Socket 压力测试 想起之前同事说go lang写的push service单机可以到达80万连接,于是就想测试下.Net C ...