class CMFCPropertyGridPropertyCB : public CMFCPropertyGridProperty
{
// Construction
public:
CMFCPropertyGridPropertyCB(const CString& strName, const COleVariant& varValue, LPCTSTR lpszDescr)
: CMFCPropertyGridProperty(strName, varValue, lpszDescr)
{
}
public:
virtual BOOL OnEdit(LPPOINT lptClick)
{
//取按钮中心
// 目的是让 CMFCPropertyGridCtrl::OnLButtonDown 中
// ClickValue 事件处理中的 if(pHit->m_rectButton.PtInRect(point)) 条件满足
// 进而使 pHit->OnClickButton(point) 得以执行
// OnClickButton 中ComboBox控件 显示下拉列表
// 详细的见源码 afxpropertygridctrl.cpp
*lptClick = m_rectButton.CenterPoint();
return __super::OnEdit(lptClick);
}
virtual void OnCloseCombo()
{
__super::OnCloseCombo();
//下拉列表关闭后结束编辑
OnEndEdit();
}
};
//应用示例
//用应用相当生成MFC单文档或多文档(高级功能中选择属性窗口)
//这段示例截取了其中的部分,将CMFCPropertyGridProperty换成了CMFCPropertyGridPropertyCB类
//完整的代码 可自行用向导生成查看
{
//CMFCPropertyGridProperty* pProp = new CMFCPropertyGridProperty
CMFCPropertyGridProperty* pProp = new CMFCPropertyGridPropertyCB
(_T("边框"), _T("Dialog Frame"), _T("其中之一: 无(None)、细(Thin)、可调整大小(Resizable)、对话框外框(Dialog Frame)"));
pProp->AddOption(_T("None"));
pProp->AddOption(_T("Thin"));
pProp->AddOption(_T("Resizable"));
pProp->AddOption(_T("Dialog Frame"));
pProp->AllowEdit(FALSE);
pGroup1->AddSubItem(pProp);
}