| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2494 人关注过本帖
标题:[求助]在STATIC控件上显示位图
只看楼主 加入收藏
zabbey
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-10-10
收藏
 问题点数:0 回复次数:12 
[求助]在STATIC控件上显示位图

void CBmpViewDlg::OnOpen() //打开按钮
{
// TODO: Add your control notification handler code here
CFileDialog pFiledlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "位图文件(*.bmp)|*.bmp|",NULL);
if(pFiledlg.DoModal())
{
m_strFile = pFiledlg.GetPathName();
}
if(m_strFile == "")
{
//没选择文件
return;
}

hbitmap = (HBITMAP)::LoadImage (::AfxGetInstanceHandle(), m_strFile,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

DrawBmp();//画出来

}

void CBmpViewDlg::DrawBmp()
{
CRect rect;
CStatic* p_bitmap = (CStatic*)GetDlgItem(IDC_IMAGE);
p_bitmap->GetClientRect(&rect);

CWnd *pWnd = GetDlgItem(IDC_IMAGE);
CDC *pDC = pWnd->GetDC();

BITMAP m_Bm;
HBITMAP hOldBmp;
::GetObject(hbitmap, sizeof(m_Bm), &m_Bm);

CDC dcImage;
dcImage.CreateCompatibleDC(pDC);
hOldBmp = (HBITMAP)dcImage.SelectObject(hbitmap);

int x, y;
x = (rect.right - m_Bm.bmWidth) / 2;
y = (rect.bottom - m_Bm.bmHeight) / 2;
pDC->BitBlt(x, y, x + m_Bm.bmWidth, y + m_Bm.bmHeight, &dcImage, 0, 0, SRCCOPY);
dcImage.SelectObject(hOldBmp);
}

hbitmap声明为类成员变量:
HBITMAP hbitmap;

这样能显示出来位图,但是显示出来的位图在窗口最小化后就没有了,并且在打开第二个位图后显示还有重叠,不知道问题出在了哪里。

搜索更多相关主题的帖子: 位图 STATIC 控件 
2007-10-11 14:28
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
收藏
得分:0 
在OnPaint()函数中加上两行

p_bitmap->SetBitmap(NULL);
DrawBmp();

★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-10-11 14:36
zabbey
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-10-10
收藏
得分:0 
以下是引用Janlex在2007-10-11 14:36:02的发言:
在OnPaint()函数中加上两行

p_bitmap->SetBitmap(NULL);
DrawBmp();

解决了最小化图像消失的问题,但是打开第二幅图还是有重叠。


2007-10-11 14:47
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
收藏
得分:0 
晕,在OnOpen()加上p_bitmap->SetBitmap(NULL);

★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-10-11 14:50
zabbey
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-10-10
收藏
得分:0 
以下是引用Janlex在2007-10-11 14:50:44的发言:
晕,在OnOpen()加上p_bitmap->SetBitmap(NULL);

上面我在OnPaint()里也没加p_bitmap->SetBitmap(NULL);加上的话就把显示格式弄乱了,本来都是通过最后那段代码设置成居中显示,加上就又在左上,且只是一个小方格。
在OnOpen()里加上p_bitmap->SetBitmap(NULL);也让格式乱了,而且依然有重叠。

[此贴子已经被作者于2007-10-11 14:59:03编辑过]


2007-10-11 14:58
zabbey
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-10-10
收藏
得分:0 
回复:(Janlex)晕,在OnOpen()加上p_bitmap->SetB...
图片附件: 游客没有浏览图片的权限,请 登录注册




黑的是上一幅图的,绿的是打开的图的。

[此贴子已经被作者于2007-10-11 15:03:08编辑过]


2007-10-11 15:02
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
收藏
得分:0 
我错了.没仔细看你代码,

你STATIC控件显示图用的不是SetBitmap..而是用的bitblt绘上去的..

★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-10-11 15:08
zabbey
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-10-10
收藏
得分:0 
以下是引用Janlex在2007-10-11 15:08:26的发言:
我错了.没仔细看你代码,

你STATIC控件显示图用的不是SetBitmap..而是用的bitblt绘上去的..

是啊,BZ很热心啊!应该有其它方法来擦掉吧。


2007-10-11 15:11
zabbey
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-10-10
收藏
得分:0 

在网上查了一阵,改好了。好费神!


2007-10-11 19:07
zabbey
Rank: 1
等 级:新手上路
帖 子:55
专家分:0
注 册:2007-10-10
收藏
得分:0 

代码:
void CBmpViewDlg::OnOpen()
{
// TODO: Add your control notification handler code here
CFileDialog pFiledlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "位图文件(*.bmp)|*.bmp|",NULL);
if(pFiledlg.DoModal())
{
m_strFile = pFiledlg.GetPathName();
}
if(m_strFile == "")
{
//没选择文件
return;
}

//刷新
//Invalidate();

CRect rect;
CStatic* p_bitmap = (CStatic*)GetDlgItem(IDC_IMAGE);
p_bitmap->GetClientRect(&rect);
InvalidateRect(rect, TRUE);
UpdateWindow();

hbitmap = (HBITMAP)::LoadImage (::AfxGetInstanceHandle(), m_strFile,
IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

DrawBmp();

}

void CBmpViewDlg::DrawBmp()
{
CRect rect;
CStatic* p_bitmap = (CStatic*)GetDlgItem(IDC_IMAGE);
p_bitmap->GetClientRect(&rect);

CWnd *pWnd = GetDlgItem(IDC_IMAGE);
CDC *pDC = pWnd->GetDC();

BITMAP m_Bm;
HBITMAP hOldBmp;
::GetObject(hbitmap, sizeof(m_Bm), &m_Bm);

CDC dcImage;
dcImage.CreateCompatibleDC(pDC);
hOldBmp = (HBITMAP)dcImage.SelectObject(hbitmap);

int x, y;
x = (rect.right - m_Bm.bmWidth) / 2;
y = (rect.bottom - m_Bm.bmHeight) / 2;
pDC->BitBlt(x, y, x + m_Bm.bmWidth, y + m_Bm.bmHeight, &dcImage, 0, 0, SRCCOPY);

dcImage.SelectObject(hOldBmp);

}


2007-10-11 19:07
快速回复:[求助]在STATIC控件上显示位图
数据加载中...
 
   



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

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