我编译连接没问题 可运行时并没有图 而且如果我打开菜单项"文件"-"新建" 就会出错 请问大家哪里不对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的单文档程序,我只对这个函数作了修改 其他未变
{
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的单文档程序,我只对这个函数作了修改 其他未变
Chessboard.CreateCompatibleDC(pDC);
Chessboard.SelectObject(m_Chessboard);你应该先去看看GDI绘图了 调用的步骤都写错了
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);
m_Chessboard.LoadBitmap(IDB_chessboard);//重复加载位图会出错Chessboard.CreateCompatibleDC(pDC);
Chessboard.SelectObject(&m_Chessboard);
pDC->BitBlt(0,0,800,590,&Chessboard,0,0,SRCCOPY);
m_Chessboard.LoadBitmap(IDB_chessboard);//重复加载位图会出错Chessboard.CreateCompatibleDC(pDC);
Chessboard.SelectObject(&m_Chessboard);
pDC->BitBlt(0,0,800,590,&Chessboard,0,0,SRCCOPY);
Chessboard.DeleteDC();
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);
错误提示Debug Assertion Failed.
sjdev 说的 .DeleteDC(); 对 .问题解决了.谢谢.谢谢两位了.
请问二位.不是说有个类的析构函数自动释放DC么,是哪个?
个人觉得换是CDC的代码简单,好用些.
问题解决 感谢楼上两位 结贴给分.
你是说Chessboard 也就是你这的代码 memDC 定义为函数内的局部变量么?
局部的每次调用函数才创建,调用完函数生命周期就结束了,再次调用函数 会重新定义,所以不需要DeleteDC()么?
谢谢你. 我买了这本书,学习-ing.