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());
}}
就不能显示了,我想是我获得绘图句柄的时候出了问题!?
大侠指点!!

解决方案 »

  1.   

    没人帮我看看么:
    HWND hSACSView = GetSACSView()->GetSafeHwnd();
    HDC hdc = ::GetDC(hSACSView);
      

  2.   

    你有没有在ondraw里面刷新一下。或者在ondraw调用showview().
      

  3.   

    OnNewDocument() 没有用呀,你要在view准备draw时候告诉她如何draw呀。因为它的刷新只会调用ondraw。
      

  4.   

    应该不是这两句代码的问题,验证很简单呀,你可以换成一个普通绘图函数来试一下呀!!ps:
    void CSACSDoc::ShowView()
    {
     HWND hSACSView = GetSACSView()->GetSafeHwnd();
     HDC hdc = ::GetDC(hSACSView);
     
     ::Rectangle(hdc,50,50,200,200);
    }
      

  5.   

    对了,当然应该在OnDraw()中去调用!!
    pDoc->ShowView();
      

  6.   

    试图重新需要重新绘制的的时候,程序框架会自动调用OnDraw,所以你显示的内容要在OnDraw()里面写。可以加入变量控制,决定什么时候画什么。
    所以应该在OnDraw()中去调用pDoc->ShowView();
    或在OnDraw()加入变量控制来实现显示也行。试试吧
      

  7.   

    void CSACSDoc::ShowView()
    {
     HWND hSACSView = GetSACSView()->GetSafeHwnd();
     HDC hdc = ::GetDC(hSACSView);
     
     ::Rectangle(hdc,50,50,200,200);
    }