我想将数据写入到RECT中,然后将rect  selectobject到内存DC中,然后bitblt内存中的rect,实现滚屏显示的效果,不知道思路对不对啊!!代码如下!!
                           nDC = CreateCompatibleDC(hDC); SelectObject(nDC,CreateRectRgnIndirect(&MoveRect)); SIZE n_size;
GetTextExtentExPoint(hDC,_T("中"),_tcslen(_T("中")),NULL,NULL,NULL,&n_size);
n_hight = 11*n_size.cy;
MoveRect.top = 0;
MoveRect.left = 0;
MoveRect.right = rcMyBounds.right;
MoveRect.bottom = n_hight;
                        for(int i = 0; i<= DataNum; i++)
{
DrawText(nDC, (LPCTSTR)g_nTimeGet->UTF8ToUnicode(g_nTimeGet->allData [i].nameData).c_str(), -1, &MoveRect, DT_LEFT); MoveRect.left = /*DRA::SCALEY(92);*/92;
DrawText(hDC, (LPCTSTR)g_nTimeGet->UTF8ToUnicode(g_nTimeGet->allData[i].newData).c_str(), -1, &MoveRect, DT_LEFT);

MoveRect.left += /*DRA::SCALEY(60);*/60;
wsprintf(szTextBuffer, TEXT("%s%\r\n%"), (LPCTSTR)g_nTimeGet->UTF8ToUnicode(g_nTimeGet->allData[i].changeData).c_str());
DrawText(hDC, szTextBuffer, -1, &MoveRect, DT_LEFT);
                  }                        BitBlt(hDC, rcMyBounds.left, rcMyBounds.top + 18, rcMyBounds.right,rcMyBounds.bottom, nDC, 0, n_DCy, SRCCOPY);//n_DCy在WM_TIMER中n_DCy++
DeleteDC(nDC);
代码是上面的,可显示的是错误的啊!!跟们没有滚动的效果啊!!而且显示的效果根本不对啊!!
请问高手们,按照我的思路可以实现吗??如何实现!!谢谢大家,在线狂等!!
对了,项目不是MFC的项目,所以没能用到CDC等类啊!!

解决方案 »

  1.   

    BitBlt(hDC, rcMyBounds.left, rcMyBounds.top + 18, rcMyBounds.right,rcMyBounds.bottom, nDC, 0, n_DCy, SRCCOPY);//
    =========================
    你的想法应该没有问题,不过你上面的代码中修改的是源DC的左上角位置啊,按说应该改的是目标DC的位置才对啊。也就是说应该变化的是第二个和第三个参数啊
      

  2.   

    我现在有一点挺迷糊的啊,就是,bitblt前面两个参数我现在写的是在dlg中设定显示文字的区域,如果要改变这两个的话,那会不会整个区域就跟着动了,那样整个DLG不就乱了吗?这个地方我很不明白啊!请多说说啊!!谢谢!!
      

  3.   

    对了,还有就是,现在有数据是有,可我像上面的代码写完,就什么也不现实了,不知道为什么啊??是数据没有写到内存DC中,还是为什么原因呢??头疼!!!!
    上面代码有两个地方错误,我改过来了,如下!!DrawText(nDC, (LPCTSTR)g_nTimeGet->UTF8ToUnicode(g_nTimeGet->allData[i].newData).c_str(), -1, &MoveRect, DT_LEFT); DrawText(nDC, szTextBuffer, -1, &MoveRect, DT_LEFT); 
      

  4.   

    BitBlt这个API的参数可能你没有弄明白,nXDest、和nYDest指的是要想将位图贴在源位图的什么地方。nXSrc 和nYSrc则是指从源DC的什么地方开始贴,因为你想用这个来形成移动,源DC的位置肯定是不会变的,改变的应该是源DC的位置。
      

  5.   

    我的代码放在了WM_PAINT里实现的啊!!
    真的,BITBLT这个方法我对前面两个坐标和后面两个坐标确实不是太明白啊!!
    你刚才的解释还是让我没太明白啊!!比方说吧,我在父窗口中画出一个区域来滚屏显示数据!!父窗口中的这个区域是不动的,而动的是里面的字!!
    按你对BITBLT这个方法的解释,我前面应该是父窗口这个区域的坐标??后面的应该是0,0,这样如果改变前面的坐标,那这个区域不也就改变了?
    你有QQ没??想和你在QQ里详细说啊!!挺着急的啊!