C# & C++ MFC : 使用文件夹文件计数和顺序创建书页
Posted
技术标签:
【中文标题】C# & C++ MFC : 使用文件夹文件计数和顺序创建书页【英文标题】:C# & C++ MFC : Create a book page using folder file count and order 【发布时间】:2018-06-20 01:23:41 【问题描述】:我想开发一个执行分页功能的模块,以便可以像查看电子书一样查看任意文件夹中的图片。
我正在尝试使用C #
和C++ MFC
实现接口和功能。
界面:
文件总数不固定。
示例:
+Folder : images
|_ image_01.jpg
|_ image_02.jpg
|_ image_03.jpg
Total page : 3 (If an image is created in the folder:"images", Total page will be 4.)
Current page : 2 (image_02.jpg)
如果我按<<PREV
(NEXT>>
),应用程序将显示image_01.jpg
(image_03.jpg
)。
不幸的是,我不知道。我该如何实施?
我无法描述代码,因为我在互联网上找不到解决方案。请不要投反对票,教我怎么做。
提前谢谢你。
如果你解决了C # Windows Form Application
和C ++ MFC Application solutions
中的任何一个,我一定会投赞成票。
如果您能同时发布两个解决方案,我将不胜感激。
【问题讨论】:
您可以制作自己的功能:总页数 =GetFileCount(DIR_PATH)
; GetPrevImage(NAME_CURRENT_IMAGE)
; GetNextImage(NAME_CURRENT_IMAGE);
重点是文件顺序。
MFC 用于 C++,而不是 C#。
@Alexander 非常感谢。请给我一些代码。 (C# Windows Form Application
和 C++ MFC Application
)。
不要乞求低质量的内容不被投票:低质量的内容。这个问题应该被否决和近距离投票。请阅读How to Ask了解它有什么问题。
【参考方案1】:
C++ MFC Windows 应用程序实现:
项目名称: CImagePreview
DWORD ev_page_current, ev_page_total;
WCHAR ev_current_file[MAX_PATH];
void CImagePreview::OnPressPrevButton()
// TODO: Add your control notification handler code here
ev_page_total = GetTotalPages(IMAGE_PATH);
WCHAR wszPath[MAX_PATH] = 0;
GetPrevImagePathW(IMAGE_PATH, ev_current_file, wszPath);
DisplayImages(wszPath);
ev_page_current > 1 ? ev_page_current-- : ev_page_current = 1;
SetPageNumber();
void CImagePreview::OnPressNextButton()
// TODO: Add your control notification handler code here
ev_page_total = GetTotalPages(IMAGE_PATH);
WCHAR wszPath[MAX_PATH] = 0;
GetNextImagePathW(IMAGE_PATH, ev_current_file, wszPath);
DisplayImages(wszPath);
ev_page_current < ev_page_total ? ev_page_current++ : ev_page_current = ev_page_total;
SetPageNumber();
DWORD CImagePreview::DisplayImage(_In_ WCHAR* wszFilepath)
// You can display image with path.
return 0;
DWORD CImagePreview::GetNextImagePathW(_In_ WCHAR* wszFolderpath, _In_ WCHAR* wszFilename, _Out_ WCHAR* wszFilepath)
return GetImagePathW(wszFolderpath, wszFilename, wszFilepath, NEXT);
DWORD CImagePreview::GetPrevImagePathW(_In_ WCHAR* wszFolderpath, _In_ WCHAR* wszFilename, _Out_ WCHAR* wszFilepath)
return GetImagePathW(wszFolderpath, wszFilename, wszFilepath, PREV);
DWORD CImagePreview::GetImagePathW(_In_ WCHAR* wszFolderpath, _In_ WCHAR* wszInputFilename, _Out_ WCHAR* wszOutputFilepath, _In_ DWORD dwFlag)
WIN32_FIND_DATA t = 0;
HANDLE hFindFile = NULL;
BOOL blBreak = FALSE;
WCHAR wszFilename[MAX_PATH] = 0;
WCHAR wszFindpath[MAX_PATH] = 0;
WCHAR* wszFindname = NULL;
if (wszInputFilename)
if (NULL != wcsstr(wszInputFilename, L"\\"))
wszFindname = wcsrchr(wszInputFilename, L'\\');
wszFindname++;
// First set folder path.
wcscpy_s(wszOutputFilepath, MAX_PATH, wszFolderpath);
wcscpy_s(wszFindpath, MAX_PATH, wszFolderpath);
wcscat_s(wszFindpath, MAX_PATH, L"*.jpg");
hFindFile = FindFirstFileW(wszFindpath, &t); if (hFindFile == INVALID_HANDLE_VALUE)return GetLastError();
wcscpy_s(wszFilename, MAX_PATH, t.cFileName);
if( hFindFile != INVALID_HANDLE_VALUE )
do
if (t.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
else
if (NULL != wszFindname && !wcsicmp(wszFindname, t.cFileName))
if (PREV == dwFlag) break;
if (NEXT == dwFlag) blBreak = TRUE; continue;
if (0 == dwFlag)wcscpy_s(wszFilename, MAX_PATH, t.cFileName); break;
if (blBreak) break;
if(0 == wcslen(wszInputFilename)) wcscpy_s(wszFilename, MAX_PATH, t.cFileName); break;
wcscpy_s(wszFilename, MAX_PATH, t.cFileName);
while (FindNextFileW(hFindFile, &t));
if (blBreak && NEXT == dwFlag) wcscpy_s(wszFilename, MAX_PATH, t.cFileName);
FindClose(hFindFile);
wcscat_s(wszOutputFilepath, MAX_PATH, wszFilename);
return GetLastError();
INT CImagePreview::GetTotalPages(_In_ WCHAR* wszFolderpath)
INT nTotalPage = 0;
WIN32_FIND_DATA t = 0;
HANDLE hFindFile = NULL;
WCHAR wszFindpath[MAX_PATH] = 0;
wcscpy_s(wszFindpath, MAX_PATH, wszFolderpath);
wcscat_s(wszFindpath, MAX_PATH, L"*.jpg");
hFindFile = FindFirstFileW(wszFindpath, &t); if (hFindFile == INVALID_HANDLE_VALUE)return GetLastError();
if( hFindFile != INVALID_HANDLE_VALUE )
do
if (t.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
elsenTotalPage++;
while (FindNextFileW(hFindFile, &t));
FindClose(hFindFile);
return nTotalPage;
VOID CImagePreview::SetPageNumber(void)
CString cstrPage;
cstrPage.Format(_T("%d/%d"), ev_page_total, ev_page_current);
m_edit_page.SetWindowTextW((LPTSTR)(LPCTSTR)cstrPage);
return VOID();
DIR_PATH
中的文件顺序可以帮助您。我也测试了我的答案,它运行良好。因为你,我才做了一个电子图片预览器。
我认为您不需要更多与C #
相关的解决方案。我觉得和MFC
的解决方法一样……怎么样?
【讨论】:
图片的顺序是如何确定的? @Bryant 图片的顺序由文件名决定。 您的代码运行良好。谢谢你。如果您能编辑C #
代码,我将不胜感激。以上是关于C# & C++ MFC : 使用文件夹文件计数和顺序创建书页的主要内容,如果未能解决你的问题,请参考以下文章
您将使用哪种 C# 项目类型来重新开发 MFC C++ activex 控件?