|
以上问题,我似乎已经解决了,我用CFrameWnd代替了CMDIChildWnd,因为我发现win32下CMDIChildWnd的基类是CFrameWnd,而CFrameWnd在wince下是被定义过的,所以直接用CFrameWnd做 CChildFrame的基类,
而CDumpContext的解决方法是,我自己添加一个头文件,将win32下的CDumpContext定义粘贴过去,然后将这个文件包含在需要处,
然后编译,连接都通过了,也生成了exe文件...........
但是悲剧的是: 在模拟器里跑不成,问题如下
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里了? |
|