整合功能以获得更清洁的代码?

问题描述

| 不要被关闭的长度...我认为这不是一个太困难的问题。 语言:C ++ 开发环境:Microsoft Visual C ++ 使用的库:MFC 问题:我正在创建带有多个“页面”的大型首选项对话框。其中许多要求用户指定文件路径。现在,用户将单击该按钮,它将跳转到OnCommand()。这将验证该命令是否来自某个按钮,然后跳转browse()函数,在该函数中可以确定按下了哪个按钮。最后,它将调用FileDialog(),它将启动文件选择器,然后返回文件路径,将其分配给正确的变量,然后将其附加到正确的编辑控件。 我正在尝试将所有这些“打开文件”按钮合并到一个类或函数中,但是我不确定最好的方法。我希望它干净,这样我就不必输入特定的ID(2001、2002等)。 现在,这三个函数(在下面)在我的每个文件中……这很杂乱且不必要。我想要一个名为OpenFile.cpp的文件,或者一个包含处理打开文件所需的功能文件,并将所选路径附加到正确对话框中的正确文本框中。
BOOL FSC_3DPersp::OnCommand(WParaM wParam,LParaM lParam)
{
  if (HIWORD(wParam) == BN_CLICKED)
  {
    browse(LOWORD(wParam));
    return TRUE;
  }
return CWnd::OnCommand(wParam,lParam);
}
//
CString OpenFile::FileDialog(CWnd* wnd,int uiID) // dialog from which the call came and the ID of the edit control where the path is going
{
  CFileDialog dlg(
      TRUE // Open = TRUE,Save = FALSE,NULL //filename extension,\"\" // initial filename,OFN_ENABLESIZING|OFN_EXPLORER|OFN_FILEMUSTEXIST // flags,\"\" // filter,wnd // parent window
  ); 

  if (dlg.DoModal() == IDOK)
  {
    CEdit *display;
    CString path = dlg.GetPathName();
    display = reinterpret_cast<CEdit *>(GetDlgitem(uiID));
    display->SetwindowText((LPCTSTR)path);
    return path;
  }
}
//
void FSC_3DPersp::browse(UINT uiID)
{
 switch(uiID)
 {
 case IDC_BUTTON1: 
    m_strPersTexture = FileDialog(this,2004);
    break;
 case IDC_BUTTON2:
    m_strSkyFront = FileDialog(this,2005);
    break;
 case IDC_BUTTON3:
    m_strSkyRight = FileDialog(this,2006);
    break;
 case IDC_BUTTON4:
    m_strSkyBack = FileDialog(this,2007);
    break;
 case IDC_BUTTON5:
    m_strSkyTop = FileDialog(this,2008);
    break;
 case IDC_BUTTON6:
    m_strSkyLeft = FileDialog(this,2009);
    break;
 case IDC_BUTTON7:
    m_strSkyBottom = FileDialog(this,2010);
    break;
 }
}
文件定义:
afx_msg CString FileDialog(CWnd* wnd,int uiID);
afx_msg void browse(UINT uiID);
virtual BOOL OnCommand(WParaM wParam,LParaM lParam);
那么,如何调整参数以将所有三个参数放到一个文件中,又如何引用它们呢?如果这样做,我感觉需要向OnCommand()函数添加一个附加参数,但是我认为我不能这样做。 预先感谢您的帮助! 〜乔恩     

解决方法

        如何使用CMFCEditBrowseCtrl或COXBrowseFileEdit(或其他类似的类)代替普通的编辑控件? 这些类使用“浏览”按钮创建编辑框,单击该按钮可自动打开文件选择对话框,并将所选文件设置为编辑控件文本。