你看的是什么破书。乱说一气
BeginPaint() EndPaint()
GetDC() ReleaseDC()
是得到/释放设备描述表的句柄
GetDC 是得到整个客户区的HDC而其对应的释放设备描述表句柄的函数是ReleaseDC()
GetDC 你可以用在“任何”时候而
BeginPaint() 一般用于消息WM_PAINT并且它得到一个区域(需要被重画的区域)
用BeginPaint()得到HDC一般要用EndPaint()来释放。
你要使一个区域无效你可以用:
InvalidateRect(HWND,RECT,BOOL)(好象就是他了)
BeginPaint() EndPaint()
GetDC() ReleaseDC()
是得到/释放设备描述表的句柄
GetDC 是得到整个客户区的HDC而其对应的释放设备描述表句柄的函数是ReleaseDC()
GetDC 你可以用在“任何”时候而
BeginPaint() 一般用于消息WM_PAINT并且它得到一个区域(需要被重画的区域)
用BeginPaint()得到HDC一般要用EndPaint()来释放。
你要使一个区域无效你可以用:
InvalidateRect(HWND,RECT,BOOL)(好象就是他了)
你可以用CDC成员函数或同名的Win32API:SetBoundsRect,GetBoundsRect,GetClipBox,SelectClipRgn,ExcludeClipRect,ExcludeUpdateRgn,IntersectClipRect,OffsetClipRgn,PtVisible,RectVisible 来获取或操纵剪切区域。(具体看MSDN)
BeginPaint/EndPaint主要用于重画客户区域,维持窗口当前外观。
当使用BeginPaint()取得DC时,该函数将之前由于调用InvalidateRect()或由于系统原因无效的区域(比如一个重叠窗口被移走)相累积,计算出剪切区域并将此剪切区域赋给dc,这样用此DC作图,仅仅无效区域被重画,因此可以避免大量重复而无意义的作图工作。这样特别在需要大量作图的应用中可以显著提高效率。
当时用EndPaint()结束作图时,函数将设置所有的客户区区域为有效,以避免重复刷新无效区域,并且ReleaseDC.
其实,BeginPaint/EndPaint内部也调用了GetDC/ReleaseDC.
而GetDC()只是单纯的取得客户区DC,这时获得的DC剪切区域默认为整个客户区域。用GetDC/ReleaseDC的优点是可以不管该区域是否有效而强制绘制此区域,用于需要改变窗口外观的情况下,比如动画,浮动按钮。但由于是强制性的,每一步作图都需要在屏幕上绘制,所以最好用于小范围作图。
一点经验,见笑了。
on_click()
{
bFlag = true;
}
on_paint()
{
if (bFlag)
{
// 画一个方框
}
else
{
// 花一个园
}
}那么, 你按下按钮以后, 窗口不会有任何变化
你用另外一个窗口挡住一部分, 然后你会发现仅仅是刚才被挡住的部分有了一个园
而不是显示全部
谢谢
而getdc是在取得客户区的大小或默认的客户区来进行一些与图形有关的操作,
一般说来,如果你进行的图形操作是在产生wm_paint消息中进行的,并且用默认的客户区的大小,他们俩都可以用。
你好,好久不见,我现在在深圳工作。
你的问题很简单,不过你看的书就太......
建议你还是买本《Windows程序设计》来看吧,作者是Charles Petzold。
这是Windows编程的圣经(不是我说的)。
可以去掉(合并?)多余的WM_PAINT消息.
你说的是什么意思?
nice to see you !