jjzjj

BeginPaint

全部标签

winapi: GetUpdateRect() with bRepaint TRUE in WM_PAINT 不清除绘画区域,但 InvalidateRect() 在 WM_PAINT 之外?

我的自定义绘图区的WM_PAINT看起来像这样://TRUEtoclearthebackgroundif(GetUpdateRect(hwnd,&r,TRUE)==0)return;//noupdaterect;donothingdc=BeginPaint(hwnd,&ps);//checkreturn//paintsomeRGBAimagedatawithGDI+EndPaint(hwnd,&ps);(暂时忽略向GDI+发送HDC。)我在这里使用GetUpdateRect()而不是从BeginPaint()获取更新矩形,因为我总是想在空白Canvas上绘制,尤其是因为我正在做alph

c++ - "BeginPaint"函数如何知道更新区域-windows编程?

我是Windows编程的新手,我有一个关于绘制窗口的问题,特别是关于BeginPaint函数的问题当我在MSDN上阅读它时上面写着StartthepaintingoperationbycallingtheBeginPaintfunction.ThisfunctionfillsinthePAINTSTRUCTstructurewithinformationontherepaintrequest.ThecurrentupdateregionisgiveninthercPaintmemberofPAINTSTRUCT.我的问题是,当我在wndproc中处理WM_PAINT消息并开始调用Beg

c++ - 为什么对 BeginPaint() 的调用总是生成 WM_NCPAINT 消息?

我在Win32API上遇到了问题。我有一个程序,当它处理WM_PAINT消息时,它调用BeginPaint来剪辑区域并验证更新区域,但是BeginPaint函数始终生成具有相同更新区域的WM_NCPAINT消息,即使需要重新绘制的触摸部分仅在客户区域内。有人知道为什么会这样吗?它位于具有WS_CHILD样式的子窗口上。 最佳答案 WM_PAINT的MSDN条目说:ThefunctionmayalsosendtheWM_NCPAINTmessagetothewindowprocedureifthewindowframemustbepa

c++ - 如何获取hooked winapi函数的调用后参数?

对于这个例子,我说的是HookBeginPaint(),我Hook很好,我通常可以访问调用前的所有内容......HDCWINAPIMine_BeginPaint(HWNDhWnd,LPPAINTSTRUCTlpPaint){//dostuffhere,inspectingPRE-CALLlppaintstructetc...returnfpBeginPaint(hWnd,lpPaint);}我正在寻找一种方法来检查这个lpPaint结构调用后,我该怎么做? 最佳答案 HDCWINAPIMine_BeginPaint(HWNDhWn

c++ - 使用 BeginPaint/EndPain 而不是 GetDC/ReleaseDC 来响应 WM_PAINT 消息有什么特别之处吗?

可以使用GetDC/ReleaseDC在窗口客户区绘制。但是为了响应WM_PAINT消息,必须使用BeginPaint/EndPaint。这有什么特别的吗? 最佳答案 当窗口的一部分需要更新时,会发出WM_PAINT消息。通过指定BeginPaint/EndPaint(),您告诉gdi您实际上正在做那项工作。如果您不为指定区域调用BeginPaint(),WM_PAINT消息将一直生成,直到有人实际更新它为止。函数给你一个DC,就是因为方便。在内部BeginPaint()/EndPaint()可能调用GetDC()/ReleaseD

windows - GetDC() 和 BeginPaint() 之间的区别

我正在处理Win32用户界面。我想知道GetDC和BeginPaint之间的区别。何时使用哪个API,何时不使用哪个API。 最佳答案 GetDC只是将句柄返回到设备上下文,您可以随时随地使用它来进行自己的绘图。BeginPaint则为绘制窗口做准备,同时也提供了应该绘制什么的信息(比如背景是否需要重新绘制,需要绘制的矩形)。何时使用每个示例?BeginPaint在WM_PAINT处理程序中最常见(MSDN:除非响应WM_PAINT消息,否则应用程序不应调用BeginPaint。每次调用BeginPaint都必须相应调用EndPai