我想将数据写入到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等类啊!!
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等类啊!!
=========================
你的想法应该没有问题,不过你上面的代码中修改的是源DC的左上角位置啊,按说应该改的是目标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);
真的,BITBLT这个方法我对前面两个坐标和后面两个坐标确实不是太明白啊!!
你刚才的解释还是让我没太明白啊!!比方说吧,我在父窗口中画出一个区域来滚屏显示数据!!父窗口中的这个区域是不动的,而动的是里面的字!!
按你对BITBLT这个方法的解释,我前面应该是父窗口这个区域的坐标??后面的应该是0,0,这样如果改变前面的坐标,那这个区域不也就改变了?
你有QQ没??想和你在QQ里详细说啊!!挺着急的啊!