本人刚开始学vc,现在想实现一个显示图片功能:点击对话框的打开图片按钮后,用户可以选择输入bmp格式的图片,并在对话框中的picture显示出来!请各位高手能否指点指点啊!在此先谢谢啦!
解决方案 »
- 在线等,想实现:当鼠标位于按钮区域时触发某个事件。
- sdk里面的例子 怎么运行?
- Edit框里部分日文显示不出来,怎么办呢?
- wav文件的波形是如何形成的
- 急!再请教一个算法问题!谢谢各位!
- 请教:在QQ中发送短消息时,可以察看聊天记录,就好像界面增加了一块,这是如何实现的?
- 怎样打开ps格式的文件?
- 在资源管理器中结束某程序,没有把声音消除,什么原因?
- 一个stream!=NULL 的问题
- 在VC中调用COM组件,为什么非要放一个控件进去才可以调用成功?
- 一个有关问题,用vs2010开发的mfc单文档office Ribbon类型程序,关闭类视图、属性页、输出窗口,就再也打不开了
- 有C729采集卡,想基于此做一个图像采集程序,有sdk包。
CBitmap m_bmp;
然后我们在对话框中加入一个picture 标签,名为IDC_STATIC1,然后:BOOL CDisplayPic::OnInitDialog()
{
CDialog::OnInitDialog();
if( m_bmp.m_hObject != NULL )//判断
m_bmp.DeleteObject();
//载入图片
HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"c:\\aaa.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
if( hbmp == NULL )
return FALSE;
//该断程序用来取得加载的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_STATIC1)->GetWindowRect(&rect);
ScreenToClient(&rect);
GetDlgItem(IDC_STATIC1)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整大小
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}图片加载成功了,标签大小也适应了,下面就是绘制绘制图像了,打开类向导,重载WM_PAINT消息void CDisplayPic::OnPaint()
{
//////////////以下三种情况任选一种会是不同效果(只能一种存在)/////////// //CPaintDC dc(this); //若用此句,得到的是对话框的DC,图片将被绘制在对话框上.
CPaintDC dc(GetDlgItem(IDC_STATIC1)); //用此句,得到picture控件的DC,图像将被绘制在控件上
//CDC dc;
//dc.m_hDC=::GetDC(NULL); //若用此两句,得到的是屏幕的DC,图片将被绘制在屏幕上
/////////////////////////////////////////////////////// CRect rcclient;
GetDlgItem(IDC_STATIC1)->GetClientRect(&rcclient); CDC memdc;
memdc.CreateCompatibleDC(&dc); CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
memdc.SelectObject( &bitmap ); CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0); CDC maskdc;
maskdc.CreateCompatibleDC(&dc); CBitmap maskbitmap;
maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);
maskdc.SelectObject( &maskbitmap );
maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,
rcclient.left, rcclient.top, SRCCOPY); CBrush brush;
brush.CreatePatternBrush(&m_bmp);
dc.FillRect(rcclient, &brush);
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&memdc, rcclient.left, rcclient.top,SRCPAINT);
brush.DeleteObject();
// Do not call CDialog::OnPaint() for painting messages
}
方法1: 更改属性 1)Picture Control属性 直接关联上image 并更改type为Bitmap
方法2: 添加控件变量为PictureEx对象, 直接m_pic1.LoadBitmap(IDB_BITMAP1);
PictureEx类网上搜 uBmpResource:图片ID; uCtrlResource: Picture控件ID
void SetBitmap(UINT uBmpResource, UINT uCtrlResource)
{
HBITMAP hBitmap;
CStatic *pStatic = (CStatic *)GetDlgItem(uCtrlResource);
hBitmap = (HBITMAP)LoadImage(
AfxGetInstanceHandle(),
MAKEINTRESOURCE(uBmpResource),
IMAGE_BITMAP,
0,
0,
LR_LOADMAP3DCOLORS);
pStatic->ModifyStyle(0xF, SS_BITMAP);
pStatic->SetBitmap(hBitmap);
}