想用gdi+实现双缓存画对话框的背景图。//.h
CDC m_memDC;
CBitmap m_memBitmap;
CBitmap * m_pOldBitmap;//.cpp
void CFirstPageDlg::OnPaint()
{
m_memDC.CreateCompatibleDC(NULL);
CDC * pDC = this->GetDC();
m_memBitmap.CreateCompatibleBitmap(pDC, 2000, 2000); m_pOldBitmap = m_memDC.SelectObject(&m_memBitmap);
m_memDC.FillSolidRect(0,0,2000,2000,RGB(100,100,100)); Image img(L"china.jpg");
Graphics g(m_memDC.GetSafeHdc());
g.DrawImage(&img,0,0,img.GetWidth(),img.GetHeight()); m_memDC.SelectObject(m_pOldBitmap); pDC->BitBlt(0,0,200,200,&m_memDC,0,0,SRCCOPY); ReleaseDC(pDC);
}程序崩溃!!!!
弹出一个错误对话框:GameClient.exe has triggered a breakpoint
程序是死在了:
//dbgrptt.c文件的
_CRTIMP void _cdecl _CrtDbgBreak(
void
)
{
DebugBreak();
}//死在这里。请问是哪里画错了
CDC m_memDC;
CBitmap m_memBitmap;
CBitmap * m_pOldBitmap;//.cpp
void CFirstPageDlg::OnPaint()
{
m_memDC.CreateCompatibleDC(NULL);
CDC * pDC = this->GetDC();
m_memBitmap.CreateCompatibleBitmap(pDC, 2000, 2000); m_pOldBitmap = m_memDC.SelectObject(&m_memBitmap);
m_memDC.FillSolidRect(0,0,2000,2000,RGB(100,100,100)); Image img(L"china.jpg");
Graphics g(m_memDC.GetSafeHdc());
g.DrawImage(&img,0,0,img.GetWidth(),img.GetHeight()); m_memDC.SelectObject(m_pOldBitmap); pDC->BitBlt(0,0,200,200,&m_memDC,0,0,SRCCOPY); ReleaseDC(pDC);
}程序崩溃!!!!
弹出一个错误对话框:GameClient.exe has triggered a breakpoint
程序是死在了:
//dbgrptt.c文件的
_CRTIMP void _cdecl _CrtDbgBreak(
void
)
{
DebugBreak();
}//死在这里。请问是哪里画错了
解决方案 »
- VS2005 专业版和企业版有哪些区别?
- int *element=new int(1);是什么意思?
- 急!用vc生成winsock程序的时候,出现error LNK2001: unresolved external symbol _WinMain@16
- 如何将JPG图片转换为BMP图片
- 【1000分】【1000分】请问有哪位大侠熟悉RS-274X文件格式,小弟有几个问题想请教!谢谢
- 请问有关线程控制的问题!
- 工具栏使用自画的24位BMP图该如何做?
- 请问如何设置标题?
- 谁知道哪里有PC的弹窗联盟?类似于QQ新闻弹窗那种
- 阴历的算法??还有Ascii码????
- 自己写的dll,为什么加载到我的项目里以后无法设置断点
- 用MFC 怎样画实心圆
需要加一个这个进去,但是你这个有问题,无法显示出来,你还要再看看
pDC->BitBlt(0,0,200,200,&m_memDC,0,0,SRCCOPY);????--->?????pDC->BitBlt(0,0,200,200,&m_memDC,0,0,SRCCOPY);
m_memDC.SelectObject(m_pOldBitmap); 不过这个应该不会崩溃,你try,catch下。
m_memDC.CreateCompatibleDC( NULL );
CDC * pDC = this->GetDC();
m_memBitmap.CreateCompatibleBitmap(pDC, 2000, 2000);然后去CFirstPageDlg的OnInitialDlg或者其他初始化得地方添加:
m_memDC.CreateCompatibleDC( NULL );
CDC * pDC = this->GetDC();
m_memBitmap.CreateCompatibleBitmap(pDC, 2000, 2000);
你的问题好像是在DC被重复创建了,所以产生错误, OnPaint可不是执行一次的啊 每次执行都要把你前面没有销毁的CDC和 BMP对象重新创建一遍肯定会出错的。还有一种方法就是,不要使用全局变量,直接把m_memDC和m_memBitmap定义也放到OnPaint中去,也不会出错。另外,我一般不会再OnPaint中使用内存绘图,我都放到其他的地方,鼠标移动,落下,事件触发的地方。参考 呵呵
ReleaseDC(pDC);
m_memDC你不停的创建,不停的select。
能不死吗?
CBitmap m_memBitmap;
CBitmap * m_pOldBitmap;改为局部变量