编辑时(或单击
AllowEdit
设置为 false
),文本向左移动:
但是 Visual Studio 本身并没有遇到这个问题:
文本在获得焦点之前准确地保持在原来的位置。
我们如何实现这一目标?
我应该澄清我的
CMFCPropertyGridEditProperty
正在这样做:
CWnd* CMFCPropertyGridEditProperty::CreateInPlaceEdit(CRect rectEdit, BOOL& bDefaultFormat)
{
CEdit *pEdit = (CEdit*)CMFCPropertyGridProperty::CreateInPlaceEdit(rectEdit, bDefaultFormat);
CString strClassName;
// Note that CreateInPlaceEdit can also return a CMFCMaskedEdit.
// But we are only supporting the CEdit.
GetClassName(pEdit->GetSafeHwnd(), strClassName.GetBuffer(_MAX_PATH), _MAX_PATH);
strClassName.ReleaseBuffer();
if (pEdit != NULL && strClassName == _T("Edit"))
pEdit->SetLimitText(m_iTextLimit);
return (CWnd*)pEdit;
}
但即使我使用
CMFCPropertyGridProperty
,效果也是一样的。
为了回答评论中的问题 1,我使用
COLeVariant
重载:
auto AddProperty = [&](CMFCPropertyGridProperty* pMeeting, CString strLabel, CString strValue)
{
if (pMeeting != nullptr)
{
COleVariant vString(strValue);
//CMFCPropertyGridEditProperty* pProperty = nullptr;
CMFCPropertyGridProperty* pProperty = nullptr;
//pProperty = new CMFCPropertyGridEditProperty(strLabel, vString, L"", 0, 50);
pProperty = new CMFCPropertyGridProperty(strLabel, vString, L"", 0);
if (pProperty != nullptr)
{
pProperty->AllowEdit(false);
pMeeting->AddSubItem(pProperty);
}
}
};
回答问题2,答案是否定的。这是一个拖到资源 IDE 中的
CDialog
上的属性网格控件。
如果我创建 Visual Studio 风格的 MDI,则右侧的内置道具网格会起作用。单击单元格,文本不会移动。
在“关于”对话框中添加一个道具网格并显示“关于”窗口:
在我的对话应用程序中获得与我相同的行为。
这是一个可行的解决方案(对于我在我的电脑上),但我仍然想了解有关此事的更多信息。
我决定使用我的
CMFCPropertyGridEditProperty
类,并对 CreateInPlaceEdit
进行一点小小的调整:
CWnd* CMFCPropertyGridEditProperty::CreateInPlaceEdit(CRect rectEdit, BOOL& bDefaultFormat)
{
rectEdit.OffsetRect(3, 0);
CEdit *pEdit = (CEdit*)CMFCPropertyGridProperty::CreateInPlaceEdit(rectEdit, bDefaultFormat);
CString strClassName;
// Note that CreateInPlaceEdit can also return a CMFCMaskedEdit.
// But we are only supporting the CEdit.
GetClassName(pEdit->GetSafeHwnd(), strClassName.GetBuffer(_MAX_PATH), _MAX_PATH);
strClassName.ReleaseBuffer();
if (pEdit != nullptr && strClassName == L"Edit")
pEdit->SetLimitText(m_iTextLimit);
return (CWnd*)pEdit;
}
我插入这条线来偏移矩形:
rectEdit.OffsetRect(3, 0);
现在,当我单击某个属性时,文本不会移动。
我学到的东西:
CDialog
内使用属性网格导致文本移动。我好奇的事情: