具体问题如下:
CStatic cs701=new CStatic();
cs701->Create("",WS_CHILD|WS_VISIBLE|SS_BITMAP,rcs701,this,IDC_STATIC701);
获得其hdc,连续调用cards.dll中的函数画图:
cdtDraw(hdc,0,0,1,1,RGB(255,255,255));
cdtDraw(hdc,15,0,1,1,RGB(255,255,255));
cdtDraw(hdc,0,0,1,1,RGB(255,255,255));
|————|         |——|————|           |————|——|
|        |         |    |        |           |        |    |
|        |         |    |        |           |        |    |
|        |         |    |        |           |        |    |
|————|         |——|————|           |————|——|   
以上为各个函数调用后的效果图,希望能看懂。谢谢~

解决方案 »

  1.   

    哦!其实我想问的是:如何实现每调用一个函数就清空一下CStatic的内容,这样每次都只显示一张牌。
      

  2.   


    你这个显示本来就是对的。因为后一图的位置不完全是前一图的位置,位置重叠的才会覆盖
    “哦!其实我想问的是:如何实现每调用一个函数就清空一下CStatic的内容,这样每次都只显示一张牌。”
    --那你就调清除命令呀!
      

  3.   

    “哦!其实我想问的是:如何实现每调用一个函数就清空一下CStatic的内容,这样每次都只显示一张牌。” 
    --或者,你显示一个大的空图,来作为清除
      

  4.   

    嗯~以上几位的方法试过,关键是我的背景原来就是一张位图(赌桌),要画的扑克牌就放在上面,所以CString的背景应该是透明的,如果用(CStatic*)cs701->SetBitmap(NULL)的话背景显示的是窗口的背景色(一片白色),那么,该用哪个函数来显示空图好呢?
      

  5.   

    还是不行~现在的问题是Invalidate(TRUE)的执行过程,如果移动窗口到显示范围以外再移动回来,会触发窗口无效重绘,这是显示出来的正好是想要的结果。但是直接用cs701->Invalidate(TRUE)却没有这种效果,郁闷。
      

  6.   

    redraw()。。找找。忘了。
      

  7.   

    自己写一个CStatic 的派生类吧,用一个成员变量来控制
      

  8.   

    Invalidate()是使窗口某部分成为无效区域,并使WM_PAINT消息进入消息队列,从而调用OnPaint()函数。但该消息优先级低,所以不能实时重绘。而UpdateWindow()则马上发送WM_PAINT消息给窗体,不必经过消息队列,马上执行OnPaint()函数重绘无效区域。现在本问题中,关键是CWnd::OnPaint()会重绘CStatic的什么内容?当我调用cdtDraw画了一张牌后,直接调用OnPaint(),窗口并不会把该牌清除啊