紧急求救,再弄不出来我想跳楼了。GetDC问题。
我把代码贴出来,大家看看这样可不可以。如果如可以请告诉我原因。最好是有力的根据。
CDrawPen g_clDrawPen;
CDrawLine g_clDrawLine;
CDrawPolyline g_clDrarPolyline;
CDrawRectangle g_clDrawRect;
CDrawEllipse g_clDrawEllipse;
CDrawRoundRect g_clDrawRoundRect;
CDrawText g_clDrawText;
CDrawPick g_clDrawPick;
CDrawSelect g_clDrawSelect;
CDrawEraser g_clDrawErase;
CDrawMove g_clDrawMove;
CDrawFill g_clDrawFill;
CDrawTool* g_aDrawObject[] =
{
& g_clDrawPen,
& g_clDrawLine,
& g_clDrarPolyline,
& g_clDrawRect,
& g_clDrawEllipse,
& g_clDrawRoundRect,
& g_clDrawText,
& g_clDrawPick,
& g_clDrawSelect,
& g_clDrawErase,
& g_clDrawMove,
& g_clDrawFill
};
注明:所有的DrawFill等都是从DrawTool派生而来。DrawTool有一个成员函数是用来获取DC的:
bool CDrawTool::SetWnd(CWnd* pclWnd)
{
if (pclWnd == NULL)
{
return false;
}
m_hWnd = pclWnd;
m_hDC = pclWnd->GetDC()->m_hDC;
return true;
}
我在CMyView里面初始化。
void CMyView::OnShowWindow(BOOL bShow,
UINT nStatus)
{
CView::OnShowWindow(bShow, nStatus);
int iDrawObjectNum = sizeof(g_aDrawObject) / sizeof(g_aDrawObject[0]);
for (int i = 0; i < iDrawObjectNum; i++)
{
g_aDrawObject[i]->SetWnd(this);
}
}
然后我在
void CMyView::OnLButtonDown(UINT nFlags,
CPoint point)
{
g_aDrawObject[m_uiCurrToolId]->OnLButtonDown(point, rcDspRgn);
CView::OnLButtonDown(nFlags, point);
}
和OnLButtonUp和OnMouseMove里面调用每一个实例相应的函数来执行画图。
这样子在Win2000上没有任何问题,在win98上就有问题。
请教了,给出强有力的理由。分数不够可以再给。