问题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中,有一个记录最近文档的功能(也是现在在软件中常见的功能)
我怎么在源码中没有找到实现这个功能的代码?又是好多问题,呵呵. 请大家多多指教!!谢

解决方案 »

  1.   

    case WM_INITDIALOG:
    {
     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;
      

  2.   

    1.程序启动设置时设置一下当前目录
    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)
    大致就这些。
      

  3.   

    1
    用下面的函数得到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;
    }
      

  4.   

    2
    自己用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();
          .......
       }
    }
      

  5.   

    POSITION ps = fdDialog.GetStartPosition ();
    while(ps)
    {
    strFileName = fdDialog.GetNextPathName(ps);
    if(list->FindString (-1, strFileName) == LB_ERR)
    {
    list -> AddString(strFileName);
    }
    TRACE("%d\n", ps);
    }
    这样的方法还是不行的,问题如旧
      

  6.   

    to  laiyiling(最熟悉的陌生人) 用了你的方法后, 打开对话框会弹出错误 Assertion debug failed
    怎么回事?
      

  7.   

    2
    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);
      

  8.   

    CString str(“”, 10000); 
    fileDlg.m_ofn.lpstrFile = str.GetBuffer(10000); 
    str.ReleaseBuffer(); if(fileDlg.DoModal() == IDOK)
    {
       。。
    }