⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addbatdlg.cpp

📁 个人电子图书管理系统.提供电子书的书名和其他信息.检查电子书信息的合法性(E-1) .为这本电子书生成 id.使用分类id
💻 CPP
字号:
// D:\KingBook\KingBook\GUI\AddbatDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "KingBook.h"
#include "AddbatDlg.h"

#if BLOCK("CAddbatFolderDlg, 选择文件夹")
// CAddbatFolderDlg 对话框

IMPLEMENT_DYNAMIC(CAddbatFolderDlg, CPropertyPage)

CAddbatFolderDlg::CAddbatFolderDlg()
	: CPropertyPage(CAddbatFolderDlg::IDD)
{

}

CAddbatFolderDlg::~CAddbatFolderDlg()
{
}

void CAddbatFolderDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAddbatFolderDlg, CPropertyPage)
END_MESSAGE_MAP()


// CAddbatFolderDlg 消息处理程序

BOOL CAddbatFolderDlg::OnInitDialog()
{
    CPropertyPage::OnInitDialog();



    return TRUE;  // return TRUE unless you set the focus to a control
    // 异常: OCX 属性页应返回 FALSE
}

BOOL CAddbatFolderDlg::OnSetActive()
{
    CAddbatDlg *pParent = (CAddbatDlg *)this->GetParent();
    BROWSEINFO bif;
    TCHAR      folderDisplayName[MAX_PATH ] = {0};
    TCHAR      pszPath[1024] = {0};
    bif.hwndOwner = this->m_hWnd;
    bif.pidlRoot  = NULL;
    bif.pszDisplayName = folderDisplayName;
    bif.ulFlags = BIF_DONTGOBELOWDOMAIN/*|BIF_NEWDIALOGSTYLE*/|BIF_NONEWFOLDERBUTTON|BIF_RETURNONLYFSDIRS;
    bif.lpfn    = NULL;
    bif.lParam  = NULL;
    bif.iImage  = NULL;
    bif.lpszTitle = "浏览";
    if(SHGetPathFromIDList(SHBrowseForFolder(&bif),pszPath) == TRUE)
    {
        pParent->strPath = pszPath;
    }
    else
    {
        pParent->strPath = "";
    }
    
    return CPropertyPage::OnSetActive();
}

#endif BLOCK("CAddbatFolderDlg, 选择文件夹")

#if BLOCK("CAddbatDlg 属性表对话框")
// CAddbatDlg

IMPLEMENT_DYNAMIC(CAddbatDlg, CPropertySheet)

CAddbatDlg::CAddbatDlg(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(nIDCaption, pParentWnd, iSelectPage)
{
//    this->AddPage(&this->dlgFolder);
    this->AddPage(&this->dlgList);
}

CAddbatDlg::CAddbatDlg(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
	:CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
//    this->AddPage(&this->dlgFolder);
    this->AddPage(&this->dlgList);

}

CAddbatDlg::~CAddbatDlg()
{
}

BEGIN_MESSAGE_MAP(CAddbatDlg, CPropertySheet)
    ON_WM_CREATE()
END_MESSAGE_MAP()


// CAddbatDlg 消息处理程序
BOOL CAddbatDlg::OnInitDialog()
{
    BOOL bResult = CPropertySheet::OnInitDialog();
    return bResult;
}


/// <summary>创建属性表对话框, 响应WM_CREATE事件</summary>
/// <param name="lpCreateStruct">指定对话框创建的方式</param>
/// <returns>成功返回0; 失败返回-1.</returns>
/// <remarks> 这个函数的主要目的是, 在显示属性表之前, 先显示"浏览文件夹"对话框, 让用户选择
/// 批量添加的图书所在的文件夹.如果用户在"浏览文件夹"对话框上点击"取消", 这个函数返回-1, 即
/// 不再创建属性表.
/// </remarks>
int CAddbatDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CPropertySheet::OnCreate(lpCreateStruct) == -1)
        return -1;
    BOOL bResult = 0;
    BROWSEINFO bif;
    TCHAR      folderDisplayName[MAX_PATH ] = {0};
    TCHAR      pszPath[1024] = {0};
    bif.hwndOwner = this->m_hWnd;
    bif.pidlRoot  = NULL;
    bif.pszDisplayName = folderDisplayName;
    bif.ulFlags = BIF_DONTGOBELOWDOMAIN/*|BIF_NEWDIALOGSTYLE*/|BIF_NONEWFOLDERBUTTON|BIF_RETURNONLYFSDIRS;
    bif.lpfn    = NULL;
    bif.lParam  = NULL;
    bif.iImage  = NULL;
    bif.lpszTitle = "选择这批图书所在文件夹";

    LPITEMIDLIST lpItem = NULL;
    lpItem = SHBrowseForFolder(&bif);
    if(lpItem == NULL)
        return -1;
    if(SHGetPathFromIDList(lpItem,pszPath) == TRUE)
    {
        this->strPath = pszPath;
    }
    else
    {
        this->strPath = "";
    }
    return bResult;

}

#endif BLOCK("CAddbatDlg 属性表对话框")

#if BLOCK("CAddbatListDlg, 文件列表")
// CAddbatListDlg 对话框

IMPLEMENT_DYNAMIC(CAddbatListDlg, CPropertyPage)


/// <summary>CAddbatListDlg的默认构造函数.</summary>
/// <remarks>创建CImageList, 以便显示文件的图标.
/// </remarks>
CAddbatListDlg::CAddbatListDlg()
	: CPropertyPage(CAddbatListDlg::IDD)
{
    imgList.Create(16, 16, ILC_COLOR8, 0, 4);
    imgList.SetBkColor(RGB(255, 255, 255));
}

CAddbatListDlg::~CAddbatListDlg()
{
}

void CAddbatListDlg::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAddbatListDlg, CPropertyPage)
    ON_WM_CREATE()
END_MESSAGE_MAP()

// CAddbatListDlg 消息处理程序


/// <summary>当属性页被激活时, 执行这个函数</summary>
/// <returns>BOOL</returns>
/// <remarks>执行以下操作(或调用函数):
/// <list type="bullet">
/// <item><description>
/// <b>FillList()</b> : 填充列表框
/// </description></item>
/// </list>
/// </remarks>
BOOL CAddbatListDlg::OnSetActive()
{
    this->FillList();

    return CPropertyPage::OnSetActive();
}


/// <summary>初始化CAddbatListDlg属性页对话框, 并执行一些操作.</summary>
/// <returns>BOOL</returns>
/// <remarks>执行以下操作(或调用函数):
/// <list type="bullet">
/// <item><description><b>FillList()</b> : 填充列表框</description></item>
/// <item><description>设置列表框的样式.</description></item>
/// </list>
/// </remarks>
BOOL CAddbatListDlg::OnInitDialog()
{
    CPropertyPage::OnInitDialog();
    CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_FILE_LIST);
    pList->SetExtendedStyle(LVS_EX_CHECKBOXES );

    this->FillList();
    return TRUE;  // return TRUE unless you set the focus to a control
    // 异常: OCX 属性页应返回 FALSE
}

int CAddbatListDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CPropertyPage::OnCreate(lpCreateStruct) == -1)
        return -1;

    return 0;
}



/// <summary>填充列表框</summary>
/// <returns>int</returns>
/// <remarks>实现步骤:
/// <list type="number">
/// <item><description>清空列表框中已有的内容,清空图片列表.</description></item>
/// <item><description>向列表框中插入新列:"文件名".</description></item>
/// <item><description>查找文件, 并得到文件的图标</description></item>
/// <item><description>使用得到的信息, 构造<c>LVITEM</c>, 并将其插入到列表框</description></item>
/// </list>
/// </remarks>
int CAddbatListDlg::FillList()
{
    CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_FILE_LIST);

    CAddbatDlg *pParent = (CAddbatDlg *)this->GetParent();
    WIN32_FIND_DATA findFileData;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    DWORD dwError;
    int index = 0;
    int nColumnCount = pList->GetHeaderCtrl()->GetItemCount();

    // 清空已有的内容.
    for (int i=0;i < nColumnCount;i++)
    {
        pList->DeleteColumn(0);
    }    
    pList->DeleteAllItems();
    for (int i=0;i < imgList.GetImageCount();i++)
    {
        imgList.Remove(i);
    }

    pList->InsertColumn(0, "文件名", 0, 300);
    //    MessageBox(pParent->strPath);
    hFind = FindFirstFile(pParent->strPath + "\\*", &findFileData);

    DWORD dwFilter = (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_HIDDEN 
        | FILE_ATTRIBUTE_REPARSE_POINT | FILE_ATTRIBUTE_SYSTEM);
    if (hFind == INVALID_HANDLE_VALUE) 
    {
        return (-1);
    } 
    else 
    {
        LVITEM lvItem;
        lvItem.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM;
        lvItem.iItem = 0;
        lvItem.iSubItem = 0;

        SHFILEINFO sfi;       
        
        pList->SetImageList(&imgList, LVSIL_SMALL);

        do
        {
            if((findFileData.dwFileAttributes & (dwFilter)) == 0)
            {
                // 得到图标
                int hr = SHGetFileInfo(findFileData.cFileName, FILE_ATTRIBUTE_NORMAL/*findFileData.dwFileAttributes*/, 
                    &sfi, sizeof(SHFILEINFO), /*SHGFI_OPENICON |*/ SHGFI_ICON | SHGFI_SMALLICON | SHGFI_SHELLICONSIZE|SHGFI_USEFILEATTRIBUTES);
                
                imgList.Add(sfi.hIcon);
                lvItem.iImage = imgList.GetImageCount() - 1;
                lvItem.pszText = findFileData.cFileName;
                pList->InsertItem(&lvItem);
            }
        }while (FindNextFile(hFind, &findFileData) != 0); 

        dwError = GetLastError();
        FindClose(hFind);
        if (dwError != ERROR_NO_MORE_FILES) 
        {
            return (-1);
        }
    }
    return 0;
}


/// <summary>当用户在属性表对话框上点击"确定"时</summary>
/// <returns>void</returns>
/// <remarks>得到用户在列表框中选择的项目, 并构造出图书信息, 放到CAddbatDlg相应项目中.
/// </remarks>
void CAddbatListDlg::OnOK()
{
    CListCtrl* pList = (CListCtrl*) GetDlgItem(IDC_FILE_LIST);
    CAddbatDlg *pParent = (CAddbatDlg *)this->GetParent();

    int nCount = pList->GetItemCount(); 
    CString strName;
    CString strFullName;
    for(int i = 0; i < nCount; i ++)
    {
        if(pList->GetCheck(i) != 0)  // 项被选中
        {
            strName = pList->GetItemText(i, 0);
            strFullName = pParent->strPath + "\\" + strName;
            Library::Book bookInfo;
            bookInfo.SetName(strName.GetBuffer());
            bookInfo.SetURL(strFullName.GetBuffer());
            pParent->booksInfo.push_back(bookInfo);;
        }
    }
    CPropertyPage::OnOK();
}

#endif BLOCK("CAddbatListDlg, 文件列表")


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -