我的程序有点毛病,在datagrid中添加数据,可是添加了以后并不能马上看到,必须要等到出现滚动条时才能看到以前添加的数据,跟踪了一下程序,发现是在调用了ShowScrollBar函数后才可以看到,我想应该是ShowScrollBar发送了某些消息使窗口显示出来了,于是我想自己发送那个消息使数据在添加后立即显示出来而不要等到出现滚动条时才显示出来,可是我不知道ShowScrollBar发送了什么消息,请大哥帮忙啊!!

解决方案 »

  1.   

    直接调用Invalidate不能刷新吗?
      

  2.   

    他的基类是WND
    应该会发个ON_PAINT吧
      

  3.   

    完整的工程可以从这里下载
    http://home.goofar.com/super007/cardop.rar
    请大家帮忙看一看,谢谢各位!
      

  4.   

    LRESULT CALLBACK DataGridProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)中把以下代码去掉
    (switch (message)
         {
            case WM_CREATE:
            {
    之后)
    DG_LIST* dgList = GetDGGrid(hwnd);
    if ( dgList != NULL )
                 {
                      HDC hDC = GetDC(dgList->dg_hWnd);
                      RECT rectClient;
                      GetClientRect( dgList->dg_hWnd, &rectClient );
                      dgList->dg_hMemBitmap = CreateCompatibleBitmap( hDC, (rectClient.right-rectClient.left), (rectClient.bottom-rectClient.top) );
                      dgList->dg_hMemDC = CreateCompatibleDC(hDC);
                      dgList->dg_hOldMemBitmap = (HBITMAP)SelectObject( dgList->dg_hMemDC, dgList->dg_hMemBitmap );
                      SetFocus(dgList->dg_hWnd);
                      ReleaseDC( dgList->dg_hWnd, hDC );
                 }
    因为此时这个刚创建的grid还没有加到链表里,所以GetDGGrid取出的肯定是NULL,所以这段代码始终不会执行。在BOOL AddDGGrid(HWND hWnd, HWND hParent)中的
    DG_LIST* curr = g_DGList;
              if ( curr == NULL )
                   g_DGList = newDGGrid;
              else
              {
                   while ( curr->next != NULL )
                         curr = curr->next;
                   
                   curr->next = newDGGrid;
              }
    之后加上以下代码
    {
      HDC hDC = GetDC(newDGGrid->dg_hWnd);
      RECT rectClient;
      GetClientRect( newDGGrid->dg_hWnd, &rectClient );
      newDGGrid->dg_hMemBitmap = CreateCompatibleBitmap( hDC, (rectClient.right-rectClient.left), (rectClient.bottom-rectClient.top) );
      newDGGrid->dg_hMemDC = CreateCompatibleDC(hDC);
      newDGGrid->dg_hOldMemBitmap = (HBITMAP)SelectObject( newDGGrid->dg_hMemDC, newDGGrid->dg_hMemBitmap );
      SetFocus(newDGGrid->dg_hWnd);
      ReleaseDC( newDGGrid->dg_hWnd, hDC );
      }
    这样就好了。同时奉劝你一句,以后在论坛里跟贴不要动不动就说别人不懂装懂,要尊重别人,懂吗!!
      

  5.   

    用SPY看看不就知道了,做UI开发不会SPY怎么行?