`
yuanjinxiu
  • 浏览: 660040 次
文章分类
社区版块
存档分类
最新评论

Windows API一日一练(16)BeginPaint和EndPaint函数

 
阅读更多
当人们使用软件时,大多数是想看到自己所需要的结果,比如玩RPG游戏,就是想看到自己所操作的主角做各种各样的事情。在2DRPG游戏里,其实做的事情,就是不断地更新画面,也就是不断地显示BMP的图片。在普通的程序里,大多也是显示各种文本和图片的,但是有一种类型的应用程序是不怎么显示结果的,那就是服务程序。不管怎么样,只要我们想看到程序所执行后的结果,就需要在程序里显示出来。也就是需要调用BeginPaintEndPaint函数。BeginPaint函数的作用是告诉Windows系统,要开始向显示卡输出内容了,把这次显示的操作请求放到系统显示队列里。由于系统上的显示卡往往只有一个,那么这种资源是独占的,所以操作系统会让显示操作线性化,保证每个窗口的显示是独立进行的,而不是A窗口显示一部份,或者B窗口显示一部份,而是A窗口显示完成后再让B窗口显示。因此,BeginPaint函数就是跟操作系统说,我需要显示了,你安排好吧。当BeginPaint返回时,就获取到系统的显示资源句柄,这样就可以调GDI一大堆函数来操作了。显示完成后,一定要记得调用函数EndPaint,因为使用BeginPaint函数请求了独占的显示资源后,如果不释放回去,就会让其它程序永远获取不到显示资源了,这样系统就死锁了。如果你有空仔细地查看一下Windows源程序,就会发现BeginPaint函数和EndPaint函数怎样构成的。比如在调用BeginPaint函数时先把光标隐藏起来,接着再显示用户显示的东西,最后调用EndPaint函数后,又把隐藏的光标显示出来。
函数BeginPaint函数和EndPaint函数声明如下:
WINUSERAPI
HDC
WINAPI
BeginPaint(
__in HWND hWnd,
__out LPPAINTSTRUCT lpPaint);
WINUSERAPI
BOOL
WINAPI
EndPaint(
__in HWND hWnd,
__in CONST PAINTSTRUCT *lpPaint);
hWnd是窗口句柄。
lpPaint是获取显示参数。它的结构定义如下:
typedef struct tagPAINTSTRUCT {
HDChdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTE rgbReserved[32];
} PAINTSTRUCT, *PPAINTSTRUCT;
hdc是获取设备句柄。
fErase是否擦新背景。
rcPaint是显示的窗口大小。
fRestorefIncUpdatergbReserved是保留使用的参数。
BeginPaint函数的返回值也是显示设备的句柄。
调用这个函数的例子如下:
#001//
#002//目的:处理主窗口的消息.
#003//
#004//蔡军生2007/07/12 QQ:9073204
#005//
#006LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
#007{
#008int wmId, wmEvent;
#009PAINTSTRUCT ps;
#010HDC hdc;
#011
#012switch (message)
#013{
#014case WM_COMMAND:
#015 wmId = LOWORD(wParam);
#016 wmEvent = HIWORD(wParam);
#017 // 菜单选项命令响应:
#018 switch (wmId)
#019 {
#020 case IDM_ABOUT:
#021 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
#022 break;
#023 case IDM_EXIT:
#024 DestroyWindow(hWnd);
#025 break;
#026 default:
#027 return DefWindowProc(hWnd, message, wParam, lParam);
#028 }
#029 break;
#030case WM_PAINT:
#031 hdc = BeginPaint(hWnd, &ps);
#032 //
#033 EndPaint(hWnd, &ps);
#034 break;
#035case WM_DESTROY:
#036 PostQuitMessage(0);
#037 break;
#038default:
#039 return DefWindowProc(hWnd, message, wParam, lParam);
#040}
#041return 0;
#042}
31行调用函数BeginPaint
33行调用函数EndPaint
分享到:
评论

相关推荐

    Windows API一日一练TXT版

    Windows API 一日一练(16)BeginPaint 和 EndPaint 函数 -------------------------------34 Windows API 一日一练(17)DialogBox 和 DialogBoxParam 函数------------------36 Windows API 一日一练(18)EndDialog ...

    BeginPaint和GetDC的用法

    BeginPaint和GetDC的用法区别

    duilib半透明异形窗口_修改WM_PAINT

    UpdateLayeredWindow(...)这个函数是有限制的. 1.当前窗口样式必须是WS_EX_LAYERED,不能是WS_CHILD. 2.所有的WS_CHILD样式的...4.BeginPaint与EndPaint的使用 有问题可到 http://www.yutent.com/article-68.html 留言.

    易语言api绘制文本

    api绘制文本,窗口主程序,窗口回调函数,GetModuleHandle,GetCommandLine,LoadIcon,LoadCursor,RegisterClassEx,CreateWindowEx,ShowWindow,UpdateWindow,BeginPaint,GetClientRect,DrawText,EndPaint,GetMessage,...

    易语言菜单栏写字

    易语言菜单栏写字源码,菜单栏写字,proc,drawText,API_CallWindowProc,API_SetWindowLong,API_SendMessage,API_BeginPaint,API_EndPaint,API_DrawText,API_GetDC,API_GetWindowRect,API_DefWindowProc,API_...

    易语言菜单栏上加按钮

    易语言菜单栏上加按钮源码,菜单栏上加按钮,proc,drawButton,API_CallWindowProc,API_SetWindowLong,API_SendMessage,API_BeginPaint,API_EndPaint,API_DrawText,API_GetDC,API_GetWindowRect,API_DefWindowProc,API_...

    易语言GDI画CPU动态线

    GDI画CPU动态线,GetBitmapHandleFromResource,子类化子程序,创建网格,时钟周期,绘画,创建时钟,销毁时钟,置时钟周期,API_SetTimer,API_KillTimer,SetWindowLongA,CallWindowProcA,BeginPaint,EndPaint,GetDC,...

    易语言窗口自绘效果

    易语言窗口自绘效果源码,窗口自绘效果,NewProc,画窗体背景,背景边缘柔化,子程序_获取任务栏高度,是否在矩形,SetWindowLongA,CallWindowProcA,GetWindowTextA,BeginPaint,EndPaint,GetDC,GetWindowRect,...

    易语言图片倒影

    易语言图片倒影源码,图片倒影,加载图像,画渐变图像,更新到场景,Create,GetMdc,Delete,API_BitBlt,API_GetDC,API_SetWindowLong,API_CallWindowProc,API_SetTimer,API_GetWindowRect,API_BeginPaint,API_EndPaint,API...

    易语言动态圆效果

    动态圆效果,WndProc,AddCircle,DrawCircle,EraseBkg,ShowClock,DrawBkg,GetDC,CreateCompatibleDC,CreateCompatibleBitmap,SelectObject,DeleteObject,BitBlt,SetWindowLong,CallWindowProc,BeginPaint,EndPaint

    易语言取单元格坐标

    易语言取单元格坐标源码,取单元格坐标,子程序1_垂直滚动,子程序1_平行滚动,GetWindowRect,GetClientRect,ScreenToClient,SetWindowLongA,CallWindowProcA,SendMessageA,BeginPaint,EndPaint,DeleteDC,GetScrollInfo

    易语言自绘按钮默认风格

    易语言自绘按钮默认风格源码,自绘按钮默认风格,画按钮背景,OpenThemeData,CloseThemeData,DrawThemeBackground,DrawFrameControl,SetWindowLong,CallWindowProc,BeginPaint,EndPaint,FillRect,GetSysColorBrush,...

    易语言真彩工具条模块例程源码,易语言闪电自绘真彩工具条模块源

    闪电自绘真彩工具条模块,工具条按钮被单击,取低16位,取高16位,MyWinProc,置被单击事件,刷新显示,创建,添加工具条按钮,全部重画,On_MouseMove,On_LBBOTTONUP,SetWindowLong,BeginPaint,EndPaint,CallWindowProc,...

    易语言-API实现动态窗口类

    动态窗口类,源码是易语言API的应用教程。 调用了以下API: PlaySound BeginPaint GetClientRect DrawText EndPaint PostQuitMessage DefWindowProc LoadIcon LoadCursor GetStockObject RegisterClass CreateWindow...

    Python使用Windows API创建窗口示例【基于win32gui模块】

    本文实例讲述了Python使用Windows API创建窗口。分享给大家供大家参考,具体如下: 一、代码 # -*- coding:utf-8 -*- #! python3 import win32gui from win32con import * def WndProc(hwnd,msg,wParam,lParam): ...

    易语言彗星窗口水印模块

    易语言彗星窗口水印模块源码,彗星窗口水印模块,WatermarkProc,WatermarkOnShow,MoveWatermark,创建,销毁,是否已创建,置水印位置,置文本,置文本颜色,置背景颜色,置字体名称,置字体大小...BeginPaint,EndPaint,RGB到ARGB,

    易语言仿迅雷7特效

    易语言仿迅雷7特效源码,仿迅雷7特效,单击,单击2,改变,改变2,窗口消息处理,GDI绘制,RGB到ARGB,回调窗口消息,CreateRectRgn,RoundRect,CreateRoundRectRgn,Dll设定窗口区域,置窗口...发送窗口消息,BeginPaint,EndPaint

    易语言GDI绘曲线图

    易语言GDI绘曲线图源码,GDI绘曲线图,画框架,加入数值,消息处理,还原原来数值,取设备场景_,释放设备场景_,BeginPaint,EndPaint,选入设备场景_,DeleteObject,SetWindowLongA,创建设备位图_,复制场景位图_,创建内存场景...

    易语言滑块条皮肤

    易语言滑块条皮肤源码,滑块条皮肤,滑块条_换肤,滑块条_消息处理,子_画滑块条,滑块条_画按钮,取图片尺寸_,功能_取前景画出宽,取滑块条矩形,公_取图片目录,公_取矩形,取滑块钮风格...BeginPaint,EndPaint,GetWindowLong

Global site tag (gtag.js) - Google Analytics