在vc控件中显示图片,点击按钮变换图片
2012-11-11 17:15
471 查看
先说一下实现的功能:
简单地说,就是,在一个对话框中有一个Picture控件和一个浏览按钮,就这两个东东,需要实现的功能是,点击浏览按钮的时候出现一个打开对话框,选择一张图片,点击确定后,将图片显示到Picture控件上。
开始界面如下:
点击浏览,选中图片后,点击确定后显示图片如下:
代码实现(我是在一个对话框中实现的这个功能):
void CShowPicDlg::OnScan()//点击浏览按钮的响应函数
{
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrFilter = "BMP Files(*.bmp)\0*.bmp\0\0"; //在此,只能显示.bmp的图片
fileDlg.m_ofn.lpstrTitle = "图片选择对话框";
fileDlg.m_ofn.lpstrDefExt = "*.bmp";
fileDlg.m_ofn.lpstrInitialDir = "c:\\";
if(IDOK == fileDlg.DoModal()) //打开文件
{
m_imagePath = fileDlg.GetPathName(); //保存图片路径的成员变量
if(!m_imagePath.IsEmpty()) //确定是否已经选中了图片,后面需要分辨这两种情况
m_hasBmp = TRUE;
else
m_hasBmp = FALSE;
m_imageName = fileDlg.GetFileName(); //保存图片名字
SetDlgItemText(IDC_EDIT_IMAGEPATH, m_imagePath); //将路径名显示在浏览按钮左边的编辑框中
PostMessageWM_ON_SHOW_PIC, 0, 0); //发送显示图片的消息
}
}
自定义显示图片的消息响应函数:
#define WM_ON_SHOW_PIC WM_USER + 10
afx_msg void OnShowPic(); //消息声明
ON_MESSAGE(WM_ON_RENDER_PIC, OnShowPic)
void CShowPicDlg::OnShowPic() //函数实现
{
if( m_bmp.m_hObject != NULL )//判断
m_bmp.DeleteObject();
HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
m_imagePath, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
if(hbmp == NULL) //加载图片失败,刷新控件,并返回
{
Invalidate();
return ;
}
//该断程序用来取得加载的BMP的信息
m_bmp.Attach(hbmp);
DIBSECTION ds;
BITMAPINFOHEADER &bminfo = ds.dsBmih;
m_bmp.GetObject(sizeof(ds), &ds);
int cx=bminfo.biWidth;//获取图像宽度
int cy=bminfo.biHeight; //获取图像高度
CRect rect;
GetDlgItem(IDC_STC_PIC)->GetWindowRect(&rect);
ScreenToClient(&rect);
GetDlgItem(IDC_STC_PIC)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整控件大小
InvalidateRect(rect); //刷新对话框,执行OnPait函数
return ;
}
void CShowPicDlg::OnPaint()
{
CPaintDC dc(GetDlgItem(IDC_STC_PIC)); //得到Picture控件的DC
CRect rcclient;
GetDlgItem(IDC_STC_PIC)->GetClientRect(&rcclient);
CDC memdc;
memdc.CreateCompatibleDC(&dc); //创建兼容DC
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height()); //创建兼容位图,长宽是控件的长宽
memdc.SelectObject(&bitmap); //选择位图到兼容DC
CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);
CBrush brush;
if(m_hasBmp) //如果有图像
brush.CreatePatternBrush(&m_bmp); //用图像填充画刷
else
brush.CreateSolidBrush(m_bkClr); //否则,用颜色填充(你想用什么颜色就用什么颜色)
dc.FillRect(rcclient, &brush); //填充
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&memdc, rcclient.left, rcclient.top,SRCPAINT);
brush.DeleteObject();
}
完毕,主要实现就是以上这些,希望能帮助到朋友们...
简单地说,就是,在一个对话框中有一个Picture控件和一个浏览按钮,就这两个东东,需要实现的功能是,点击浏览按钮的时候出现一个打开对话框,选择一张图片,点击确定后,将图片显示到Picture控件上。
开始界面如下:
点击浏览,选中图片后,点击确定后显示图片如下:
代码实现(我是在一个对话框中实现的这个功能):
void CShowPicDlg::OnScan()//点击浏览按钮的响应函数
{
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrFilter = "BMP Files(*.bmp)\0*.bmp\0\0"; //在此,只能显示.bmp的图片
fileDlg.m_ofn.lpstrTitle = "图片选择对话框";
fileDlg.m_ofn.lpstrDefExt = "*.bmp";
fileDlg.m_ofn.lpstrInitialDir = "c:\\";
if(IDOK == fileDlg.DoModal()) //打开文件
{
m_imagePath = fileDlg.GetPathName(); //保存图片路径的成员变量
if(!m_imagePath.IsEmpty()) //确定是否已经选中了图片,后面需要分辨这两种情况
m_hasBmp = TRUE;
else
m_hasBmp = FALSE;
m_imageName = fileDlg.GetFileName(); //保存图片名字
SetDlgItemText(IDC_EDIT_IMAGEPATH, m_imagePath); //将路径名显示在浏览按钮左边的编辑框中
PostMessageWM_ON_SHOW_PIC, 0, 0); //发送显示图片的消息
}
}
自定义显示图片的消息响应函数:
#define WM_ON_SHOW_PIC WM_USER + 10
afx_msg void OnShowPic(); //消息声明
ON_MESSAGE(WM_ON_RENDER_PIC, OnShowPic)
void CShowPicDlg::OnShowPic() //函数实现
{
if( m_bmp.m_hObject != NULL )//判断
m_bmp.DeleteObject();
HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
m_imagePath, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
if(hbmp == NULL) //加载图片失败,刷新控件,并返回
{
Invalidate();
return ;
}
//该断程序用来取得加载的BMP的信息
m_bmp.Attach(hbmp);
DIBSECTION ds;
BITMAPINFOHEADER &bminfo = ds.dsBmih;
m_bmp.GetObject(sizeof(ds), &ds);
int cx=bminfo.biWidth;//获取图像宽度
int cy=bminfo.biHeight; //获取图像高度
CRect rect;
GetDlgItem(IDC_STC_PIC)->GetWindowRect(&rect);
ScreenToClient(&rect);
GetDlgItem(IDC_STC_PIC)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整控件大小
InvalidateRect(rect); //刷新对话框,执行OnPait函数
return ;
}
void CShowPicDlg::OnPaint()
{
CPaintDC dc(GetDlgItem(IDC_STC_PIC)); //得到Picture控件的DC
CRect rcclient;
GetDlgItem(IDC_STC_PIC)->GetClientRect(&rcclient);
CDC memdc;
memdc.CreateCompatibleDC(&dc); //创建兼容DC
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height()); //创建兼容位图,长宽是控件的长宽
memdc.SelectObject(&bitmap); //选择位图到兼容DC
CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);
CBrush brush;
if(m_hasBmp) //如果有图像
brush.CreatePatternBrush(&m_bmp); //用图像填充画刷
else
brush.CreateSolidBrush(m_bkClr); //否则,用颜色填充(你想用什么颜色就用什么颜色)
dc.FillRect(rcclient, &brush); //填充
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&memdc, rcclient.left, rcclient.top,SRCPAINT);
brush.DeleteObject();
}
完毕,主要实现就是以上这些,希望能帮助到朋友们...
相关文章推荐
- Fileupload控件点击“浏览”按钮,选择图片后需要立即显示所选择的图片
- 点击按钮显示对应的图片
- 按钮点击,图片改变,显示点击效果
- 点击按钮 方块变换大小 颜色 隐藏 显示 恢复
- VC按钮显示图片
- 让验证控件一开始就显示红星或点击按钮后弹出对话框再显示红星
- phpcms上传图片时,点击【上传到服务器上】按钮,显示:缺少图像源地址的解决方法
- 按钮控件显示图片和图标
- 用按钮打开对话框选取图片按大小显示在控件中
- VC下利用Picture控件实现png图片按钮(鼠标初始、按下、松开、获得焦点四种状态)
- VC下利用Picture控件实现png图片按钮(鼠标初始、按下、松开、获得焦点四种状态)
- Date Time Picker时间控件只能显示日期或时分秒,我怎么才能让它在界面上同时显示出两者,并且保证点击下拉按钮时可编辑日期? 2010-11-24 19:47
- ecshop 点击商品图片弹出带关闭按钮的遮罩层 显示商品库存
- VC窗口(控件)中显示指定 URL 对应图片
- VC为按钮控件添加图片的方法
- VC下利用Picture控件实现png图片按钮(鼠标初始、按下、松开、获得焦点四种状态)
- VC下利用Picture控件实现png图片按钮(鼠标初始、按下、松开、获得焦点四种状态)
- 一屏只显示横向排列的四张图片,如何控制点击“向下”按钮过快,导致出现图片不能在一屏中垂直居中显示?
- FileUpload控件“浏览。。”按钮显示的“浏览。。”用图片显示
- 黑马程序员之WinForm编程基础学习笔记:页面上有一张图片,默认是隐藏的,用户在文本框中输入身份证号(131226198105223452),点击按钮,如果年龄大于18岁则显示图片。