如何在内存里写字然后输出?为什么我这段代码有问题?

liuyuw 2004-09-13 05:52:19
这段代码显示出来的是一个黑色矩形,不知道怎么办,我是想在memDC上写好字,然后用p
DC->BitBlt输出,不知道错在哪里,大虾帮我看看!!
void CFontTestView::OnDraw(CDC* pDC)
{
CDC memDC;
CBitmap pBitmap;
memDC.CreateCompatibleDC(pDC);
pBitmap.CreateCompatibleBitmap(&memDC,100,100);
CBitmap *oldbitmap=memDC.SelectObject(&pBitmap);

CRect m_rect(100,100,200,200);
memDC.FillSolidRect(&m_rect, RGB(255, 0, 255));

memDC.SetBkMode(TRANSPARENT);

memDC.DrawText("lkj", m_rect, DT_LEFT);

pDC->BitBlt(m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height(),&memDC,0,0,
SRCCOPY);

memDC.SelectObject(oldbitmap);
}
...全文
105 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjyun 2004-09-16
  • 打赏
  • 举报
回复
UP
liuyuw 2004-09-16
  • 打赏
  • 举报
回复
To:nbcool(载舟之水)
已经行了,我为什么不直接写在上面是因为这样的,因为我现在做的硬件设备里面没有艺术字体,我要做艺术字,我需要把DrawText的那块矩形偏移并复制n边,产生立体的效果,所以直接写上去的话偏移的时候连后面背景也会被偏移,如果不用复制而是用DrawText写n边的话开销有比较大,所以就像在一个空的CDC里面画,用双缓存来做,现在已经做好了,谢谢帮忙:)
FIFO2003 2004-09-15
  • 打赏
  • 举报
回复
up
huajianyue 2004-09-15
  • 打赏
  • 举报
回复
最简单的 用 Winhax读内存就行了
载舟之水 2004-09-15
  • 打赏
  • 举报
回复
忘了说了,这个函数的环境

OS Versions: Windows CE .NET 4.0 and later.
Header: Windows.h.
Link Library: Coredll.lib.
载舟之水 2004-09-15
  • 打赏
  • 举报
回复
我觉得有些奇怪,你建了一个写有文字的位图,然后把这块图显示在实际窗口上,你如果不想显示除了文字的白色部分,为什么不直接把文字设为背景透明再直接显示在窗口上呢。这样不是多做了很多操作吗,要不就是我误解你的意思了。

下面按你的意思做,如果你是用PPC或是SP的话,就比较简单。
void CFontTestView::OnDraw(CDC* pDC)
{
CDC memDC;
CBitmap pBitmap;
memDC.CreateCompatibleDC(pDC);
pBitmap.CreateCompatibleBitmap(&memDC,100,100);
CBitmap *oldbitmap=memDC.SelectObject(&pBitmap);

CRect m_rect(100,100,200,200);
CRect m_rect_txt(0,0,100,100);

memDC.FillSolidRect(&m_rect_txt, RGB(255, 0, 255));

memDC.SetBkMode(TRANSPARENT);

memDC.DrawText(_T("lkj"), m_rect_txt, DT_LEFT|DT_TOP);
TransparentBlt(pDC->GetSafeHdc(),
m_rect.left,m_rect.top,
m_rect.Width(),m_rect.Height(),
memDC.GetSafeHdc(),
0,0,100,100,RGB(255,0,255));
memDC.SelectObject(oldbitmap);
}
如果你是标准WinCE平台的话,就麻烦些了,要自己实现透明函数。
上面的代码可以的话去试试,我没试过,也许有笔误。
crazyeagle 2004-09-15
  • 打赏
  • 举报
回复
gz
liuyuw 2004-09-15
  • 打赏
  • 举报
回复
代码没问题,已经能显示出来了,可是还有个问题,显示出来那块会把后面的背景遮掉。。。我想只把字显示出来,而其他部分是透明的,有没有办法?
载舟之水 2004-09-13
  • 打赏
  • 举报
回复
上面的代码我没试过,我一般不用MFC,有问题再说吧
载舟之水 2004-09-13
  • 打赏
  • 举报
回复
你的位图才100x100,你的文字都画到外面去了。
void CFontTestView::OnDraw(CDC* pDC)
{
CDC memDC;
CBitmap pBitmap;
memDC.CreateCompatibleDC(pDC);
pBitmap.CreateCompatibleBitmap(&memDC,100,100);
CBitmap *oldbitmap=memDC.SelectObject(&pBitmap);

CRect m_rect(100,100,200,200);
CRect m_rect_txt(0,0,100,100);

memDC.FillSolidRect(&m_rect_txt, RGB(255, 0, 255));

memDC.SetBkMode(TRANSPARENT);

memDC.DrawText(_T("lkj"), m_rect_txt, DT_LEFT|DT_TOP);

pDC->BitBlt(m_rect.left,m_rect.top,m_rect.Width(),m_rect.Height(),&memDC,0,0,
SRCCOPY);

memDC.SelectObject(oldbitmap);
}

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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