gheg
08-04-2006, 12:05
Salve, grazie ai consigli del forum sono riuscito a realizzare una versione funzionante di una finestra che consente di scorrere delle immagini contenute in una directory. Il codice che riporto sotto (e che per il momento visualizza n volte una stessa immagine) funziona perfettamente ma non quando si caricano delle immagini in toni di grigio (BMP ad 8 bit per la precisione).
if (GetFolder(&directorydaelaborare, "Selezionare la directory...", NULL, NULL, NULL)) {
int index =0;
SetDlgItemText(hDlg,IDC_NOMEDIRECTORY, directorydaelaborare);
CFileFind finder;
CString strWildcard(directorydaelaborare);
strWildcard.TrimRight("\\"); // Slow but sure
strWildcard += _T("\\*.BMP");
BOOL bWorking = finder.FindFile(strWildcard);
CStringArray elencofiles;
m_TopImage = ImageList_Create(313, 26, ILC_COLOR, 0, 1000);
HBITMAP bmp;
ListView_SetImageList(GetDlgItem(hDlg,IDC_LIST1),m_TopImage ,LVSIL_NORMAL);
lvi.mask= LVIF_IMAGE |LVIF_TEXT | LVIF_PARAM;
lvi.iSubItem=0;
lvi.lParam =0 ;
int indice = 0;
while (bWorking)
{
BITMAP stBitmap;
HBITMAP miaimmagine = NULL;
miaimmagine = (HBITMAP)LoadImage(NULL, "c:\\img0001.bmp", IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_LOADFROMFILE | LR_DEFAULTSIZE); //LR_CREATEDIBSECTION |
int verifica = 0;
verifica = ImageList_Add(m_TopImage,(HBITMAP)miaimmagine,(HBITMAP)RGB( 255, 255, 255 ));
bWorking = finder.FindNextFile();
if (finder.IsDots()) continue;
if (finder.IsDirectory()) continue; //salta '.', '..' e directory
//CString str = finder.GetFilePath();
CString str = finder.GetFileName();
elencofiles.Add(str);
SendMessage(h_Elencofiles, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) str);
lvi.pszText = str.GetBuffer(str.GetLength());
lvi.iImage = indice; //1,2
ListView_InsertItem(GetDlgItem(hDlg,IDC_LIST1), &lvi);
indice++;
}
finder.Close();
UpdateWindow(GetDlgItem(hDlg,IDC_LIST1));
}// if getfolder non vuota
Come potrei risolvere?
if (GetFolder(&directorydaelaborare, "Selezionare la directory...", NULL, NULL, NULL)) {
int index =0;
SetDlgItemText(hDlg,IDC_NOMEDIRECTORY, directorydaelaborare);
CFileFind finder;
CString strWildcard(directorydaelaborare);
strWildcard.TrimRight("\\"); // Slow but sure
strWildcard += _T("\\*.BMP");
BOOL bWorking = finder.FindFile(strWildcard);
CStringArray elencofiles;
m_TopImage = ImageList_Create(313, 26, ILC_COLOR, 0, 1000);
HBITMAP bmp;
ListView_SetImageList(GetDlgItem(hDlg,IDC_LIST1),m_TopImage ,LVSIL_NORMAL);
lvi.mask= LVIF_IMAGE |LVIF_TEXT | LVIF_PARAM;
lvi.iSubItem=0;
lvi.lParam =0 ;
int indice = 0;
while (bWorking)
{
BITMAP stBitmap;
HBITMAP miaimmagine = NULL;
miaimmagine = (HBITMAP)LoadImage(NULL, "c:\\img0001.bmp", IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_LOADFROMFILE | LR_DEFAULTSIZE); //LR_CREATEDIBSECTION |
int verifica = 0;
verifica = ImageList_Add(m_TopImage,(HBITMAP)miaimmagine,(HBITMAP)RGB( 255, 255, 255 ));
bWorking = finder.FindNextFile();
if (finder.IsDots()) continue;
if (finder.IsDirectory()) continue; //salta '.', '..' e directory
//CString str = finder.GetFilePath();
CString str = finder.GetFileName();
elencofiles.Add(str);
SendMessage(h_Elencofiles, LB_ADDSTRING, 0, (LPARAM) (LPCTSTR) str);
lvi.pszText = str.GetBuffer(str.GetLength());
lvi.iImage = indice; //1,2
ListView_InsertItem(GetDlgItem(hDlg,IDC_LIST1), &lvi);
indice++;
}
finder.Close();
UpdateWindow(GetDlgItem(hDlg,IDC_LIST1));
}// if getfolder non vuota
Come potrei risolvere?