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。

    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题