问题1:
用WritePrivateProfileString时, 怎么把.ini文件写到当前的文件夹(与exe相同的文件)
我在关闭时用WritePrivateProfileString("Information","Question","谢谢大家帮忙",".\\Setting.ini");
结果是写到工作的文件夹(就是说,你打开一个文件的话,就写到这个文件所在的文件夹)问题2:
ListBox怎么设定水平的滚动条,属性中勾选了"水平滚动"
怎么没用?问题3:
打开文件的对话框,设定了OFN_ALLOWMULTISELECT
if(fdDialog.DoModal() == IDOK)
{
POSITION ps = fdDialog.GetStartPosition ();
do
{
strFileName = fdDialog.GetNextPathName(ps);
if(list->FindString (-1, strFileName) == LB_ERR)
{
list -> AddString(strFileName);
}
TRACE("%d\n", ps);
}while(ps);
}
通过上面的代码把选中的文件pathname加入到一个listbox中,剔除重复的加入
通过debug, 有时会碰到这种情况:strFileName得到的不是完整的pathname
比如:
完整的: d:\temp\一个文件名的例子.txt
得到的: d:\temp\一个文件在选择文件数量较多时,最后一个文件就会出现这种情况,而且问题全出在文件名较长的文件中
不知道是什么原因,是不是上面的代码有问题?
GetStartPosition和GetNextPathName两个函数不知道是不是这么用?问题4:
通过AppWizard生成的SDI或者MDI中,有一个记录最近文档的功能(也是现在在软件中常见的功能)
我怎么在源码中没有找到实现这个功能的代码?又是好多问题,呵呵. 请大家多多指教!!谢
用WritePrivateProfileString时, 怎么把.ini文件写到当前的文件夹(与exe相同的文件)
我在关闭时用WritePrivateProfileString("Information","Question","谢谢大家帮忙",".\\Setting.ini");
结果是写到工作的文件夹(就是说,你打开一个文件的话,就写到这个文件所在的文件夹)问题2:
ListBox怎么设定水平的滚动条,属性中勾选了"水平滚动"
怎么没用?问题3:
打开文件的对话框,设定了OFN_ALLOWMULTISELECT
if(fdDialog.DoModal() == IDOK)
{
POSITION ps = fdDialog.GetStartPosition ();
do
{
strFileName = fdDialog.GetNextPathName(ps);
if(list->FindString (-1, strFileName) == LB_ERR)
{
list -> AddString(strFileName);
}
TRACE("%d\n", ps);
}while(ps);
}
通过上面的代码把选中的文件pathname加入到一个listbox中,剔除重复的加入
通过debug, 有时会碰到这种情况:strFileName得到的不是完整的pathname
比如:
完整的: d:\temp\一个文件名的例子.txt
得到的: d:\temp\一个文件在选择文件数量较多时,最后一个文件就会出现这种情况,而且问题全出在文件名较长的文件中
不知道是什么原因,是不是上面的代码有问题?
GetStartPosition和GetNextPathName两个函数不知道是不是这么用?问题4:
通过AppWizard生成的SDI或者MDI中,有一个记录最近文档的功能(也是现在在软件中常见的功能)
我怎么在源码中没有找到实现这个功能的代码?又是好多问题,呵呵. 请大家多多指教!!谢
{
int i;
TCHAR str[100];
for(i = 0; i < 100; i++)
{
wsprintf(str, "This is a very very very very very long sentence - line %d", i + 1);
SendDlgItemMessage(hDlg, IDC_LIST, LB_ADDSTRING, 0, (LPARAM)str);
}
}
break;
char szFileName[256];
GetModuleFileName(NULL,szFileName,256);
char szDrive[256];
char szDir[256];
char szValue[256];
_tsplitpath(szFileName,szDrive,szDir,NULL,NULL);
sprintf(szFileName,"%s%s",szDrive,szDir);
SetCurrentDirectory(szFileName);
2.滚动条是自动出来的(根据列宽度)
3。应该是
POSITION ps = fdDialog.GetStartPosition ();
while(ps)
{
strFileName = fdDialog.GetNextPathName(ps);
if(list->FindString (-1, strFileName) == LB_ERR)
{
list -> AddString(strFileName);
}
TRACE("%d\n", ps);
}
4.它是需要你在菜单中有相关的ID(ID_FILE_MRU_FILE1)
大致就这些。
用下面的函数得到exe所在的目录,然后用它来设置你的写INI函数的路径参数
CString CClientApp::ReturnPath()
{
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left(nPos);
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left(nPos);
sPath = sPath + "\\Dictionary.ini";
return sPath;
}
自己用m_listbox.SetHorizontalExtent来解决3
一次得到多个文件名
#define FILE_BUF_LEN 4096 //文件名缓冲区大小,取决于文件个数和文件名长度
CFileDialog dlg(TRUE, NULL, NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT);
dlg.m_ofn.lpstrFile = new TCHAR[FILE_BUF_LEN];
dlg.m_ofn.nMaxFile=FILE_BUF_LEN;
if(dlg.DoModal()==IDOK)
{
POSITION pos=dlg.GetStartPosition();
while(pos)
{
CString filename=dlg.GetNextPathName();
.......
}
}
while(ps)
{
strFileName = fdDialog.GetNextPathName(ps);
if(list->FindString (-1, strFileName) == LB_ERR)
{
list -> AddString(strFileName);
}
TRACE("%d\n", ps);
}
这样的方法还是不行的,问题如旧
怎么回事?
int dx=0;
CSize sz;
CDC* pDC = m_listbox.GetDC();
CString str;
for (int j = 0; j < m_listbox.GetCount(); j++)
{
m_listbox.GetText(j, str);
sz = pDC->GetTextExtent(str);
if ( sz.cx > dx )
dx = sz.cx;
}
m_listbox.ReleaseDC(pDC);
m_listbox.SetHorizontalExtent(dx);
fileDlg.m_ofn.lpstrFile = str.GetBuffer(10000);
str.ReleaseBuffer(); if(fileDlg.DoModal() == IDOK)
{
。。
}