DIB图形显示的问题!
当我在View里
void CSACSView::OnDraw(CDC* pDC)
{
CSACSDoc* pDoc = (CSACSDoc*)GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here HDIB hDIB = pDoc->GetHDIB();
if(hDIB != NULL)
{
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
// 获取DIB宽度
int cxDIB = (int) ::DIBWidth(lpDIB);
// 获取DIB高度
int cyDIB = (int) ::DIBHeight(lpDIB); ::GlobalUnlock((HGLOBAL) hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
// 输出DIB 自己定义的一个全局函数
::PaintDIB(pDC->m_hDC, &rcDIB, pDoc->GetHDIB(),
&rcDIB, pDoc->GetDocPalette());
}}
可以正确的显示!
而在DOC里:
CSACSView* CSACSDoc::GetSACSView()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
//在一个视图中直接显示所拍到的图像
CView* pView = GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CSACSView))){
return (CSACSView*)pView;
}
}
ASSERT(FALSE);
return NULL;
}void CSACSDoc::ShowView()
{
HWND hSACSView = GetSACSView()->GetSafeHwnd();
HDC hdc = ::GetDC(hSACSView);
HDIB hDIB = GetHDIB();
if(hDIB != NULL)
{
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
// 获取DIB宽度
int cxDIB = (int) ::DIBWidth(lpDIB);
// 获取DIB高度
int cyDIB = (int) ::DIBHeight(lpDIB); ::GlobalUnlock((HGLOBAL) hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
// 输出DIB自己定义的一个全局函数
::PaintDIB(hdc, &rcDIB, GetHDIB(),
&rcDIB, GetDocPalette());
}}
就不能显示了,我想是我获得绘图句柄的时候出了问题!?
大侠指点!!
当我在View里
void CSACSView::OnDraw(CDC* pDC)
{
CSACSDoc* pDoc = (CSACSDoc*)GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here HDIB hDIB = pDoc->GetHDIB();
if(hDIB != NULL)
{
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
// 获取DIB宽度
int cxDIB = (int) ::DIBWidth(lpDIB);
// 获取DIB高度
int cyDIB = (int) ::DIBHeight(lpDIB); ::GlobalUnlock((HGLOBAL) hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
// 输出DIB 自己定义的一个全局函数
::PaintDIB(pDC->m_hDC, &rcDIB, pDoc->GetHDIB(),
&rcDIB, pDoc->GetDocPalette());
}}
可以正确的显示!
而在DOC里:
CSACSView* CSACSDoc::GetSACSView()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
//在一个视图中直接显示所拍到的图像
CView* pView = GetNextView(pos);
if(pView->IsKindOf(RUNTIME_CLASS(CSACSView))){
return (CSACSView*)pView;
}
}
ASSERT(FALSE);
return NULL;
}void CSACSDoc::ShowView()
{
HWND hSACSView = GetSACSView()->GetSafeHwnd();
HDC hdc = ::GetDC(hSACSView);
HDIB hDIB = GetHDIB();
if(hDIB != NULL)
{
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
// 获取DIB宽度
int cxDIB = (int) ::DIBWidth(lpDIB);
// 获取DIB高度
int cyDIB = (int) ::DIBHeight(lpDIB); ::GlobalUnlock((HGLOBAL) hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
// 输出DIB自己定义的一个全局函数
::PaintDIB(hdc, &rcDIB, GetHDIB(),
&rcDIB, GetDocPalette());
}}
就不能显示了,我想是我获得绘图句柄的时候出了问题!?
大侠指点!!
HWND hSACSView = GetSACSView()->GetSafeHwnd();
HDC hdc = ::GetDC(hSACSView);
void CSACSDoc::ShowView()
{
HWND hSACSView = GetSACSView()->GetSafeHwnd();
HDC hdc = ::GetDC(hSACSView);
::Rectangle(hdc,50,50,200,200);
}
pDoc->ShowView();
所以应该在OnDraw()中去调用pDoc->ShowView();
或在OnDraw()加入变量控制来实现显示也行。试试吧
{
HWND hSACSView = GetSACSView()->GetSafeHwnd();
HDC hdc = ::GetDC(hSACSView);
::Rectangle(hdc,50,50,200,200);
}