{
CTestmfcDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
HDC dc=::CreateCompatibleDC(pDC->m_hDC);
HBITMAP bmp=::CreateCompatibleBitmap(dc,100,100);
HBITMAP oldbmp=(HBITMAP)::SelectObject(dc,bmp);
HBRUSH hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
RECT rect={0,0,100,100};
::FillRect(dc,&rect,hBrush);
DeleteObject(hBrush);
POINT point;
HPEN pen,oldpen;
pen=::CreatePen(PS_SOLID,2,RGB(0,255,0));
oldpen=(HPEN)::SelectObject(dc,pen);
::MoveToEx(dc,10,10,&point);
::LineTo(dc,40,40);
LPTSTR k=_T("skcskjdf");
::SetTextColor(dc,RGB(0,255,0));
::TextOut(dc,10,10,k,::_tcslen(k)); //内存dc中输出
::BitBlt(pDC->m_hDC,0,0,100,100,dc,0,0,SRCCOPY);
::SelectObject(dc,oldpen);
::SelectObject(dc,oldbmp);
::DeleteObject(pen);
::DeleteDC(dc);
::SetTextColor(pDC->m_hDC,RGB(0,255,0));
::TextOut(pDC->m_hDC,150,150,k,::_tcslen(k));//正常dc中输出
// TODO: add draw code for native data here
}
11 个解决方案
#1
會不會是你刪除 dc 的原因 呢??
猜的。
猜的。
#2
不是,大家可以把这段代码直接放到有MFC向导生成的MDI,然后覆盖OnDraw即可调试,请大家帮忙调试一下
#3
HDC dc=::CreateCompatibleDC(pDC->m_hDC);
HBITMAP bmp=::CreateCompatibleBitmap(pDC->m_hDC,500,500);
^^^^^^^^^^
#4
::SetTextColor(dc,RGB(0,255,0));
::TextOut(dc,10,10,k,::_tcslen(k)); //内存dc中输出
SetTextColor放这里就行了
::BitBlt(pDC->m_hDC,0,0,100,100,dc,0,0,SRCCOPY);
::SelectObject(dc,oldpen);
::TextOut(dc,10,10,k,::_tcslen(k)); //内存dc中输出
SetTextColor放这里就行了
::BitBlt(pDC->m_hDC,0,0,100,100,dc,0,0,SRCCOPY);
::SelectObject(dc,oldpen);
#5
同意Wargod2002的做法!
关键在于,要先写内存在读出,才能取得好的结果,
代码中事先附值,但是并未写入内存!
关键在于,要先写内存在读出,才能取得好的结果,
代码中事先附值,但是并未写入内存!
#6
只需将代码循序调一下就可以了
。。。
::SetTextColor(pDC->m_hDC,RGB(0,255,0));
::TextOut(pDC->m_hDC,150,150,k,::_tcslen(k));//正常dc中输出
::SetTextColor(dc,RGB(0,255,0));
::TextOut(dc,10,10,k,::_tcslen(k)); //内存dc中输出
。。。
。。。
::SetTextColor(pDC->m_hDC,RGB(0,255,0));
::TextOut(pDC->m_hDC,150,150,k,::_tcslen(k));//正常dc中输出
::SetTextColor(dc,RGB(0,255,0));
::TextOut(dc,10,10,k,::_tcslen(k)); //内存dc中输出
。。。
#7
我已經試過了,你是創建位圖時出的錯。
#8
都还是不行,大家再想想
#9
rokia(rokia) 的可以
能否说明一下为何用dc就只有黑色,能否有其他方法来解决这个颜色问题呢?
能否说明一下为何用dc就只有黑色,能否有其他方法来解决这个颜色问题呢?
#10
可能是因為你創建的位圖是基於一個尚未初始好的dc吧。
這個不是用其它方法的問題,而是因為你不小心創建失誤啊。
這個不是用其它方法的問題,而是因為你不小心創建失誤啊。
#11
rokia(rokia) 说的没错
HDC dc=::CreateCompatibleDC(pDC->m_hDC);
HBITMAP bmp=::CreateCompatibleBitmap(dc,100,100);
你的内存dc建好后,缺省的位图是1×1的单色位图,然后你又把自己的位图创建成和它一样,当然会有问题了。你照rokia(rokia)的方法把CreateCompatibleBitmap(dc,100,100);改成CreateCompatibleBitmap(pDC->m_hDC,100,100);应该就可以了。
HDC dc=::CreateCompatibleDC(pDC->m_hDC);
HBITMAP bmp=::CreateCompatibleBitmap(dc,100,100);
你的内存dc建好后,缺省的位图是1×1的单色位图,然后你又把自己的位图创建成和它一样,当然会有问题了。你照rokia(rokia)的方法把CreateCompatibleBitmap(dc,100,100);改成CreateCompatibleBitmap(pDC->m_hDC,100,100);应该就可以了。
#1
會不會是你刪除 dc 的原因 呢??
猜的。
猜的。
#2
不是,大家可以把这段代码直接放到有MFC向导生成的MDI,然后覆盖OnDraw即可调试,请大家帮忙调试一下
#3
HDC dc=::CreateCompatibleDC(pDC->m_hDC);
HBITMAP bmp=::CreateCompatibleBitmap(pDC->m_hDC,500,500);
^^^^^^^^^^
#4
::SetTextColor(dc,RGB(0,255,0));
::TextOut(dc,10,10,k,::_tcslen(k)); //内存dc中输出
SetTextColor放这里就行了
::BitBlt(pDC->m_hDC,0,0,100,100,dc,0,0,SRCCOPY);
::SelectObject(dc,oldpen);
::TextOut(dc,10,10,k,::_tcslen(k)); //内存dc中输出
SetTextColor放这里就行了
::BitBlt(pDC->m_hDC,0,0,100,100,dc,0,0,SRCCOPY);
::SelectObject(dc,oldpen);
#5
同意Wargod2002的做法!
关键在于,要先写内存在读出,才能取得好的结果,
代码中事先附值,但是并未写入内存!
关键在于,要先写内存在读出,才能取得好的结果,
代码中事先附值,但是并未写入内存!
#6
只需将代码循序调一下就可以了
。。。
::SetTextColor(pDC->m_hDC,RGB(0,255,0));
::TextOut(pDC->m_hDC,150,150,k,::_tcslen(k));//正常dc中输出
::SetTextColor(dc,RGB(0,255,0));
::TextOut(dc,10,10,k,::_tcslen(k)); //内存dc中输出
。。。
。。。
::SetTextColor(pDC->m_hDC,RGB(0,255,0));
::TextOut(pDC->m_hDC,150,150,k,::_tcslen(k));//正常dc中输出
::SetTextColor(dc,RGB(0,255,0));
::TextOut(dc,10,10,k,::_tcslen(k)); //内存dc中输出
。。。
#7
我已經試過了,你是創建位圖時出的錯。
#8
都还是不行,大家再想想
#9
rokia(rokia) 的可以
能否说明一下为何用dc就只有黑色,能否有其他方法来解决这个颜色问题呢?
能否说明一下为何用dc就只有黑色,能否有其他方法来解决这个颜色问题呢?
#10
可能是因為你創建的位圖是基於一個尚未初始好的dc吧。
這個不是用其它方法的問題,而是因為你不小心創建失誤啊。
這個不是用其它方法的問題,而是因為你不小心創建失誤啊。
#11
rokia(rokia) 说的没错
HDC dc=::CreateCompatibleDC(pDC->m_hDC);
HBITMAP bmp=::CreateCompatibleBitmap(dc,100,100);
你的内存dc建好后,缺省的位图是1×1的单色位图,然后你又把自己的位图创建成和它一样,当然会有问题了。你照rokia(rokia)的方法把CreateCompatibleBitmap(dc,100,100);改成CreateCompatibleBitmap(pDC->m_hDC,100,100);应该就可以了。
HDC dc=::CreateCompatibleDC(pDC->m_hDC);
HBITMAP bmp=::CreateCompatibleBitmap(dc,100,100);
你的内存dc建好后,缺省的位图是1×1的单色位图,然后你又把自己的位图创建成和它一样,当然会有问题了。你照rokia(rokia)的方法把CreateCompatibleBitmap(dc,100,100);改成CreateCompatibleBitmap(pDC->m_hDC,100,100);应该就可以了。