文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发C/C++Windows API-GDI入门基础知识详解(1)
精品推荐
特别推荐
·C语言编程易犯毛病集合
·C语言编程常见问题解答(目录)
·C#程序开发中的常用函数汇总
·C/C++笔试、面试题目大汇总
·Beej的网络socket编程指南
·socket编程原理
·C语言的常用库函数使用方法分析及用途
·在C语言中如何处理时间和日期
·C++设计模式之Singleton
·VC++动态链接库编程之MFC扩展 DLL
热点TOP10
·进程和线程编程
·C语言编程易犯毛病集合
·打字游戏
·Awk 基础入门:Awk 实例编程
·asp.net中调用javascript函数实现多功能日期控件示例
·C语言编程常见问题解答之常用函数的包含文件(1)
·C# GridView 排序及分页
·C #中的几个线程同步对象方法
·无废话C#设计模式之三:Abstract Factory
·C# DataGridView隔行显示不同的颜色

Windows API-GDI入门基础知识详解(1)

日期:2008年5月12日 作者: 查看:[大字体 中字体 小字体]


  BOOL        fErase; //擦除状态
  RECT        rcPaint; //无效矩形座标
  BOOL        fRestore;
  BOOL        fIncUpdate;
  BYTE        rgbReserved[32];
}
PAINTSTRUCT, *PPAINTSTRUCT, *NPPAINTSTRUCT, *LPPAINTSTRUCT;

  事实上当程序调用BeginPaint函数的时候,Windows会自动的填写此结构的各个属性,而程序作者只需要关心前三个属性。

  第一个属性hdc表示当前的设备描述表句柄。

  第二个属性fErase来说,多数情况下它是被标记成FALSE(0)的,这表示Windows已经擦除了无效矩形的背景,这个擦除动作是是在BeginPaint函数中发生的,而擦除背景用的画刷则是WNDCLASS结构中的hbrBackground属性指定的画刷来擦除背景的,在很多情况下可能程序作者想自己定义一些插除行为,那么可以通过响应消息队列中的WM_ERASEBKGND消息来完成。

  第三个属性rcPaint则表示无效矩形座标,它定义了无效矩形的边界。

  RECT结构可以在WinDef.h头文件中找到。

  定义如下:

typedef struct tagRECT
{
LONG    left;
LONG    top;
LONG    right;
LONG    bottom;
} RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT;

  注意,我们在前面提到了InvalidateRect函数,并已经清楚了调用它可以让窗口显示区域内的矩形变为无效,那么我们就可以在处理WM_PAINT消息的时候通过调用它实现在无效矩形外绘图,该调用是在调用BegingPaint函数之前调用的。

  使用方法:

InvalidateRect(hwnd,NULL,TRUE);

  通过上面代码的调用我们让整个显示区域变为了无效,并擦除背景,要注意的是,最后一个参数如果为FALSE,则不擦除背景,原有的东西将保留在原处,这通常是在接受到WM_PAINT消息的时候而不考虑rcPaint属性的情况下简单的重绘整个显示区域最方便的方法,例如,在显示区域内我们输出了一个图形,这个图形的一小部分落在了无效矩形区域内,而这就让绘制这个图形的无效部分变的没有意义,这时就需要重绘整个图形,因为在调用BeginPaint函数传回设备描述表句柄的时候,Windows不会绘制rcPaint也就是无效矩形以外的任何部分。

  对于InvalidateRect函数的详细举例,我们将在以后的章节中看到。


 更多内容请看Linux基础知识  Solaris基础知识入门  Windows操作系统安全集专题,或

2. 使用GetDC和ReleaseDC函数

   
   
  在很多情况下我们可能需要在接收到非WM_PAINT消息的时候获取设备描述表句柄,通过调用GetDC函数我们可以获得设备描述表句柄,因为程序作者可能要使用设备描述表句柄完成其它工作,例如获得设备描述表属性,或者修改设备描述表属性值等,在最后我们与第一种方法一样要释放句柄,通过调用ReleaseDC函数完成工作。

  他们的函数原型为:

HDC GetDC(
  HWND hWnd    // handle to window
);
int ReleaseDC(
        HWND hWnd,  // handle to window
        HDC hDC      // handle to DC
);

  两种方法的区别:

  <1> 使用BeginPaint函数获得的的操作区域是显示区域中的无效矩形区域,接下来绘图操作只能在窗口的无效区域范围内进行,无效区域以外的区域将被忽略不能进行操作,而GetDC函数获得的操作区域则是整个窗口的显示区域,之后的操作可以在任何部分进行,而不只限制在无效区域。

  <2> BeginPaint函数会自动把无效区域变成有效的区域,而GetDC函数则不会将任何无效区域变得有效,必须强行调用ValidateRect函数,并把第二个参数设置为NULL来完成。

  最后我们给出一个可执行程序的例子,当应用程序执行的时候会有一个对话框出现,当你拉动这个对话框的时候又会出现同样的另一个对话框,这就证明了窗口的覆盖会造成无效矩形的出现,系统将会发送WM_PAINT消息。

  未完待续……



上一页 [1] [2] [3] 下一页 




上一篇:Windows API-GDI入门基础知识详解(2)

下一篇:用 c 写 CGI 程序简要指南

相关文章:
·最详细的黑客入门法则
·Windows Vista震撼1600X1200高清壁纸
·Windows系统漏洞修复软件大比拼
·从零开始学黑客:网络黑客新手入门指南
·鲜为人知的Windows XP优化
·如何让Windows桌面图标任我排
·CorelDRAW13文字排版详解
·Flash AS基础精典教程
·注册表已经损坏并导致WindowsXP无法启动,应该如何恢复
·Windows XP的20个超级实用技巧大全
相关软件:
·SQL Server 2000 基础系列课程视频
·Windows主题70合一典藏版
·孙鑫VC++从入门到精通开发详解视频教程FLASH版
·Photoshop 入门教程
·CorelDraw12 入门与实例(图文教程 菜鸟先飞系列教材)
·ASP入门教程
·如何加固Windows XP 主机安全
·AutoCAD2002入门与实例详解
·Flash MX 从入门到精通
·TCP-IP详解卷1:协议

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot