PropertyGridItemFile.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "stdafx.h"
  2. #include "PropertyGridInplaceEdit.h"
  3. #include "PropertyGridInplaceButton.h"
  4. #include "PropertyGridInplaceList.h"
  5. #include "PropertyGridItem.h"
  6. #include "PropertyGridItemFile.h"
  7. #include "PropertyGrid.h"
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11. CPropertyGridItemFile::CPropertyGridItemFile(CString strCaption, LPCTSTR lpszFileName, BOOL bOpen)
  12. : CPropertyGridItem(strCaption, lpszFileName)
  13. {
  14. // 设置属性项可编辑、有按钮
  15. SetFlags(pgitemHasEdit | pgitemHasExpandButton);
  16. m_bOpen = bOpen;
  17. m_pBindFileName = NULL;
  18. }
  19. CPropertyGridItemFile::CPropertyGridItemFile(UINT nID, LPCTSTR lpszFileName, BOOL bOpen)
  20. : CPropertyGridItem(nID, lpszFileName)
  21. {
  22. // 设置属性项可编辑、有按钮
  23. SetFlags(pgitemHasEdit | pgitemHasExpandButton);
  24. m_bOpen = bOpen;
  25. m_pBindFileName = NULL;
  26. }
  27. CPropertyGridItemFile::~CPropertyGridItemFile()
  28. {
  29. }
  30. void CPropertyGridItemFile::SetFileName(CString strFileName)
  31. {
  32. CPropertyGridItem::SetValue(strFileName);
  33. if (m_pBindFileName)
  34. *m_pBindFileName = strFileName;
  35. }
  36. CString CPropertyGridItemFile::GetFileName()
  37. {
  38. return GetValue();
  39. }
  40. void CPropertyGridItemFile::BindToFileName(CString* pBindFileName)
  41. {
  42. m_pBindFileName = pBindFileName;
  43. if (m_pBindFileName)
  44. SetFileName(*m_pBindFileName);
  45. }
  46. void CPropertyGridItemFile::SetValue(CString strValue)
  47. {
  48. SetFileName(strValue);
  49. }
  50. void CPropertyGridItemFile::OnInplaceButtonDown()
  51. {
  52. // 当属性项处于编辑状态时点击按钮,由于属性值还没更新,
  53. // 导致文件对话框的初始文件名使用的还是修改前的属性值。
  54. // 解决办法是把输入焦点传给属性表,强制更新属性值。
  55. m_pGrid->SetFocus();
  56. DWORD dwFlags;
  57. if (m_bOpen)
  58. dwFlags = OFN_HIDEREADONLY | OFN_FILEMUSTEXIST;
  59. else
  60. dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
  61. CFileDialog dlg(m_bOpen, NULL, GetValue(), dwFlags);
  62. if (dlg.DoModal() == IDOK)
  63. {
  64. OnValueChanged( dlg.GetPathName() );
  65. }
  66. }