MFC打开多张图片,并以缩略图的形式打开,但是程序有异常,大家帮忙看看咋回事啊
MFC打开多张图片,并以缩略图的形式打开,但是程序有错误,大家帮忙看看怎么回事啊???
void CtestView::OnOpen()
{
// TODO: 在此添加命令处理程序代码
HDC hdc = ::GetDC(m_hWnd) ;
GetClientRect(rect);
CString filename;
CString filter;
filter="所有文件(*.*)|*.bmp;*.jpg;*.gif;*.tiff| BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| GIF(*.gif)|*.gif| TIFF(*.tif)|*.tif||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_HIDEREADONLY,filter,NULL);
int MIN_FILE_NUMBER = 20;//最多同时选中文件数
dlg.m_ofn.lpstrFile = new TCHAR[_MAX_PATH * MIN_FILE_NUMBER]; //重新定义缓冲区大小
memset(dlg.m_ofn.lpstrFile, 0, _MAX_PATH * MIN_FILE_NUMBER); //初始化定义的缓冲区
dlg.m_ofn.nMaxFile = _MAX_PATH * MIN_FILE_NUMBER;
if(IDOK==dlg.DoModal())
{
POSITION pos = dlg.GetStartPosition();
while (NULL != pos)
{
filename =dlg.GetNextPathName(pos);//获取文件名
cimage.Load(filename);
}
}
CListCtrl m_ListCtrl;
m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS, CRect(0,0,400,200), this, 0);
m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle()|LVS_EX_SUBITEMIMAGES );
CImageList m_Imagelist;
m_Imagelist.Create(24, 24,ILC_COLOR4|ILC_MASK, 4, 4);
int imageCount=0;
CString *pImageNameList=&filename;
for (int i=0;i<imageCount;i++)
{
cimage.Load(pImageNameList[i],CXIMAGE_FORMAT_BMP);
cimage.Resample(96,96,2);
CDC *pDC = GetDC();
HBITMAP hBit=cimage.MakeBitmap(pDC->GetSafeHdc());
CBitmap bmp;
bmp.Attach(hBit);
m_Imagelist.Add(&bmp,RGB(255, 255, 255));
bmp.Detach();
}
m_ListCtrl.SetImageList(&m_Imagelist,LVSIL_SMALL);
LVITEM item;
item.mask=LVIF_TEXT|LVIF_IMAGE;
item.iItem=0;
item.iSubItem=0;
item.pszText="";
item.iImage=0;
m_ListCtrl.InsertItem(&item);
m_ListCtrl.SetItemText(0,0,pImageNameList[0]);
for (int i=1;i<imageCount;i++)
{
item.iItem=i;
item.iImage=i;
m_ListCtrl.InsertItem(&item);
m_ListCtrl.SetItemText(i,0,pImageNameList[i]);
}
DWORD dwOldStyle,dwNewStyle;
dwNewStyle = LVS_ICON;
HWND hWndLt=m_ListCtrl.GetSafeHwnd();
dwOldStyle=GetWindowLong(hWndLt, GWL_STYLE);
if((dwOldStyle & LVS_TYPEMASK)!=LVS_ICON)
{
dwOldStyle &=~LVS_TYPEMASK;
dwNewStyle |=dwOldStyle;
SetWindowLong(hWndLt, GWL_STYLE, dwNewStyle);
}
}
------解决思路----------------------
CListCtrl m_ListCtrl; 和 CImageList m_Imagelist; 不要用局部变量, 作用域你懂的
void CtestView::OnOpen()
{
// TODO: 在此添加命令处理程序代码
HDC hdc = ::GetDC(m_hWnd) ;
GetClientRect(rect);
CString filename;
CString filter;
filter="所有文件(*.*)|*.bmp;*.jpg;*.gif;*.tiff| BMP(*.bmp)|*.bmp| JPG(*.jpg)|*.jpg| GIF(*.gif)|*.gif| TIFF(*.tif)|*.tif||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_HIDEREADONLY,filter,NULL);
int MIN_FILE_NUMBER = 20;//最多同时选中文件数
dlg.m_ofn.lpstrFile = new TCHAR[_MAX_PATH * MIN_FILE_NUMBER]; //重新定义缓冲区大小
memset(dlg.m_ofn.lpstrFile, 0, _MAX_PATH * MIN_FILE_NUMBER); //初始化定义的缓冲区
dlg.m_ofn.nMaxFile = _MAX_PATH * MIN_FILE_NUMBER;
if(IDOK==dlg.DoModal())
{
POSITION pos = dlg.GetStartPosition();
while (NULL != pos)
{
filename =dlg.GetNextPathName(pos);//获取文件名
cimage.Load(filename);
}
}
CListCtrl m_ListCtrl;
m_ListCtrl.Create(WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_REPORT|LVS_EDITLABELS, CRect(0,0,400,200), this, 0);
m_ListCtrl.SetExtendedStyle(m_ListCtrl.GetExtendedStyle()|LVS_EX_SUBITEMIMAGES );
CImageList m_Imagelist;
m_Imagelist.Create(24, 24,ILC_COLOR4|ILC_MASK, 4, 4);
int imageCount=0;
CString *pImageNameList=&filename;
for (int i=0;i<imageCount;i++)
{
cimage.Load(pImageNameList[i],CXIMAGE_FORMAT_BMP);
cimage.Resample(96,96,2);
CDC *pDC = GetDC();
HBITMAP hBit=cimage.MakeBitmap(pDC->GetSafeHdc());
CBitmap bmp;
bmp.Attach(hBit);
m_Imagelist.Add(&bmp,RGB(255, 255, 255));
bmp.Detach();
}
m_ListCtrl.SetImageList(&m_Imagelist,LVSIL_SMALL);
LVITEM item;
item.mask=LVIF_TEXT|LVIF_IMAGE;
item.iItem=0;
item.iSubItem=0;
item.pszText="";
item.iImage=0;
m_ListCtrl.InsertItem(&item);
m_ListCtrl.SetItemText(0,0,pImageNameList[0]);
for (int i=1;i<imageCount;i++)
{
item.iItem=i;
item.iImage=i;
m_ListCtrl.InsertItem(&item);
m_ListCtrl.SetItemText(i,0,pImageNameList[i]);
}
DWORD dwOldStyle,dwNewStyle;
dwNewStyle = LVS_ICON;
HWND hWndLt=m_ListCtrl.GetSafeHwnd();
dwOldStyle=GetWindowLong(hWndLt, GWL_STYLE);
if((dwOldStyle & LVS_TYPEMASK)!=LVS_ICON)
{
dwOldStyle &=~LVS_TYPEMASK;
dwNewStyle |=dwOldStyle;
SetWindowLong(hWndLt, GWL_STYLE, dwNewStyle);
}
}
------解决思路----------------------
CListCtrl m_ListCtrl; 和 CImageList m_Imagelist; 不要用局部变量, 作用域你懂的