SDK编程中,显示"hello",为什么不用hdc = GetDC(hWnd);代替hdc = BeginPaint(hWnd, &ps);???
实例如下:PAINTSTRUCT ps;
HDC hdc;
...
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps); //为什么不用hdc = GetDC(hWnd);来代替???
                             //编译起来也正常,只是"hello"有点闪而已,为
                             //什么???
// TODO: Add any drawing code here...
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
break;

解决方案 »

  1.   

    BeginPaint()有一种功能使所有的区域(客户区)有效,如果用hdc = GetDC(hWnd)的话,是不是需要validrect()(函数名记得不清楚),也许是这个原因,msdn上有对BeginPaint的解释。
      

  2.   

    GetDC其实也可以,但BeginPaint是专门为WM_PAINT消息准备的,它的功能是只绘制无效区域,这样绘制区域可以变小从而减少工作量,这也是减少闪烁的一个方法,以后用SDK编程你会慢慢体会到。
      

  3.   

    hdc=GetDc(hWnd),不行,这时候还没有初始给hwnd显示的DC。
    不过用GetClientDc(...)我倒是见得很多的。
      

  4.   

    EndPaint可以告诉Windows这个窗口已经有效了,可以用ValidateRect代替。
      

  5.   

    GetDC得到窗口句柄可对整个客户区操作。
    BeginPaint(hWnd, &ps);只能在ps(矩形结构)操作
    范围不同。
      

  6.   

    是的,应该是ValidateRect(hWnd,&rt);也就是使用用户区不再重画,但我觉得,用BeginPaint()的原因不只在此