cdc类使用!
请问怎么使用cdc类,使之先在内存写文字或画线,然后再贴到程序的客户区? 问题点数:20、回复次数:7Top
1 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2003-09-03 19:38:19 得分 10
CClientDC dc(this);
CDC *cdc1;
cdc1=new CDC;//定义一暂存DC
CBitmap *bmp1;
bmp1=new CBitmap;//位图对象
cdc1->CreateCompatibleDC(&dc);//将cdc转化为与dc兼容的DC
//bmp1->m_hObject=(HBITMAP)::LoadImage(NULL,"D:\\application example\\bmp1\\res\\fan.bmp",IMAGE_BITMAP,100,100,LR_LOADFROMFILE);
//.\\res\\fan.bmp表示文件路径名,100,100分别表示这个图片的宽和高
bmp1->LoadBitmap(IDB_BITMAP1);
cdc1->SelectObject(bmp1);//将位图放在暂存dc中
dc.BitBlt(30,30,100,100,cdc1,0,0,SRCCOPY);
/*将放在暂存DC中的位图贴于界面上,其中两个30表示贴图的左上角x,y坐标,100,100表示位图贴到目的地的宽和高,后面的0,0表示从位图的左上角x,y坐标开始贴*/
delete cdc1;
delete bmp1;
Cbmp1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;Top
2 楼dawndu(东南飞)回复于 2003-09-03 21:29:53 得分 10
同意楼上的:
CClientDC dc(this);
CDC *cdc1;
cdc1=new CDC;//定义一暂存DC
CBitmap *bmp1;
bmp1=new CBitmap;//位图对象
cdc1->CreateCompatibleDC(&dc);//将cdc转化为与dc兼容的DC
//bmp1->m_hObject=(HBITMAP)::LoadImage(NULL,"D:\\application example\\bmp1\\res\\fan.bmp",IMAGE_BITMAP,100,100,LR_LOADFROMFILE);
//.\\res\\fan.bmp表示文件路径名,100,100分别表示这个图片的宽和高
bmp1->LoadBitmap(IDB_BITMAP1);
cdc1->SelectObject(bmp1);//将位图放在暂存dc中
===================================================================
内存DC 有个位图表面后就可以在上面画线了
cdc1->MoveTo(0,0);
cdc1->LineTo(100,100);
===================================================================
dc.BitBlt(30,30,100,100,cdc1,0,0,SRCCOPY);
/*将放在暂存DC中的位图贴于界面上,其中两个30表示贴图的左上角x,y坐标,100,100表示位图贴到目的地的宽和高,后面的0,0表示从位图的左上角x,y坐标开始贴*/
delete cdc1;
delete bmp1;
Cbmp1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
Top
3 楼atEleven(@十一)回复于 2003-09-03 21:33:30 得分 0
不同意楼上两位.
位图数据在重复Top
4 楼atEleven(@十一)回复于 2003-09-03 21:34:34 得分 0
倒!!
没写完就跳了.
位图数据不应该在WM_PAINT这样频繁使用的消息中重复LOAD.很典型的效率问题.Top
5 楼spbabyba(大背)回复于 2003-09-03 22:17:18 得分 0
BitBlt
StretchBltTop
6 楼zhanshenpkl(LittlePK)回复于 2003-09-04 10:15:22 得分 0
To;atEleven(@十一)
大哥有更好的方法请不吝赐教!Top
7 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2003-09-04 12:40:50 得分 0
大哥有更好的方法请不吝赐教!Top




