当前位置: 代码迷 >> WinCE >> WinCE6上绘制位图出错,运行CreateCompatibleBit地图返回GetLastError为6
  详细解决方案

WinCE6上绘制位图出错,运行CreateCompatibleBit地图返回GetLastError为6

热度:389   发布时间:2016-04-28 11:52:49.0
WinCE6上绘制位图出错,运行CreateCompatibleBitmap返回GetLastError为6
在VS2005上编写了一段位图绘图程序,想实现双缓冲效果。程序在PC上能够正常运行,但是放到WinCE6上时却不能正常运行。对CreateCompatibleBitmap返回GetLastError的值是6,请问这代表什么意思?最关键的是,为什么在PC端上可以运行的程序在WinCE上不能运行,是因为内存限制,还是由于我使用的是Unicode工程?烦请各位大侠赐教。

void CDraw_ARMDlg::OnBnClickedButtonDraw2()
{
double dData[110];
memset(dData, 0, 110);
USHORT usCol = 4;


CDraw_ARMDlg *mainWnd=(CDraw_ARMDlg*)AfxGetApp()->GetMainWnd();

CRect rect;
GetClientRect(&rect); // 获得客户区窗口大小
width = rect.Width();
height = rect.Height();



double dSin[10] = {1,2,3,4,5,6,7,8,9,10};

  
CDC MemDC; //首先定义一个显示设备对象 
CDC MemDC2;
CBitmap MemBitmap; //定义一个位图对象  
CBitmap MemBitmap2; //定义一个位图对象


//随后建立与屏幕显示兼容的内存显示设备  
MemDC.CreateCompatibleDC(NULL);  
MemDC2.CreateCompatibleDC(NULL);

//下面建立一个与屏幕显示兼容的位图,
if (!MemBitmap.CreateCompatibleBitmap(dc_Draw,width,height))
{
CString strTemp;
strTemp.Format(_T("1 error code:%d from Bitmap1\n"), GetLastError());
AfxMessageBox(strTemp);


if (!MemBitmap2.CreateCompatibleBitmap(dc_Draw,width,height))
{
CString strTemp;
strTemp.Format(_T("1 error code:%d from Bitmap2\n"), GetLastError());
AfxMessageBox(strTemp);


//将位图选入到内存显示设备中  
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上  
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);  
CBitmap *pOldBit2=MemDC2.SelectObject(&MemBitmap2); 

}  
}

------解决思路----------------------
错误代码 6 是:句柄无效。 

MemBitmap 和 MemBitmap2 你只是定义了,没有初始化就开始使用了,当然会报这样的错误。
------解决思路----------------------
你是不是dc_Draw 这个指针没初始化正确,我说的是没句柄。。
你设置断点,然后看看。
------解决思路----------------------
错误6不就是 无效句柄吗,所以dc_Draw 应该不对,好好查查。
  相关解决方案