| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 688 人关注过本帖
标题:为什么在客户区绘图不显示,求大神解决。
只看楼主 加入收藏
lanriver
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:133
专家分:101
注 册:2008-8-9
结帖率:70.59%
收藏
已结贴  问题点数:60 回复次数:2 
为什么在客户区绘图不显示,求大神解决。
MFC多文档程序为什么绘图不显示,双缓冲真的不明白,第一次绘图就被拦在了门外。
void CShowDrawView::OnDraw(CDC* pDC)
{
    CShowDrawDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
     int y=(GetDocument()->bY);//高
     int x=(GetDocument()->bX);//宽
     CDC   MemDC;
     CBitmap   MemBitmap;   
     MemDC.CreateCompatibleDC(pDC);
     MemBitmap.CreateCompatibleBitmap(pDC,x,y);
     CBitmap  *pOldBit=MemDC.SelectObject(&MemBitmap);
     MemDC.FillSolidRect(0,0,x,y,RGB(255,255,0));//此处没有绘图????????
      while(y>0)
     {
       while (x>0)
        {
         MemDC.SetPixel(x,y,RGB(255,0,255));
       /*这里绘图同样没有响应,改成pDC调用打开同一个图片两次还能闪烁的显示到屏幕,
       郁闷到蛋疼。MFC真的太强大,初学真的容易被挡在门外,实在无法明白*/
        x--;
        }
        y--;
     }
pDC->BitBlt(0,0,x,y,&MemDC,0,0,SRCCOPY); //是不是内存MemDC里没有绘图,还是pDC绘的图形被覆盖了,求解?
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}
搜索更多相关主题的帖子: void 
2012-08-19 23:25
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:60 
程序代码:
afx_msg void CMyTetrisDlg::OnPaint()
{
    /* 是否进行游戏 */
    static BOOL s_bStart = FALSE;

    CPaintDC dc(this);
    CBitmap bitmap;
    CDC dcBuffer;
    
    CRect rectClient;
    GetClientRect(rectClient);
    
    dcBuffer.CreateCompatibleDC(&dc);
    bitmap.CreateCompatibleBitmap(&dc, rectClient.Width(), rectClient.Height());
    CBitmap* oldBitmap = (CBitmap*)dcBuffer.SelectObject(bitmap);
    bitmap.DeleteObject();
    
    m_pTetrisGDI->FillBackground(&dcBuffer);

    /* 绘制窗口客户区边框 */
    dcBuffer.Draw3dRect(rectClient.left, rectClient.top, rectClient.Width(), rectClient.Height(),
        RGB(192, 192, 192), RGB(255, 255, 255));
    /* 绘制游戏面板 */
    m_pTetrisGDI->DrawGamePanel(&dcBuffer);
    /* 绘制游戏信息面板 */
    m_pTetrisGDI->DrawGameInfoPanel(&dcBuffer, m_tetris->GetScore());
    /* 绘制网格 */
    //m_pTetrisGDI->DrawGrid(&dcBuffer);

    /* 绘制当前所有方块 */
    m_pTetrisGDI->DrawBlocks(&dcBuffer, m_tetris->m_pGamePanel);
    
    if (m_tetris->GetIsGameOver())
    {
        m_pTetrisGDI->DrawGameOver(&dcBuffer, m_tetris->m_pGamePanel);
    }
    else if (m_tetris->GetStatus() || s_bStart)
    {
        /* 绘制下一个方块 */
        m_pTetrisGDI->DrawPromptBlock(&dcBuffer, m_tetris->GetNextBlock(), RGB(45, 255, 0));

        /* 绘制当前方块 */
        m_pTetrisGDI->DrawGameBlock(&dcBuffer, CPoint(
            m_pTetrisGDI->GetGamePanelRect()->left + m_tetris->GetXCurrentPos() * m_pTetrisGDI->GetBlockSize(),
            m_pTetrisGDI->GetGamePanelRect()->top + m_tetris->GetYCurrentPos() * m_pTetrisGDI->GetBlockSize()),
            m_tetris->GetCurrentBlock(),
        RGB(255, 0, 0));

        s_bStart = TRUE;
    }

    dc.BitBlt(rectClient.left,
        rectClient.top,
        rectClient.Width(),
        rectClient.Height(),
        &dcBuffer,
        0,
        0,
        SRCCOPY);
}


这是我之前的写的一个,你调试一下,一步一步走,看到底画了还是没画~x,y的值到底是什么?把MFC那几个库函数弄明白。
再看问题到底出在哪儿。

MFC是很复杂,我看你看的DOC-VIEW,不太好理解,要多下苦功夫。
2012-08-21 00:42
lanriver
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:133
专家分:101
注 册:2008-8-9
收藏
得分:0 
回复 2楼 zhoufeng1988
谢谢zhoufeng1988指点和鼓励!今晚仔细排查了下程序,发现是函数调用的问题,正在排查当中。

[ 本帖最后由 lanriver 于 2012-8-23 22:40 编辑 ]
2012-08-21 22:50
快速回复:为什么在客户区绘图不显示,求大神解决。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059705 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved