mfc 中显示图片 转帖
来源:互联网 发布:专业视频剪辑制作软件 编辑:程序博客网 时间:2024/05/22 14:59
http://laokaddk.blog.51cto.com/368606/255221/
基于MFC控件STATIC显示图片数据
基于MFC控件STATIC显示图片数据
1. 在 OnInitDialog 中加入
GetDlgItem(IDC_MY_PIC)->ModifyStyle ( SS_TYPEMASK, SS_OWNERDRAW );
2. 在butto 按钮中加入以下,可以显示多中类型的图片资源
void CDlgpicDlg::OnTest()
{
// TODO: Add your command handler code here
CFileDialog fileDlg(TRUE,NULL,NULL,
OFN_ALLOWMULTISELECT,
_T("Picture Files (*.bmp *.ico *.jpg)|*bmp;*.ico;*jpg|All Files (*.*)|*.*||"),
AfxGetMainWnd());
CString pathName;
if(fileDlg.DoModal ()==IDOK)
{
POSITION mPos=fileDlg.GetStartPosition();
while(mPos!=NULL)
{
pathName=fileDlg.GetNextPathName(mPos);
if(m_pict.LoadPicture(pathName.GetBuffer(pathName.GetLength())))
{
// 防止有透明图片,消除已有的图片信息
CPaintDC dc(this); // device context for painting
CRect rc;
GetDlgItem(IDC_MY_PIC)->GetWindowRect(&rc);
dc.FillSolidRect(rc, RGB(0, 0, 0));
Invalidate();
}
}
}
}
3.给父窗口增加ON_WM_DRAWITEM消息映射函数 在OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)消息映射函数里面绘制控件
void CDlgpicDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your message handler code here and/or call default
if(nIDCtl == IDC_MY_PIC)
{
if ( m_pict.m_pic)
{
RECT rect;
TRACE("--hell-- test---");
HWND hwnd = ::GetDlgItem(this->GetSafeHwnd(), IDC_MY_PIC);
HDC hDC = ::GetDC(::GetDlgItem(this->GetSafeHwnd(),IDC_MY_PIC));
//Get the DC for the CPicture Box
::GetClientRect(::GetDlgItem(this->GetSafeHwnd(), IDC_MY_PIC), &rect);
//Get dimensions of it
m_pict.DrawPicture(hDC, 0, 0, rect.right - rect.left ,rect.bottom - rect.top );
::ReleaseDC(::GetDlgItem(this->GetSafeHwnd(),IDC_MY_PIC), hDC);
}
}
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
总结: 如果在static中需要显示图片,在ONPAINT 中绘画 没有效果,需要这么画:
1)给static控件增加SS_OWNERDRAW属性 GetDlgItem(IDC_MY_PIC)->ModifyStyle ( SS_TYPEMASK, SS_OWNERDRAW ); (也可以在属性面板里设置type=owner draw)
2)给父窗口增加ON_WM_DRAWITEM消息映射函数
3)在OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)消息映射函数里面绘制控件
例如:下面给对话框里的IDC_STATIC_DRAW控件画个蓝色的背景
void CMyDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if(nIDCtl == IDC_STATIC_DRAW)
{
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
pDC->FillSolidRect(10, 10, lpDrawItemStruct->rcItem.right - 20, lpDrawItemStruct->rcItem.bottom - 20, RGB(0, 0, 255));
return;
}
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
另外,还可以这么画
从CStatic继承一个新类,然后增加WM_PAINT消息处理,在OnPaint里面画
例如:
class CMyStatic : public CStatic
{
...
afx_msg void OnPaint();
};
void CMyStatic::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rc;
GetClientRect(rc);
dc.FillSolidRect(rc, RGB(0, 0, 255));
}
- mfc 中显示图片 转帖
- MFC中显示图片
- MFC中显示图片方法
- MFC中JPG图片显示
- MFC中SDI中用GDI+显示图片
- mfc控件中显示opencv图片
- MFC中显示图片——Resource
- MFC在CStatic中显示图片
- MFC picture控件中显示图片
- MFC中显示图片(静态、动态)
- Opencv在MFC中显示图片
- MFC对话框中显示BMP,JPG图片
- MFC中多线程显示相机捕获图片
- vs2015 MFC中动态显示图片
- MFC中picture显示bmp图片方法
- 在mfc中picture控件中显示Mat图片
- MFC显示图片
- MFC对话框显示图片
- 第二篇
- DDL1
- DDL2
- DML知识
- struts中从一个action跳转到另一个action
- mfc 中显示图片 转帖
- JDBC知识
- 聚合函数与分组
- 我的Android开发环境搭建
- 子查询
- 表连接
- JSP基础
- IBM安全报告:上半年漏洞成长36%
- [转]三大电信商出齐半年报 3G用户破2500万