我把贴字提前了无数次都没人理 再问一次我编了个mdi读入多种图像格式的文件 .bmp .jpg .gif ....
怎么设定 打开文件 对话框的文件类型 让它滤过其他文件?我一路用    右键->转到定义 
//in BMA.CPP (my cpp)
.......
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)

//in appdlg.cpp
void CWinApp::OnFileOpen()
{
ASSERT(m_pDocManager != NULL);
m_pDocManager->OnFileOpen();
.......

//in docmgr.cpp
void CDocManager::OnFileOpen()
{
// prompt the user (with all document templates)
CString newName;
if (!DoPromptFileName(newName, AFX_IDS_OPENFILE,
  OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, TRUE, NULL))
return; // open cancelled
.............

//in docmgr.cpp
BOOL CDocManager::DoPromptFileName(CString& fileName, UINT nIDSTitle, DWORD lFlags, BOOL bOpenFileDialog, CDocTemplate* pTemplate)
{
CFileDialog dlgFile(bOpenFileDialog, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL, 0); CString title;
VERIFY(title.LoadString(nIDSTitle)); dlgFile.m_ofn.Flags |= lFlags; CString strFilter;
CString strDefault;
if (pTemplate != NULL)
{
ASSERT_VALID(pTemplate);
_AfxAppendFilterSuffix(strFilter, dlgFile.m_ofn, pTemplate, &strDefault);
}
else
{
// do for all doc template
POSITION pos = m_templateList.GetHeadPosition();
BOOL bFirst = TRUE;
while (pos != NULL)
{
CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetNext(pos);
_AfxAppendFilterSuffix(strFilter, dlgFile.m_ofn, pTemplate,
bFirst ? &strDefault : NULL);
bFirst = FALSE;
}
} // append the "*.*" all files filter
CString allFilter;
VERIFY(allFilter.LoadString(AFX_IDS_ALLFILTER));
strFilter += allFilter;
strFilter += (TCHAR)'\0';   // next string please
strFilter += _T("*.*");
strFilter += (TCHAR)'\0';   // last string
dlgFile.m_ofn.nMaxCustFilter++; dlgFile.m_ofn.lpstrFilter = strFilter;
dlgFile.m_ofn.lpstrTitle = title;
dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH); INT_PTR nResult = dlgFile.DoModal();
fileName.ReleaseBuffer();
return nResult == IDOK;
}发现了一句allFilter.LoadString(AFX_IDS_ALLFILTER)
于是我string table中定义了一个AFX_IDS_ALLFILTER字符串为:
BitMap Files (*.bmp)|*.bmp|JPEG Files (*.jpg)|*.jpg|All Files (*.*)|*.*||之后运行程序 在filter里原样显示了这个串字符 却没起到滤过文件的作用 怎么回事啊?

解决方案 »

  1.   

    应该时刻是有错误,请参考:属性Filter是文件滤器,返回或设置在对话框的类型列表框中所显示的过滤器。
    '语法object.Filter [= 文件类型描述1 |filter1 |文件类型描述2 |filter2...]
    CdlTest.Filter = "文本文件(.txt)|*.txt"
    'Flags属性的用法依据不同的对话框而变,详细使用需要查找联机帮助手册http://dev.csdn.net/article/12/article/13/13461.shtmhttp://www.hongen.com/pc/program/tutors/vb/vb0103.htm
      

  2.   

    ok了!!
    AFX_IDS_ALLFILTER改成:
    Image Files (*.bmp;*.jpg)\000*.bmp;*.jpg\000\000
    就行了