BitBlt双缓冲显示有关问题
BitBlt双缓冲显示问题?
我在对话框上放一个Static框. 想在这个区域中做图片各像素显示及分析.
运行结果出现copy dc或恢复dc显示BitBlt坐标不对现象,就是发现现实的区域不是全部在IDC_TFT框内. 请问是否我的BitBlt用法有问题?
------解决方案--------------------
------解决方案--------------------
dc不对啊。
------解决方案--------------------
dc.BitBlt(0,0,
MyProject.MyLayout.rcTFT.Width(),
MyProject.MyLayout.rcTFT.Height(),
&dcMem,
0,0,
SRCCOPY);
-->
dc.BitBlt(MyProject.MyLayout.rcTFT.left,
MyProject.MyLayout.rcTFT.top,
MyProject.MyLayout.rcTFT.Width(),
MyProject.MyLayout.rcTFT.Height(),
&dcMem,
0,0,
SRCCOPY);
这样????
我在对话框上放一个Static框. 想在这个区域中做图片各像素显示及分析.
GetDlgItem(IDC_TFT)->GetWindowRect(&MyProject.MyLayout.rcTFT);
ScreenToClient(MyProject.MyLayout.rcTFT);
CClientDC dc(this);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, MyProject.MyLayout.rcTFT.Width(), MyProject.MyLayout.rcTFT.Height());
CBitmap * pOldBitmap = dcMem.SelectObject(&bitmap);
dcMem.BitBlt(0,0, //保存上一幅图片
MyProject.MyLayout.rcTFT.Width(),
MyProject.MyLayout.rcTFT.Height(),
&dc,
//0,0,
MyProject.MyLayout.rcTFT.left,MyProject.MyLayout.rcTFT.top,
SRCCOPY);
//********************************************************************
DrawXY(&dcMem); //显示像素处理
//*****************************************************************
dc.BitBlt(0,0,
MyProject.MyLayout.rcTFT.Width(),
MyProject.MyLayout.rcTFT.Height(),
&dcMem,
0,0,
SRCCOPY);
dcMem.SelectObject(pOldBitmap);
bitmap.DeleteObject();
运行结果出现copy dc或恢复dc显示BitBlt坐标不对现象,就是发现现实的区域不是全部在IDC_TFT框内. 请问是否我的BitBlt用法有问题?
------解决方案--------------------
CClientDC dc(this);//获取的是当前客户区的设备DC,你需要获取的是static控件的DC
CClientDC *pDC=(CClientDC *)GetDlgItem(IDC_TFT)->GetDC(); //获取绘图框Static框的设备上下文dc
------解决方案--------------------
dc不对啊。
------解决方案--------------------
dc.BitBlt(0,0,
MyProject.MyLayout.rcTFT.Width(),
MyProject.MyLayout.rcTFT.Height(),
&dcMem,
0,0,
SRCCOPY);
-->
dc.BitBlt(MyProject.MyLayout.rcTFT.left,
MyProject.MyLayout.rcTFT.top,
MyProject.MyLayout.rcTFT.Width(),
MyProject.MyLayout.rcTFT.Height(),
&dcMem,
0,0,
SRCCOPY);
这样????