我编译连接没问题 可运行时并没有图 而且如果我打开菜单项"文件"-"新建" 就会出错                 请问大家哪里不对void CGobangView::OnDraw(CDC* pDC)
{
CGobangDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here Chessboard.CreateCompatibleDC(pDC);
Chessboard.SelectObject(&m_Chessboard);
m_Chessboard.LoadBitmap(IDB_chessboard);
pDC->BitBlt(0,0,800,590,&Chessboard,0,0,SRCCOPY);}                  这是MFC的单文档程序,我只对这个函数作了修改 其他未变         

解决方案 »

  1.   

    m_Chessboard.LoadBitmap(IDB_Chessboard);
    Chessboard.CreateCompatibleDC(pDC);
    Chessboard.SelectObject(m_Chessboard);你应该先去看看GDI绘图了  调用的步骤都写错了
      

  2.   

    这是HDC的!CDC封装了它,先看比较好理解
    HDC hdc = GetDC(hWnd);//获取当前的显示设备上下文
    HBITMAP bitmap;//图象句柄
    //从硬盘下载图片
    bitmap = (HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,with,height,LR_LOADFRcOMFILE);
    //从资源文件中下载图片
    //bitmap=LoadBitmap (g_hInstance,MAKEINTRESOURCE(IDB_BITMAP)); 
    HDC  hdcsource  = CreateCompatibleDC(NULL);//创建存放图象的显示缓冲
    SelectObject(hdcsource,bitmap);    //将位图资源装入显示缓冲
    BitBlt(hdc,x,y,with,height,hdcsource,x,y,SRCCOPY);//将图象显示缓冲的内容直接显示到屏幕
    ReleaseDC(hdc);
      

  3.   

    if (m_Chessboard.m_hObject == NULL);
        m_Chessboard.LoadBitmap(IDB_chessboard);//重复加载位图会出错Chessboard.CreateCompatibleDC(pDC);
    Chessboard.SelectObject(&m_Chessboard);
    pDC->BitBlt(0,0,800,590,&Chessboard,0,0,SRCCOPY);
      

  4.   

              感谢sciencsongtiefei 谢谢           我是在试做五子棋游戏.现在代码改了,有图了.          谢谢sjdev  你说的有道理 我也改了.          可是重绘(打开文件-新建,或者改变窗口大小)换是会出错.         
      

  5.   

    if (m_Chessboard.m_hObject == NULL);
        m_Chessboard.LoadBitmap(IDB_chessboard);//重复加载位图会出错Chessboard.CreateCompatibleDC(pDC);
    Chessboard.SelectObject(&m_Chessboard);
    pDC->BitBlt(0,0,800,590,&Chessboard,0,0,SRCCOPY);
    Chessboard.DeleteDC();
      

  6.   

    DC重复创建也是会出问题的,同CBitmap重复加载是一个道理。
      

  7.   

    或者// 其实这句话最好放在初始化的地方
    if (m_Chessboard.m_hObject == NULL);
        m_Chessboard.LoadBitmap(IDB_chessboard);CDC memDC;
    memDC.CreateCompatibleDC(pDC);
    memDC.SelectObject(&m_Chessboard);
    pDC->BitBlt(0,0,800,590,&memDC,0,0,SRCCOPY);
      

  8.   


                错误提示Debug Assertion Failed.
                sjdev  说的  .DeleteDC();  对 .问题解决了.谢谢.谢谢两位了.
                请问二位.不是说有个类的析构函数自动释放DC么,是哪个?
      

  9.   


       个人觉得换是CDC的代码简单,好用些.
    问题解决 感谢楼上两位 结贴给分.
      

  10.   


    你是说Chessboard 也就是你这的代码 memDC 定义为函数内的局部变量么?
    局部的每次调用函数才创建,调用完函数生命周期就结束了,再次调用函数 会重新定义,所以不需要DeleteDC()么?
      

  11.   


    谢谢你. 我买了这本书,学习-ing.