关于WTL中显示图片问题
来源:互联网 发布:20岁男鞋推荐 知乎 编辑:程序博客网 时间:2024/06/07 06:50
CBitmap 就可以了
另外参考的帖子-----------------------
基于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 );
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));
}
CFileDialog dlg( TRUE,NULL,NULL,OFN_FILEMUSTEXIST| OFN_HIDEREADONLY,_T("image file (*.jpg;*.bmp)/0*.jpg;*.bmp/0All Files (*.*)/0*.*||"));
CStatic *pStaBmp = new CStatic;
if( dlg.DoModal() == IDOK )
{
LPTSTR strFilePath = dlg.m_ofn.lpstrFile;
if (pStaBmp)
{
CBitmap hbmp;
HBITMAP hbitmap;
HINSTANCE hIns = _Module.GetResourceInstance();
HWND hWnd = pStaBmp->Create(m_hWnd, rcCell, NULL, WS_CHILD | WS_VISIBLE | SS_BITMAP);
hbitmap=(HBITMAP)::LoadImage(hIns,strFilePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); if(hbitmap==NULL)
return FALSE;
hbmp.Attach(hbitmap);
pStaBmp->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
pStaBmp->SetBitmap(hbitmap);
pCell->AddControl(pStaBmp);
m_listControlCell.push_back(pCell);
}
}
CStatic *pStaBmp = new CStatic;
if( dlg.DoModal() == IDOK )
{
LPTSTR strFilePath = dlg.m_ofn.lpstrFile;
if (pStaBmp)
{
CBitmap hbmp;
HBITMAP hbitmap;
HINSTANCE hIns = _Module.GetResourceInstance();
HWND hWnd = pStaBmp->Create(m_hWnd, rcCell, NULL, WS_CHILD | WS_VISIBLE | SS_BITMAP);
hbitmap=(HBITMAP)::LoadImage(hIns,strFilePath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION); if(hbitmap==NULL)
return FALSE;
hbmp.Attach(hbitmap);
pStaBmp->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);
pStaBmp->SetBitmap(hbitmap);
pCell->AddControl(pStaBmp);
m_listControlCell.push_back(pCell);
}
}
- 关于WTL中显示图片问题
- 关于APPLET中显示图片的问题
- WTL Picture Control显示图片
- 关于动态网站中显示图片的问题
- 关于jsp页面中显示中文图片问题
- 关于VB6中代码显示PNG图片的问题
- 关于selector中图片显示的一个小问题
- 关于Qt中QLable显示图片的问题
- 关于wince中图片显示
- 在WTL中利用滚动窗口类CScrollWindowImpl显示BMP图片
- 在WTL中利用滚动窗口类CScrollWindowImpl显示BMP图片
- [ATL/WTL]_[初级]_[关于graphics.DrawImage绘图时显示不正常的问题]
- web中显示图片问题
- qt中图片显示问题
- uiimageView 中图片显示问题
- 关于ListView中异步加载图片时,图片显示错误的问题
- 关于eclipse导出Java项目形成的jar包中没有图片以及图片显示问题
- Jsp中图片显示问题以及显示绝对路径图片问题
- 通过ajax来读取xml里面的数据,以及查询好数据如何写入xml里去 来供ajax读取
- Qt生成工程文件出错的解决方法
- 2010年6月7日(新公司入职,第十周星期一)
- 汉字编码标准
- looks like a function definition, but there is no parameter list; skipping apparent body
- 关于WTL中显示图片问题
- g
- mysoft。data笔记
- Linux下基于Xdialog的Oracle11gR2助手工具(实现Oracle11g 启动、关闭、重启)
- 编程的首要原则
- 如何学习知识
- 复合数据类型,结构体,联合,枚举
- JQUERY 学习应用随笔一
- 这样的日子情何以堪