|
编译,连接,都通过了,也生成了EXE;(,我是移植的代码,作了修改:wince开发系列问题——1有详细描述如何解决问题的,可能问题出现自我解决问题的方法)
但是悲剧的是: 在模拟器里跑不成,问题如下
void CbmpView::OnDraw(CDC* pDC)
{
CbmpDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
HGLOBAL hDIB = pDoc->GetHObject();
if (hDIB != NULL) // 判断DIB是否为空
{
// LPSTR lpDibSection = (LPSTR) ::GlobalLock(hDIB);
LPSTR lpDibSection = (LPSTR) GlobalLock(hDIB);
int cxDIB = (int) pDoc->m_dib.GetWidth(lpDibSection); // 获取DIB宽度
int cyDIB = (int) pDoc->m_dib.GetHeight(lpDibSection);// 获取DIB高度
// ::GlobalUnlock(hDIB);
GlobalUnlock(hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
CRect rcDest= rcDIB;
pDoc->m_dib.DrawDib(pDC->m_hDC, &rcDest, pDoc->GetHObject(),// 重画DIB
&rcDIB, pDoc->GetDocPal());
}
else
{
// pDC->TextOut(30,30,"可以通过文件菜单打开BMP文件,并显!");
MessageBox(_T("ERROR"));
}
}
我一跑 ,程序就进入MessageBox(_T("ERROR"));了;显示“ERROR”,这说明HGLOBAL hDIB = pDoc->GetHObject();这句话反回了空值,这是为什么?
还有上面代码里
// ::GlobalUnlock(hDIB);
GlobalUnlock(hDIB);
是因为wince下定义和win32下不同,被注释掉的语句编译不过,改成下面就可以了,win32下是BOOL型的,wince下就是一个宏。
大侠们帮看看为什么直接进入了else语句里;OnDraw这个函数难道不是在我用"工具栏"的“OPEN”打开一个位图文件后才执行嘛?为何一开程序就直接跑进OnDraw的else里了?
|
|