none
绘图为何会导致屏幕闪烁? RRS feed

  • 问题

  • 如图:

    当我未激活我程序的窗口(也就是说:我的程序不是在屏幕最前面)

    那么当我移动挡着我程序的窗口(或者点击“开始菜单”),那么我的程序就会带动整个屏幕一起闪烁。(闪的十分厉害)

    我是在WIN32 APPLICATION中,对WM_PAINT进行绘图处理,代码如下:

    void OnPaint()
    {
        HDC hdc;
        //获得客户端矩形,并计算客户端宽度、高度
        RECT rt;
        GetClientRect(hWnd, &rt);
        UINT nWidth=rt.right-rt.left;
        UINT nHeight=rt.bottom-rt.top;

        hdc = GetDC(hWnd); //hWnd是全局变量,并且是本程序的HWND

        Bitmap memBitmap(nWidth,nHeight);
        Graphics memGr(&memBitmap);    

        //绘制背景
        memGr.FillRectangle(&SolidBrush(Color(255,232,233,235)),0,0,nWidth,nHeight);
       
        //贴图
        Graphics gr(hdc);
        gr.DrawImage(&memBitmap,0,0);
    }

    //求教各位高人了!

    2012年8月23日 11:01

答案

  • WM_PAINT里请用BeginPaint()/EndPaint()

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 yshkcj 2012年8月30日 7:39
    2012年8月24日 0:58
    版主

全部回复

  • 用双缓冲试试

    xiao

    2012年8月23日 23:45
  • 汗,这个和双缓冲没关系,我这个是整个屏幕闪烁。

    而且我是一次性绘图,效果和双缓冲效果是一样的。

    2012年8月23日 23:57
  • WM_PAINT里请用BeginPaint()/EndPaint()

    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    • 已标记为答案 yshkcj 2012年8月30日 7:39
    2012年8月24日 0:58
    版主
  • 可是如果我使用BeginPaint()/EndPaint(),当我对程序进行定时绘图时,却没有显示绘图效果。

    只有当我遮挡住我的程序,它才会进行一次绘图。

    2012年8月24日 1:18
  • 您好,

    我在Windows 7和Windows XP环境中尝试了您的代码,但是不能重现您所描述的问题。(Windows XP是远程虚拟机,可能会由于刷新速度慢导致我看不见闪烁。)

    请问您使用的操作系统是什么?是否在多台机器上重现过这一问题?


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月30日 3:00
    版主
  • 你是否将窗口设置为POPUP风格,并以桌面作为父窗口?

    如果是这样的话建议在你的窗口里再加一个控件,覆盖你这个窗口,在控件里实现绘图。

    2012年9月5日 6:38