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 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败
  • ¥15 MapReduce实现倒排索引失败
  • ¥15 ZABBIX6.0L连接数据库报错,如何解决?(操作系统-centos)
  • ¥15 找一位技术过硬的游戏pj程序员