Noah_Zuo 2013-07-17 18:11 采纳率: 0%
浏览 892

VS2010编程的出现的小问题

小白最近刚刚入门VS2010,先贴代码吧:
case WM_PAINT: {
// hdc = BeginPaint(hWnd, &ps);
hdc = GetDC(hWnd);
HPEN pen = CreatePen(PS_SOLID, 5, RGB(255, 0, 0));
HPEN oldPen = (HPEN)SelectObject(hdc, pen);
MoveToEx(hdc, 100, 100, NULL);
LineTo(hdc, 400, 300);
SelectObject(hdc, oldPen);
DeleteObject(pen);

    HBRUSH redBrush = CreateSolidBrush(RGB(255, 255, 0));
    HBRUSH oldBrush = (HBRUSH)SelectObject(hdc, redBrush);
    Rectangle(hdc, 100, 100, 400, 300);
    SelectObject(hdc, oldBrush);
    DeleteObject(redBrush);


    ReleaseDC(hWnd, hdc);
//  EndPaint(hWnd, &ps);
    return 0;
    }

如上代码是在WndProc函数里面的,我在使用BeginPaint和EndPaint来完成画图的时候发现它一直显示的是一个方块,这很正常,然而用GetDC以及ReleaseDC时候会发生快速的闪烁,请问这两种方法有什么区别吗?

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-06 13:48
    关注

    BeginPaint 和 EndPaint 是一组函数,它们在绘制窗口时被用来锁定窗口的绘图表面,防止其他的进程对窗口的绘图表面的干扰。


    相对的,GetDC 和 ReleaseDC 也是一组函数,它们被用来获取和释放一个设备上下文 (DC) 的句柄。设备上下文是一个资源,它可以被用来在窗口或者控件上绘图。


    当使用 BeginPaint 和 EndPaint 时,操作系统会自动处理设备上下文的锁定和释放,这意味着你不需要手动调用 GetDC 和 ReleaseDC。相对的,当使用 GetDC 和 ReleaseDC 时,你需要自己手动处理设备上下文的锁定和释放。


    使用 GetDC 和 ReleaseDC 可能会导致闪烁,因为当你调用 ReleaseDC 释放设备上下文后,操作系统可能会立刻将设备上下文返回给其他进程使用,而这个过程可能会导致窗口的内容闪烁。因此,如果你需要在绘制窗口时避免闪烁,应该使用 BeginPaint 和 EndPaint 来代替 GetDC 和 ReleaseDC。

    评论

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码