如何在一个函数中利用另一个函数的变量?

xixia07m 2017-08-09 02:00:51
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(); //这里的suffixStr实参的值在哪里得到?
}
else
{
MessageBox("请选择文件类型");
}

}

void CremarksecretDlg::ListShow() 
TCHAR *mypath;
using std::vector;
vector<FileInfo>fileList;
find(mypath,fileList);
...........下略

请问我要想在函数find中用到void CremarksecretDlg::OnBnClickedButton1()函数中的
     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(); //这里的suffixStr实参的值在哪里得到?

TCHAR *path,我在void CremarksecretDlg::ListShow() 中应该怎么写,也就是find函数变量应该怎么写?多谢指点。
...全文
980 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xixia07m 2017-08-11
  • 打赏
  • 举报
回复
您说对了,是我的大括号被注释掉了,改过来就好了,多谢您的提醒。
棉猴 2017-08-10
  • 打赏
  • 举报
回复
引用 13 楼 xixia07m 的回复:
[quote=引用 12 楼 hou09tian 的回复:] 把void CremarksecretDlg::ListShow() 的格式改为
void CremarksecretDlg::ListShow(TCHAR* path) 
在void CremarksecretDlg::OnBnClickedButton1()中调用ListShow时改为
ListShow(paht);
按照您说的方法改了,void CremarksecretDlg::ListShow(TCHAR *path)的ListShow下面还是有红线报错,错误内容跟我上面图片中的提示一样,其他处的红线也没变,请问该怎么办?[/quote] void CremarksecretDlg::ListShow()这个函数的声明也要改哟,就是在CremarksecretDlg.h头文件中,也要改成 void ListShow(TCAHR* path);
xixia07m 2017-08-10
  • 打赏
  • 举报
回复
引用 12 楼 hou09tian 的回复:
把void CremarksecretDlg::ListShow() 的格式改为
void CremarksecretDlg::ListShow(TCHAR* path) 
在void CremarksecretDlg::OnBnClickedButton1()中调用ListShow时改为
ListShow(paht);
按照您说的方法改了,void CremarksecretDlg::ListShow(TCHAR *path)的ListShow下面还是有红线报错,错误内容跟我上面图片中的提示一样,其他处的红线也没变,请问该怎么办?
棉猴 2017-08-10
  • 打赏
  • 举报
回复
把void CremarksecretDlg::ListShow() 的格式改为
void CremarksecretDlg::ListShow(TCHAR* path) 
在void CremarksecretDlg::OnBnClickedButton1()中调用ListShow时改为
ListShow(paht);
xixia07m 2017-08-10
  • 打赏
  • 举报
回复
引用 10 楼 worldy 的回复:
1. 上层函数调用一个函数,可以将上层函数的变量以参数形式转入到下层函数 2. 下层函数1中的变量,必须在全局堆中申请内存,然后传递给上层函数; 3.下层函数1中的变量,必须在全局堆中申请内存,然后传递给上层函数,再由上层函数调用下层函数2,通过参数或者全局变量或者类成员,传递给下层函数2;
那具体到我这个程序,你能不能帮我排除一下如上出现的那些错误提示,多谢指教。
worldy 2017-08-10
  • 打赏
  • 举报
回复
1. 上层函数调用一个函数,可以将上层函数的变量以参数形式转入到下层函数 2. 下层函数1中的变量,必须在全局堆中申请内存,然后传递给上层函数; 3.下层函数1中的变量,必须在全局堆中申请内存,然后传递给上层函数,再由上层函数调用下层函数2,通过参数或者全局变量或者类成员,传递给下层函数2;
xixia07m 2017-08-10
  • 打赏
  • 举报
回复
引用 7 楼 zgl7903 的回复:
ListShow 中传入path 参数, 就可以不用类变量了 CremarksecretDlg::ListShow(LPCTSTR path) { //TCHAR * path; 其它代码 } if (SHGetPathFromIDList(pidl,szDir)) { ListShow(szDir); }
这几句程序什么意思,应该加在我的程序的什么位置?
xixia07m 2017-08-10
  • 打赏
  • 举报
回复

按您的改了,但是如上报错了,我该怎么办?
zgl7903 2017-08-10
  • 打赏
  • 举报
回复
ListShow 中传入path 参数, 就可以不用类变量了 CremarksecretDlg::ListShow(LPCTSTR path) { //TCHAR * path; 其它代码 } if (SHGetPathFromIDList(pidl,szDir)) { ListShow(szDir); }
棉猴 2017-08-10
  • 打赏
  • 举报
回复
我看照片ListShow()函数下面一行的大括号怎么被注释掉了?
xixia07m 2017-08-10
  • 打赏
  • 举报
回复
[code=cvoid CremarksecretDlg::ListShow() { 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; 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; } } ][/code] 我的LIstShow程序如上所示 ,请问如果按我的现有的程序,怎么写这个类变量,请高手结合我的程序代码提示一下,非常感谢。
xixia07m 2017-08-10
  • 打赏
  • 举报
回复
引用 14 楼 hou09tian 的回复:
[quote=引用 13 楼 xixia07m 的回复:] [quote=引用 12 楼 hou09tian 的回复:] 把void CremarksecretDlg::ListShow() 的格式改为
void CremarksecretDlg::ListShow(TCHAR* path) 
在void CremarksecretDlg::OnBnClickedButton1()中调用ListShow时改为
ListShow(paht);
按照您说的方法改了,void CremarksecretDlg::ListShow(TCHAR *path)的ListShow下面还是有红线报错,错误内容跟我上面图片中的提示一样,其他处的红线也没变,请问该怎么办?[/quote] void CremarksecretDlg::ListShow()这个函数的声明也要改哟,就是在CremarksecretDlg.h头文件中,也要改成 void ListShow(TCAHR* path);[/quote] 我在头文件中加了你说的内容,可是报错的情况还跟原来一样啊,你看是不是别的地方还有问题呢?多谢指教。
zgl7903 2017-08-09
  • 打赏
  • 举报
回复
定义为类变量 class CremarksecretDlg : { CString szPath; }; { BROWSEINFO bi = {0}; TCHAR szDir[MAX_PATH + 1] = {0}; LPITEMIDLIST pidl = NULL; LPMALLOC pMalloc = NULL; if (SUCCEEDED(SHGetMalloc(&pMalloc))) { bi.hwndOwner = m_hWnd; pidl = SHBrowseForFolder(&bi); if (pidl) { if (SHGetPathFromIDList(pidl,szDir)) { szPath = szDir; } pMalloc->Free(pidl); } pMalloc->Release(); } }
xixia07m 2017-08-09
  • 打赏
  • 举报
回复
我上面的定义算是把 TCHAR * path;定义为成员变量了吗?
Eleven 2017-08-09
  • 打赏
  • 举报
回复
你定义为类的成员变量~
xixia07m 2017-08-09
  • 打赏
  • 举报
回复

class CremarksecretDlg : public CDialogEx
{
// 构造
public:
	CremarksecretDlg(CWnd* pParent = NULL);	// 标准构造函数

// 对话框数据
	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();

	afx_msg void OnBnClickedButtonNext();
	afx_msg void OnBnClickedButtonPrevous();
	int intStart;
    int intEnd;
    int max_page;
    int pageSize;
    int pageNo;
   TCHAR * path;
};
是这样存吗?
sevancheng 2017-08-09
  • 打赏
  • 举报
回复
使用成员变量存起来

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧