virtual void RecreateWidget() { CreateCombo(); }
//***************************************************************************** BOOL CCxNDArrayDimItem::OnEdit (LPPOINT) { ASSERT_VALID (this); ASSERT_VALID (m_pGridRow); if (!m_bAllowEdit) { return FALSE; } CCxNDArrayDimGrid* pWndList = (CCxNDArrayDimGrid*)((CCxNDArrayDimRow*)m_pGridRow)->m_pWndList; ASSERT_VALID (pWndList); m_pWndInPlace = NULL; OnBeginInplaceEdit (); CRect rectEdit; CRect rectSpin; AdjustInPlaceEditRect (rectEdit, rectSpin); BOOL bDefaultFormat = FALSE; m_pWndInPlace = CreateInPlaceEdit (rectEdit, bDefaultFormat); pWndList->OnAfterInplaceEditCreated (this, m_pWndInPlace); if (m_pWndInPlace != NULL) { //通过隐藏CEdit控件,实现Combo单元格只读效果 if ( m_nIdColumn == CCxNDArrayDimGrid::COL_DIM_TYPE ) { m_pWndInPlace->ShowWindow(SW_HIDE); } if (bDefaultFormat) { m_pWndInPlace->SetWindowText (FormatItem ()); } if (m_dwFlags & BCGP_GRID_ITEM_HAS_LIST) { CRect rectCombo = m_Rect; rectCombo.left = rectEdit.left - 4; m_pWndCombo = CreateCombo (pWndList, rectCombo); ASSERT_VALID (m_pWndCombo); SetComboFont (); //------------------------------------------------------------------- // Synchronize bottom edge of the combobox with the item bottom edge: //------------------------------------------------------------------- m_pWndCombo->GetWindowRect (rectCombo); pWndList->ScreenToClient (&rectCombo); int dy = rectCombo.Height () - m_Rect.Height (); m_pWndCombo->SetWindowPos (NULL, rectCombo.left, rectCombo.top - dy + 1, -1, -1, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE); if (m_varValue.vt == VT_BOOL) { m_lstOptions.AddTail (pWndList->m_strTrue); m_lstOptions.AddTail (pWndList->m_strFalse); } for (POSITION pos = m_lstOptions.GetHeadPosition (); pos != NULL;) { m_pWndCombo->AddString (m_lstOptions.GetNext (pos)); } } if (m_dwFlags & BCGP_GRID_ITEM_HAS_SPIN) { m_pWndSpin = CreateSpinControl (rectSpin); } SetInPlaceEditFont (); m_pWndInPlace->SetFocus (); if ( !m_bAllowEdit ) { m_pWndInPlace->HideCaret (); } m_bInPlaceEdit = TRUE; return TRUE; } return FALSE; }