我用下面的方式加载了一个bmp文件,并将它画在窗体上void ShowPicture(CString imageName)
{
CDC *pdc=this->GetDC(); // device context for painting
hbm = (HBITMAP)::LoadImage(NULL,
imageName,
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE);
if (Bitmap.Attach(hbm))//将图像句柄和Cbitmap对象联系起来
{
Bitmap.GetBitmap(&bm);//获取图像尺寸
Bitmap.SetBitmapDimension(bm.bmWidth,bm.bmHeight);
mapWidth=bm.bmWidth;
mapHeight=bm.bmHeight;
CDC memdc;
memdc.CreateCompatibleDC(pdc);
CBitmap *p=memdc.SelectObject(&Bitmap);
pdc->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&memdc,0,0,SRCCOPY);
Bitmap.DeleteObject();
memdc.SelectObject(p);
}
ReleaseDC(pdc);
imageFlag=1;
Invalidate();
UpdateWindow();
}
然后我用下面的方法进行重画,可不知道为什么总是画不出来,有时还会出错。
void CColorStatic::OnPaint() //重画Static
{
if(imageFlag)
{
if (Bitmap.Attach(hbm))//将图像句柄和Cbitmap对象联系起来
{
CPaintDC dc(this);
Bitmap.CreateCompatibleBitmap(&dc,mapWidth,mapHeight);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap *pbmpOld=memdc.SelectObject(&Bitmap);
dc.BitBlt(0,0,mapWidth,mapHeight,&memdc,0,0,SRCCOPY);
}
Invalidate();
UpdateWindow();
}
else{
dc.DrawText(m_strCaption,&rect,DT_CENTER);//将文本画在Static的中央
dc.SelectObject(pOldFont);
}
}请各位大哥指点一二!谢谢先
{
CDC *pdc=this->GetDC(); // device context for painting
hbm = (HBITMAP)::LoadImage(NULL,
imageName,
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE);
if (Bitmap.Attach(hbm))//将图像句柄和Cbitmap对象联系起来
{
Bitmap.GetBitmap(&bm);//获取图像尺寸
Bitmap.SetBitmapDimension(bm.bmWidth,bm.bmHeight);
mapWidth=bm.bmWidth;
mapHeight=bm.bmHeight;
CDC memdc;
memdc.CreateCompatibleDC(pdc);
CBitmap *p=memdc.SelectObject(&Bitmap);
pdc->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&memdc,0,0,SRCCOPY);
Bitmap.DeleteObject();
memdc.SelectObject(p);
}
ReleaseDC(pdc);
imageFlag=1;
Invalidate();
UpdateWindow();
}
然后我用下面的方法进行重画,可不知道为什么总是画不出来,有时还会出错。
void CColorStatic::OnPaint() //重画Static
{
if(imageFlag)
{
if (Bitmap.Attach(hbm))//将图像句柄和Cbitmap对象联系起来
{
CPaintDC dc(this);
Bitmap.CreateCompatibleBitmap(&dc,mapWidth,mapHeight);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap *pbmpOld=memdc.SelectObject(&Bitmap);
dc.BitBlt(0,0,mapWidth,mapHeight,&memdc,0,0,SRCCOPY);
}
Invalidate();
UpdateWindow();
}
else{
dc.DrawText(m_strCaption,&rect,DT_CENTER);//将文本画在Static的中央
dc.SelectObject(pOldFont);
}
}请各位大哥指点一二!谢谢先
解决方案 »
- 关于日历控件一个很怪异的问题。在日历控件触发期间,若弹出其他窗口,会陷入死循环触发。
- MFC Regular Dll中如何弹出非模态对话框??
- 求将贝塞尔曲线离散成若干点的算法
- 怎样给右键菜单添加纵向位图
- 在 MFC 程序中如何安装多个硬件?有驱动程序及相应的INF文件?
- 利用LIBRTMP发送音视频数据到CRTMPServer上
- 自己创建的按钮要响应tab键来获得焦点应该是怎么做呢。
- 这个问题我就不信就我一个人遇到过,求大神解答。。。
- 静态链接的lib,为什么里面很多函数与mfc的冲突,说重复定义
- 如何捕获com中的事件?
- 【转让】VC、Java、Linux及数据库、通信类图书
- 如何实现位图的放大与缩小
Bitmap.CreateCompatibleBitmap(&dc,mapWidth,mapHeight);
你的Bitmap既然attach了一个hBitamp对象,就不要调用这个函数了,我目前就看出这些问题
你把错误信息贴出;来
2、在OnPaint中去掉重绘的语句,这可能就是你出错的原因。
3、程序中有很多漏洞,比如对资源的回收,注意更改。
程序是两个月前写的了,因为方法变了,所以错误信息现在一时也帖不出来。
如果在OnPaint里去掉重画,图片可以显示出来,但进行窗口切换的时候,图片就会被檫掉,所以想在OnPaint里进行重画。