PBAGDG.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:

Windows编程

开发平台:

Visual C++

  1. // CPropertyBagDlg.Cpp : implementation file
  2. //
  3. #include "StdAfx.H"
  4. #include "TestCon.H"
  5. #include "Resource.HM"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. void AutoSetColumnWidth( CListCtrl& list, int iColumn )
  12. {
  13.    int nAutoWidth;
  14.    int nAutoHeaderWidth;
  15.    list.SetColumnWidth( iColumn, LVSCW_AUTOSIZE );
  16.    nAutoWidth = list.GetColumnWidth( iColumn );
  17.    list.SetColumnWidth( iColumn, LVSCW_AUTOSIZE_USEHEADER );
  18.    nAutoHeaderWidth = list.GetColumnWidth( iColumn );
  19.    list.SetColumnWidth( iColumn, max( nAutoWidth, nAutoHeaderWidth ) );
  20. }
  21. /////////////////////////////////////////////////////////////////////////////
  22. // CPropertyBagDlg dialog
  23. CPropertyBagDlg::CPropertyBagDlg( CPropertyBag* pPropertyBag, CWnd* pParent ) :
  24.    CDialog( CPropertyBagDlg::IDD, pParent ),
  25.    m_pPropertyBag( pPropertyBag )
  26. {
  27.    ASSERT( m_pPropertyBag != NULL );
  28. //{{AFX_DATA_INIT(CPropertyBagDlg)
  29. // NOTE: the ClassWizard will add member initialization here
  30. //}}AFX_DATA_INIT
  31. }
  32. void CPropertyBagDlg::DoDataExchange(CDataExchange* pDX)
  33. {
  34. CDialog::DoDataExchange(pDX);
  35. //{{AFX_DATA_MAP(CPropertyBagDlg)
  36. DDX_Control(pDX, IDC_PROPERTIES, m_lvProperties);
  37. //}}AFX_DATA_MAP
  38. }
  39. BEGIN_MESSAGE_MAP(CPropertyBagDlg, CDialog)
  40. //{{AFX_MSG_MAP(CPropertyBagDlg)
  41. ON_WM_HELPINFO()
  42. ON_WM_CONTEXTMENU()
  43. //}}AFX_MSG_MAP
  44. END_MESSAGE_MAP()
  45. /////////////////////////////////////////////////////////////////////////////
  46. // CPropertyBagDlg message handlers
  47. BOOL CPropertyBagDlg::OnInitDialog()
  48. {
  49.    USES_CONVERSION;
  50.    POSITION posItem;
  51.    CPropertyBagItem* pItem;
  52.    int iItem;
  53.    int iLVItem;
  54.    COleVariant varString;
  55.    CString strColumnTitle;
  56.    CString str;
  57.    CDialog::OnInitDialog();
  58.    // Add the appropriate columns to the parameter list control.
  59.    strColumnTitle.LoadString( IDS_PROPERTY );
  60.    m_lvProperties.InsertColumn( 0, strColumnTitle, LVCFMT_LEFT, 100 );
  61.    strColumnTitle.LoadString( IDS_VALUE );
  62.    m_lvProperties.InsertColumn( 1, strColumnTitle, LVCFMT_LEFT, 100 );
  63.    strColumnTitle.LoadString( IDS_TYPE );
  64.    m_lvProperties.InsertColumn( 2, strColumnTitle, LVCFMT_LEFT, 100 );
  65.    iItem = 0;
  66.    posItem = m_pPropertyBag->GetFirstItemPosition();
  67.    while( posItem != NULL )
  68.    {
  69.   pItem = m_pPropertyBag->GetNextItem( posItem );
  70.   iLVItem = m_lvProperties.InsertItem( iItem, pItem->m_strName );
  71.   m_lvProperties.SetItemText( iLVItem, 0, pItem->m_strName );
  72.   TRY
  73.   {
  74.  varString.ChangeType( VT_BSTR, pItem->m_varValue );
  75.  str = varString.bstrVal;
  76.   }
  77.   CATCH( COleException, e )
  78.   {
  79.  str.LoadString( IDS_UNABLETOREPRESENT );
  80.   }
  81.   END_CATCH
  82.   m_lvProperties.SetItemText( iLVItem, 1, str );
  83.   m_lvProperties.SetItemText( iLVItem, 2, VTToString(
  84.  pItem->m_varValue.vt ) );
  85.   iItem++;
  86.    }
  87.    AutoSetColumnWidth( m_lvProperties, 0 );
  88.    AutoSetColumnWidth( m_lvProperties, 1 );
  89.    AutoSetColumnWidth( m_lvProperties, 2 );
  90. return( TRUE );
  91. }
  92. static DWORD rgmapCHID[] =
  93. {
  94.    IDC_PROPERTIES, HIDC_PROPERTIES,
  95.    0, 0
  96. };
  97. BOOL CPropertyBagDlg::OnHelpInfo( HELPINFO* pHelpInfo )
  98. {
  99.    return( ::WinHelp( HWND( pHelpInfo->hItemHandle ),
  100.   AfxGetApp()->m_pszHelpFilePath, HELP_WM_HELP, DWORD( LPVOID(
  101.   rgmapCHID ) ) ) );
  102. }
  103. void CPropertyBagDlg::OnContextMenu( CWnd* pWnd, CPoint /* point */ )
  104. {
  105.    ::WinHelp( HWND( *pWnd ), AfxGetApp()->m_pszHelpFilePath, HELP_CONTEXTMENU,
  106.   DWORD( LPVOID( rgmapCHID ) ) );
  107. }