我的视图,继承了CScrollView
我现在用下面的代码得到的客户区不是整个客户区,只是画出来的一部分
CDC * pDc;
CMainFrame *pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
CGenGraphView *pView = (CGenGraphView*)(pFrame->GetActiveView());
pDc = pView->GetDC();
HDC hDC = pDc->m_hDC;

解决方案 »

  1.   

    pDc = pView->GetDC();得到的就是当前pView的DC
    CScrollView的坐标是逻辑坐标,需要转换。
      

  2.   

    CDC* MypDc;
    MypDc=GetDC();
    要在视图类中使用;
    或:
    ClientDC pDc;
    ClientDC pDc就是视图的客户区类;
      

  3.   

    不好意思;
    应该是CClientDC pDc(this)才是视图的客户区类;
      

  4.   

    CDC * pDc;
    CMainFrame *pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
    CMyView *pView = (CMyView*)(pFrame->GetActiveView());
    pDc = pView->GetClientDC();
    ??
    没有视图类,没有GetClientDC这个成员函数啊!
      

  5.   

    大小肯定没问题呀
    我设置的是屏幕分辨率的大小1024x768
    去掉frame占的空间,应该能显示出CScrollView的一些
    可惜不是这样,多出了一条空白(黑色)
      

  6.   

    CClientDC怎么用呢?
    我现在在OnPaint里面,用CPaintDC dc(this)好像也不行
      

  7.   

    hdc = GetDC(hwnd);//处理函数ReleaseDC(hwnd,hdc);
      

  8.   

    我在MainFrame的响应函数里面呀!
    怎么CClientDC dc(this)呀?
    这样可以吗?
    得到试图的滚动dc?
      

  9.   

    如果你在MainFrame的响应函数里的话.
    这样调用:
    GetActiveView()->GetDC();
    获得指向视图的DC.
      

  10.   

    pDc = pView->GetDC();得到的就是当前pView的DC
      

  11.   

    用下面的方法可以将Client的内容保存到文件
    CRect rect;
    GetClientRect(&rect);
    int nWidth , nHeight;
    nWidth = rect.Width();
    nHeight = rect.Height();
    CClientDC dc(this);
    HDC hdc = dc.m_hDC;
    HDC hdc2 = ::CreateCompatibleDC(NULL);
    HBITMAP bitmap = ::CreateCompatibleBitmap(hdc, nWidth, nHeight);
    ::SelectObject(hdc2, bitmap);
    ::BitBlt(hdc2, 0, 0, nWidth, nHeight, hdc, 0, 0, SRCCOPY);
        SaveBmp(bitmap, "client.bmp");
    SaveBmp见
    http://expert.csdn.net/Expert/topic/2944/2944435.xml?temp=.5685846