关于VC++6.0MFC,打开一张jpg图片并且以缩略图的形式显示在列表控件里

时间:2021-03-16 20:32:56
我想点击一个打开按钮,然后弹出选择文件的窗口,选择一张jpg图片,然后这张图片以缩略图的形式显示在列表控件中。我是新手,太菜啦,前面的部分我会,主要是在列表控件中显示上网找了一天,也没实现。。抓狂啦。。急求。。。最好能写个方法,要代码,不要说用什么什么,那样即使告诉我用什么我也不会用滴,我是菜鸟。。谢谢啦。。

1 个解决方案

#1


发展缩略图ListView控件,请参阅以下部分为一步一步的操作。创建ListImage项目创建一个新项目,使用VC - 的MFC AppWizard(EXE)。。选择在向导对话框的选项 - 第1步。完成该向导。
现在,新的项目中的类添加到工作区(你可以看到从项目工作区树的FileView选项卡类文件。创建缩略图ListImage类转到ClassView选项卡,选择项目名称,就可以通过点击鼠标右键添加一个新的MFC类。作为该基类选择的CListCtrl。现在,在项目工作区,将创建新的类。如何绑定到ListControl的类?从ResourceView中选择对话的形式。从形式对话框中点击鼠标右键,从弹出菜单中选择类向导。现在去会员变截面选择ListControl的控制清单。按Add Variable按钮添加ListControl的变量。选择新创建的类的名称中添加成员变量的形式(ClistImageCtrl或UR类的名称)的变量的类型。启用列表控件拖放文件??/ H3>从ResourceView中选择对话的形式。打开列表控件的属性窗口。在该检查"接受文件??从扩展样式检查框。获取从资源管理器中删除的文件从ClassView中选择ListImage类。打开那个类的向导。添加WM_DROPFILES消息的功能。OnDropFiles()函数将被自动添加到类中。void CListImageCtrl::OnDropFiles(HDROP hDropInfo) 

{

    WORD wNumFilesDropped = DragQueryFile(hDropInfo, -1, NULL, 0);



    CString firstFile="";

    CFile Cf;

    DWORD TmpVal;

    char szText[MAX_PATH];

    int kk=0;

    int tTot=(int)wNumFilesDropped;

    int m_TotCount;



    for (WORD x = 0 ; x < wNumFilesDropped; x++) 

    {

        kk++;

        // Get the number of bytes required by the file's full pathname

        WORD wPathnameSize = DragQueryFile(hDropInfo, x, NULL, 0);



        // Allocate memory to contain full pathname & zero byte

        char * npszFile = (char *) LocalAlloc(LPTR, wPathnameSize += 1);



        // If not enough memory, skip this one

        if (npszFile == NULL) continue;

        DragQueryFile(hDropInfo, x, npszFile, wPathnameSize);



        if (firstFile=="")

            firstFile=npszFile;



        CString nFileText;

        CString nPath;

        CString pItemText=npszFile;

        CFile Cf;



        int i=pItemText.ReverseFind('\\');



        nFileText=pItemText.Mid(i+1);

        nPath=pItemText.Left(i+1);

        i=nFileText.Find("%");

        if (i==-1)

        {

            i=pItemText.Find(_T(".jpg"),0);

            if (i==-1)

                i=pItemText.Find(_T(".jpeg"),0);

            if (i==-1)

                i=pItemText.Find(_T(".JPG"),0);

            if (i==-1)

                i=pItemText.Find(_T(".JPEG"),0);



            if (i!=-1)

            {

                m_TotCount=GetItemCount();

                InsertItem(m_TotCount,nFileText,0);

                SetItemText(m_TotCount, 1, nPath);

                //Get File size

                DoEvents();

                if (Cf.Open(pItemText,0,0)==TRUE)

                {

                    TmpVal = Cf.GetLength();

                    wsprintf(szText, "%lu", TmpVal);

                    if (TmpVal>1024)

                    {

                        double kTmpVal=TmpVal;

                        double kdvTmp=kTmpVal/1024;

                        TmpVal=TmpVal/1024;

                        if (TmpVal>1024)

                        {

                            double dTmpVal=TmpVal;

                            double dvTmp=dTmpVal/1024;

                            CString szT= 

                              ConvertDoubleToString(dvTmp) + _T(" MB"); 

                            wsprintf(szText, "%s", szT);

                        }

                        else

                        {

                            CString kszT= 

                              ConvertDoubleToString(kdvTmp) + _T(" KB"); 

                            wsprintf(szText, "%s", kszT);

                        }

                    }

                    else

                        wsprintf(szText, "%lu BYTES", TmpVal);

 

                    SetItemText(m_TotCount, 2, szText);

                }

                Cf.Close();

                HBITMAP bitm=LoadPicture(pItemText);

                if (bitm!=NULL)

                {

                    CBitmap*    pImage = NULL;    

                    pImage = new CBitmap();                    

                    pImage->Attach(bitm);

                    int imgP=m_imageList.Add(pImage,RGB(0,0,0));

                    SetItem(m_TotCount, 0, LVIF_IMAGE, NULL, imgP,0, 0, 0);

                }

            }

        }



        // clean up

        LocalFree(npszFile);

    }



    // Free the memory block containing the dropped-file information

    DragFinish(hDropInfo);



    // if this was a shortcut, we need to expand it to the target path

    int result=GetItemCount();

    SetItemState(result, LVIS_SELECTED | 

        LVIS_FOCUSED | LVIS_ACTIVATING, 

        LVIS_SELECTED | LVIS_FOCUSED | LVIS_ACTIVATING); 

    //m_ProgList.SetActiveItem(k);

    //m_ProgList.SetFocus();

    result--;

    EnsureVisible(result, TRUE);

    SetFocus();

    SetRedraw(TRUE);

    RedrawWindow(NULL,NULL);



    CListCtrl::OnDropFiles(hDropInfo);

}
创建图片文件的缩略图形象LoadPicture函数添加到ListImage类。

#1


发展缩略图ListView控件,请参阅以下部分为一步一步的操作。创建ListImage项目创建一个新项目,使用VC - 的MFC AppWizard(EXE)。。选择在向导对话框的选项 - 第1步。完成该向导。
现在,新的项目中的类添加到工作区(你可以看到从项目工作区树的FileView选项卡类文件。创建缩略图ListImage类转到ClassView选项卡,选择项目名称,就可以通过点击鼠标右键添加一个新的MFC类。作为该基类选择的CListCtrl。现在,在项目工作区,将创建新的类。如何绑定到ListControl的类?从ResourceView中选择对话的形式。从形式对话框中点击鼠标右键,从弹出菜单中选择类向导。现在去会员变截面选择ListControl的控制清单。按Add Variable按钮添加ListControl的变量。选择新创建的类的名称中添加成员变量的形式(ClistImageCtrl或UR类的名称)的变量的类型。启用列表控件拖放文件??/ H3>从ResourceView中选择对话的形式。打开列表控件的属性窗口。在该检查"接受文件??从扩展样式检查框。获取从资源管理器中删除的文件从ClassView中选择ListImage类。打开那个类的向导。添加WM_DROPFILES消息的功能。OnDropFiles()函数将被自动添加到类中。void CListImageCtrl::OnDropFiles(HDROP hDropInfo) 

{

    WORD wNumFilesDropped = DragQueryFile(hDropInfo, -1, NULL, 0);



    CString firstFile="";

    CFile Cf;

    DWORD TmpVal;

    char szText[MAX_PATH];

    int kk=0;

    int tTot=(int)wNumFilesDropped;

    int m_TotCount;



    for (WORD x = 0 ; x < wNumFilesDropped; x++) 

    {

        kk++;

        // Get the number of bytes required by the file's full pathname

        WORD wPathnameSize = DragQueryFile(hDropInfo, x, NULL, 0);



        // Allocate memory to contain full pathname & zero byte

        char * npszFile = (char *) LocalAlloc(LPTR, wPathnameSize += 1);



        // If not enough memory, skip this one

        if (npszFile == NULL) continue;

        DragQueryFile(hDropInfo, x, npszFile, wPathnameSize);



        if (firstFile=="")

            firstFile=npszFile;



        CString nFileText;

        CString nPath;

        CString pItemText=npszFile;

        CFile Cf;



        int i=pItemText.ReverseFind('\\');



        nFileText=pItemText.Mid(i+1);

        nPath=pItemText.Left(i+1);

        i=nFileText.Find("%");

        if (i==-1)

        {

            i=pItemText.Find(_T(".jpg"),0);

            if (i==-1)

                i=pItemText.Find(_T(".jpeg"),0);

            if (i==-1)

                i=pItemText.Find(_T(".JPG"),0);

            if (i==-1)

                i=pItemText.Find(_T(".JPEG"),0);



            if (i!=-1)

            {

                m_TotCount=GetItemCount();

                InsertItem(m_TotCount,nFileText,0);

                SetItemText(m_TotCount, 1, nPath);

                //Get File size

                DoEvents();

                if (Cf.Open(pItemText,0,0)==TRUE)

                {

                    TmpVal = Cf.GetLength();

                    wsprintf(szText, "%lu", TmpVal);

                    if (TmpVal>1024)

                    {

                        double kTmpVal=TmpVal;

                        double kdvTmp=kTmpVal/1024;

                        TmpVal=TmpVal/1024;

                        if (TmpVal>1024)

                        {

                            double dTmpVal=TmpVal;

                            double dvTmp=dTmpVal/1024;

                            CString szT= 

                              ConvertDoubleToString(dvTmp) + _T(" MB"); 

                            wsprintf(szText, "%s", szT);

                        }

                        else

                        {

                            CString kszT= 

                              ConvertDoubleToString(kdvTmp) + _T(" KB"); 

                            wsprintf(szText, "%s", kszT);

                        }

                    }

                    else

                        wsprintf(szText, "%lu BYTES", TmpVal);

 

                    SetItemText(m_TotCount, 2, szText);

                }

                Cf.Close();

                HBITMAP bitm=LoadPicture(pItemText);

                if (bitm!=NULL)

                {

                    CBitmap*    pImage = NULL;    

                    pImage = new CBitmap();                    

                    pImage->Attach(bitm);

                    int imgP=m_imageList.Add(pImage,RGB(0,0,0));

                    SetItem(m_TotCount, 0, LVIF_IMAGE, NULL, imgP,0, 0, 0);

                }

            }

        }



        // clean up

        LocalFree(npszFile);

    }



    // Free the memory block containing the dropped-file information

    DragFinish(hDropInfo);



    // if this was a shortcut, we need to expand it to the target path

    int result=GetItemCount();

    SetItemState(result, LVIS_SELECTED | 

        LVIS_FOCUSED | LVIS_ACTIVATING, 

        LVIS_SELECTED | LVIS_FOCUSED | LVIS_ACTIVATING); 

    //m_ProgList.SetActiveItem(k);

    //m_ProgList.SetFocus();

    result--;

    EnsureVisible(result, TRUE);

    SetFocus();

    SetRedraw(TRUE);

    RedrawWindow(NULL,NULL);



    CListCtrl::OnDropFiles(hDropInfo);

}
创建图片文件的缩略图形象LoadPicture函数添加到ListImage类。