如何将LPCTSTR字符写入内存DC中?

RedHat_net 2008-11-06 04:06:56
我想将数据写入到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等类啊!!
...全文
142 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
RedHat_net 2008-11-07
  • 打赏
  • 举报
回复
我QQ是 14645094 麻烦了!
RedHat_net 2008-11-07
  • 打赏
  • 举报
回复
我的代码放在了WM_PAINT里实现的啊!!
真的,BITBLT这个方法我对前面两个坐标和后面两个坐标确实不是太明白啊!!
你刚才的解释还是让我没太明白啊!!

比方说吧,我在父窗口中画出一个区域来滚屏显示数据!!父窗口中的这个区域是不动的,而动的是里面的字!!
按你对BITBLT这个方法的解释,我前面应该是父窗口这个区域的坐标??后面的应该是0,0,这样如果改变前面的坐标,那这个区域不也就改变了?
你有QQ没??想和你在QQ里详细说啊!!挺着急的啊!
wltg2001 2008-11-06
  • 打赏
  • 举报
回复
另外问一下,你的代码放在什么地方的啊
wltg2001 2008-11-06
  • 打赏
  • 举报
回复
BitBlt这个API的参数可能你没有弄明白,nXDest、和nYDest指的是要想将位图贴在源位图的什么地方。nXSrc 和nYSrc则是指从源DC的什么地方开始贴,因为你想用这个来形成移动,源DC的位置肯定是不会变的,改变的应该是源DC的位置。

RedHat_net 2008-11-06
  • 打赏
  • 举报
回复
对了,还有就是,现在有数据是有,可我像上面的代码写完,就什么也不现实了,不知道为什么啊??是数据没有写到内存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);



RedHat_net 2008-11-06
  • 打赏
  • 举报
回复
我现在有一点挺迷糊的啊,就是,bitblt前面两个参数我现在写的是在dlg中设定显示文字的区域,如果要改变这两个的话,那会不会整个区域就跟着动了,那样整个DLG不就乱了吗?这个地方我很不明白啊!请多说说啊!!谢谢!!
wltg2001 2008-11-06
  • 打赏
  • 举报
回复
BitBlt(hDC, rcMyBounds.left, rcMyBounds.top + 18, rcMyBounds.right,rcMyBounds.bottom, nDC, 0, n_DCy, SRCCOPY);//
=========================
你的想法应该没有问题,不过你上面的代码中修改的是源DC的左上角位置啊,按说应该改的是目标DC的位置才对啊。也就是说应该变化的是第二个和第三个参数啊

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧