16,472
社区成员
发帖
与我相关
我的任务
分享
void CremarksecretDlg::OnBnClickedButton1()
{
int iCheck=0;
int j=0;
for(j=0;j<=4;j++)
{
if(((CButton*)GetDlgItem(IDC_CHECK1+j))->GetCheck())
iCheck++;
}
if(iCheck)
{
BROWSEINFO bi; //BROWSEINFO结构有很多成员参数可以自己设置
ZeroMemory(&bi,sizeof(BROWSEINFO)); //将以&bi为起始地址,大小为sizeof(BROWSEINFO)的内存区域用0填充
bi.ulFlags=BIF_BROWSEINCLUDEFILES; //设置弹出的对话框属性。此处意思为包含文件。如果不设这个值,默认的是只有文件夹。ulFlags还可以定义很多别的属性
bi.ulFlags=BIF_NEWDIALOGSTYLE; //窗口可以调整大小,有新建文件夹按钮
LPITEMIDLIST pidl = SHBrowseForFolder(&bi); //Displays a dialog box enabling the user to select a Shell folder.
TCHAR * path = new TCHAR[MAX_PATH]; //自注:点击按钮获得的地址在path变量中
if(pidl!= NULL)
{
SHGetPathFromIDList(pidl,path); //Converts an item identifier list to a file system path
//MessageBox(path);
}
ListShow(path); //这里的suffixStr实参的值在哪里得到?
}
else
{
MessageBox("请选择文件类型");
}
}
void CremarksecretDlg::OnBnClickedButtonPrevous() //上一页
{
// TODO: 在此添加控件通知处理程序代码
if(pageNo==1)
{
AfxMessageBox(_T("已是第一页"));
}
if(pageNo>1)
{
pageNo--;
mlist.DeleteAllItems();
ListShow(path);
}
}
void CremarksecretDlg::OnBnClickedButtonNext() //下一页
{
// TODO: 在此添加控件通知处理程序代码
pageNo++;
if (pageNo > max_page)
{
pageNo--;
AfxMessageBox("已是最后一页");
return;
}
mlist.DeleteAllItems();
ListShow(path);
}
void CremarksecretDlg::ListShow(TCHAR* path)
{ //TCHAR * path;
using std::vector;
vector<FileInfo>fileList; //自注:程序不承认FileList是个结构变量
find(path,fileList); //取得文件信息,可自行插入列表框/这里的路径是刚才浏览文件夹选择的目录 这里的FileList对应的实参是什么
//FileInfo fileList;
UINT nCount=fileList.size(); //得到控件的行数 总的文件个数。
//Filelist=fi;
UINT i;
intStart=pageSize*(pageNo-1);
intEnd=pageSize*pageNo;
int pageSize=50;
int pageNo=1;
CString empty;
CString name;
CString time;
CString fpath;
mlist.LockWindowUpdate();
for(i=intStart;i<intEnd;i++)
{
i=i%pageSize;
empty.Format(_T(""),i+1);
mlist.InsertItem(i,empty);
name.Format(_T("%s"),fileList[i].szFileName.c_str());
mlist.SetItemText(i,1,name); //插入列
time.Format(_T("%s"),fileList[i].szCreateTime.c_str());
mlist.SetItemText(i,2,time);
fpath.Format(_T("%s"),fileList[i].szFilePath.c_str());
mlist.SetItemText(i,3,fpath);
if (pageNo >= 2) // 当页数为1时,i的值就是其本身,如果页数大于1时,i的值恢复到取余以前
{
i+= (pageNo -1) * pageSize;
}
}
mlist.UnlockWindowUpdate();
if (nCount % pageSize == 0)
{
max_page = nCount / pageSize;
}
else
{
max_page = nCount / pageSize + 1;
}
}
// remarksecretDlg.h : 头文件
//
#pragma once
#include "afxcmn.h"
#include <string>
/*using std::wstring;
wstring suffixStr;*/
// CremarksecretDlg 对话框
class CremarksecretDlg : public CDialogEx
{
// 构造
public:
CremarksecretDlg(CWnd* pParent = NULL); // 标准构造函数
// TCHAR* path;
// 对话框数据
enum { IDD = IDD_REMARKSECRET_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
//BOOL Regex.Match(string input,string pattern);
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
//void find(LPCTSTR lpPath,std::vector<FileInfo>&FileList); //有这句.cpp中的find(path,fileList)会报错。
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult);
CListCtrl mlist; //自注:控件变量在这里设置
//CLinkCtrl m_Link;
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedCheck1(); //把类型由void改成char
afx_msg void OnBnClickedCheck2();
afx_msg void OnBnClickedCheck3();
afx_msg void OnBnClickedCheck4();
afx_msg void OnBnClickedCheck5();
afx_msg void ListShow(int pageNo);
//afx_msg void find(LPCTSTR lpPath,std::vector<FileInfo>&FileList);
afx_msg void OnBnClickedButtonNext();
afx_msg void OnBnClickedButtonPrevous();
int Start;
int End;
int max_page;
int m_PageNo;
int pageNo;
};
这上面是我改过的.h文件。
void CremarksecretDlg::OnBnClickedButtonPrevous() //上一页
{
int pageNo=m_pageNo;
UINT nCount=fileList.size();
if(0<pageSize*pageNo)
{
pageNo--;
ListShow(pageNo);
}
else
{
pageNo++;
MessageBox(_T("已是第一页"));
}
}
void CremarksecretDlg::OnBnClickedButtonNext() //下一页
{
int m_pageNo=1;
UINT nCount=fileList.size();
if(pageSize*m_pageNo<nCount)
{
m_pageNo++;
ListShow(m_pageNo);
}
else
{
m_pageNo--;
MessageBox("已是最后一页");
//return;
}
这是我改过的上一页,下一页程序,但是程序运行的结果还是不对,我的程序有什么问题请帮我更正一下。
// remarksecretDlg.h : 头文件
//
#pragma once
#include "afxcmn.h"
#include <string>
/*using std::wstring;
wstring suffixStr;*/
// CremarksecretDlg 对话框
class CremarksecretDlg : public CDialogEx
{
// 构造
public:
CremarksecretDlg(CWnd* pParent = NULL); // 标准构造函数
// TCHAR* path;
// 对话框数据
enum { IDD = IDD_REMARKSECRET_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
//BOOL Regex.Match(string input,string pattern);
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
//void find(LPCTSTR lpPath,std::vector<FileInfo>&FileList); //有这句.cpp中的find(path,fileList)会报错。
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult);
CListCtrl mlist; //自注:控件变量在这里设置
//CLinkCtrl m_Link;
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedCheck1(); //把类型由void改成char
afx_msg void OnBnClickedCheck2();
afx_msg void OnBnClickedCheck3();
afx_msg void OnBnClickedCheck4();
afx_msg void OnBnClickedCheck5();
afx_msg void ListShow(int pageNo);
//afx_msg void find(LPCTSTR lpPath,std::vector<FileInfo>&FileList);
afx_msg void OnBnClickedButtonNext();
afx_msg void OnBnClickedButtonPrevous();
int Start;
int End;
int max_page;
int m_PageNo;
};
这是我的.h文件。
void CremarksecretDlg::OnBnClickedButtonPrevous() //上一页
{
int m_pageNo=1;
UINT nCount=fileList.size();
if(0<pageSize*m_pageNo)
{
m_pageNo--;
ListShow(m_pageNo);
}
else
{
m_pageNo++;
MessageBox(_T("已是第一页"));
}
}
这是我的上一页程序,生成程序后,点击上一页按钮报错了,如上一贴所示的错误,不知错在哪里,请你指教。
void CremarksecretDlg::OnBnClickedButtonPrevous() //上一页
{
// TODO: 在此添加控件通知处理程序代码
/*if(pageNo==1)
{
AfxMessageBox(_T("已是第一页"));
}
if(pageNo>1)
{
pageNo--;
mlist.DeleteAllItems();
ListShow(pageNo);
//delete [MAX_PATH]path;
}*/
static int pageNo=1;
UINT nCount=fileList.size();
if(0<pageSize*pageNo)
{
pageNo--;
ListShow(pageNo);
}
else
{
pageNo++;
MessageBox(_T("已是第一页"));
}
}
void CremarksecretDlg::OnBnClickedButtonNext() //下一页
{
// TODO: 在此添加控件通知处理程序代码
/*pageNo++;
if (pageNo > max_page)
{
pageNo--;
AfxMessageBox("已是最后一页");
return;
}
mlist.DeleteAllItems();
// mlist.LockWindowUpdate();
ListShow(pageNo);
*/
static int pageNo=1;
UINT nCount=fileList.size();
/*if (nCount%pageSize==0)
{
max_page=nCount/pageSize;
}
else
{
max_page=nCount/pageSize+1;
}
*/
if(pageSize*pageNo<nCount)
{
pageNo++;
ListShow(pageNo);
}
else //(pageNo>max_page) //这里如果是if就不行了。
{
pageNo--;
MessageBox("已是最后一页");
//return;
}
}
这是我照你的下一页程序改的程序,现在下一页的功能完全正常,就是上一页的程序还是功能实现不了,请问怎么办?上图是我点上一页按钮,程序的执行错误提示。
// remarksecretDlg.h : 头文件
//
#pragma once
#include "afxcmn.h"
#include <string>
/*using std::wstring;
wstring suffixStr;*/
// CremarksecretDlg 对话框
class CremarksecretDlg : public CDialogEx
{
// 构造
public:
CremarksecretDlg(CWnd* pParent = NULL); // 标准构造函数
TCHAR* path;
// 对话框数据
enum { IDD = IDD_REMARKSECRET_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
//BOOL Regex.Match(string input,string pattern);
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
//void find(LPCTSTR lpPath,std::vector<FileInfo>&FileList); //有这句.cpp中的find(path,fileList)会报错。
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLvnItemchangedList1(NMHDR *pNMHDR, LRESULT *pResult);
CListCtrl mlist; //自注:控件变量在这里设置
//CLinkCtrl m_Link;
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedCheck1(); //把类型由void改成char
afx_msg void OnBnClickedCheck2();
afx_msg void OnBnClickedCheck3();
afx_msg void OnBnClickedCheck4();
afx_msg void OnBnClickedCheck5();
afx_msg void ListShow(int pageNo);
afx_msg void find(LPCTSTR lpPath,std::vector<FileInfo>&FileList);
afx_msg void OnBnClickedButtonNext();
afx_msg void OnBnClickedButtonPrevous();
int Start;
int End;
int max_page;
//int pageSize;
int pageNo;
//vector<FileInfo>fileList;
};
所有输出均为最新。
1> remarksecretDlg.cpp
1>d:\vs2010练习专区\标密软件源文件\自己的设计(非密)\remarksecret_a(翻页)(在搞)\remarksecret_a(在搞)\remarksecret\remarksecretdlg.h(50): error C2065: “FileInfo”: 未声明的标识符
1>d:\vs2010练习专区\标密软件源文件\自己的设计(非密)\remarksecret_a(翻页)(在搞)\remarksecret_a(在搞)\remarksecret\remarksecretdlg.cpp(460): error C2664: “CremarksecretDlg::find”: 不能将参数 2 从“std::vector<_Ty>”转换为“std::vector &”
1> with
1> [
1> _Ty=FileInfo
1> ]
1>d:\vs2010练习专区\标密软件源文件\自己的设计(非密)\remarksecret_a(翻页)(在搞)\remarksecret_a(在搞)\remarksecret\remarksecretdlg.cpp(528): warning C4018: “<”: 有符号/无符号不匹配
1> remarksecret.cpp
1>d:\vs2010练习专区\标密软件源文件\自己的设计(非密)\remarksecret_a(翻页)(在搞)\remarksecret_a(在搞)\remarksecret\remarksecretdlg.h(50): error C2065: “FileInfo”: 未声明的标识符
1> 正在生成代码...
1>
1>生成失败。
1>
1>已用时间 00:00:00.62
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
// 'show'
void CShowdirDlg::OnButton1()
{// new file types
if(!GetTypes2(suffixStr))
{
AfxMessageBox("No file extention selected!");
return;
}
// get directory
BROWSEINFO bi;
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.ulFlags |= BIF_NEWDIALOGSTYLE;//窗口可以调整大小,有新建文件夹按钮
bi.lpszTitle="指定要处理的文件夹";
if(s_pidl) bi.pidlRoot=s_pidl;
// Displays a dialog box enabling the user to select a Shell folder.
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
//
TCHAR path[MAX_PATH];// ! new
if(pidl != NULL)
{// Converts an item identifier list to a file system path
SHGetPathFromIDList(pidl,path);
}
else
{
return;
}
if(pidl) s_pidl=pidl;
// window ruined by SHBrowseForFolder
m_list.DeleteAllItems();
RedrawWindow();
// get files info
CWaitCursor wait;
if(!fileList.empty()) fileList.clear();
// fill fileList
find(path,fileList);
// fill list
FillList(0);
}
void CShowdirDlg::OnButton2()
{// not paged
// TODO: Add your control notification handler code here
static int page=0;
UINT nCount=fileList.size();
if(PAGESIZE*(page+1)<nCount)
{
page++;
FillList(page);
}
afxDump << "OnButton2\n";
}
注意
if(!fileList.empty()) fileList.clear();