本文做一个资源管理器。
目前的问题是:当我修改文件或者文件夹名字之后,焦点就丢掉了。
我的需要是: 当我修改文件或者文件夹名字之后,焦点依然停留在当前我被修改的文件或者文件夹上。
我修改文件夹的函数是这样写的:
bool RenameFileOrDirectoryFeedback(long lSize, int nLen)
{ char *szContent = new char [nLen+1];
if (szContent == NULL) return false;
memset(szContent, 0, nLen+1);
m_pCC->ReadExact(szContent, nLen);
char szStatus[512]; char *p = strrchr(szContent, '*');
char szOldName[MAX_PATH];
char szCurrentName[MAX_PATH]; strcpy(szCurrentName, p + 1); 
*p = '\0';
strcpy(szOldName, szContent); if (lSize == -1 || p == NULL)
{
sprintf(szStatus, " %s < %s > %s", sz_M5, szOldName, sz_H30); 
SetStatus(szStatus);
delete [] szContent;
return false;
} sprintf(szStatus, " %s < %s > %s < %s >", sz_M8 , szOldName, sz_M7, szCurrentName); 
SetStatus(szStatus);
// Refresh the  list
ListView_DeleteAllItems(GetDlgItem(hWnd, IDC_REMOTE_FILELIST));
RequestRemoteDirectoryContent(hWnd, "");
// hanker  应该是在这个地方设置焦点,我的思路是 在刷新窗口之后,检索到szCurrentName这个文件,然后把焦点设置到这个上面,有更加好的方法吗?
delete [] szContent;
return true;
}

解决方案 »

  1.   

    我记得资源管理器好像是个ListCtrl吧? 用ListCtrl方法不知可不可行
      

  2.   

    焦点不会变,是没有了选中状态,用ListView_SetItemState来设置,后两个参数都给LVIS_SELECTED是设置选中,给LVIS_FOCUSED是设置焦点。
      

  3.   

    我用这个函数:
    ListView_SetItemState(GetDlgItem(hWnd, IDC_LOCAL_FILELIST), 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED)
    可以在当前ListView中,使得 焦点指向 第一个,用〇表示!
    咨询一下:
    加入我把 aaa.doc 改成 111.doc
    然后我刷新,ListView,我如何得到 111.doc中在 ListView中的序号!
    当然对于文件夹也一样!