我可以CMFCPropertyGrid控制我添加了一個 Combobox 屬性CMFCPropertyGridProperty::AddOption():
foreach(auto i, list)
{
str.Format(_T("<%s> %s"), i.first, i.second);
pProp->AddOption(str);
}
現在我需要在用戶下拉串列時執行一些代碼CMFCPropertyGrid。
CBN_DROPDOWN如果它是對話框視窗中的組合框控制元件(它有 ID),我會使用它。但是在這種情況下我該怎么做CMFCPropertyGrid呢?
uj5u.com熱心網友回復:
對于組合框樣式CMFCPropertyGridProperty,OnClickButton當用戶單擊控制元件右上角附近的向下箭頭按鈕(這會導致下拉串列出現)時,框架會呼叫該成員。
因此,為您的控制元件創建一個類(派生自CMFCPropertyGridProperty)并覆寫該OnClickButton成員以添加您要運行的代碼。以下是您可以執行的操作的概述:
class MyComboControl : public CMFCPropertyGridProperty
{
public:
// Constructor: add some options ...
MyComboControl(void) : CMFCPropertyGridProperty(L"Choice:", _variant_t(L""), L"Description Text") {
AllowEdit(FALSE);
for (int i = 0; i < 3; i) {
CString text;
text.Format(L"Option #%d", i);
AddOption(text.GetString());
if (i == 0) SetValue(text.GetString());
}
}
// Override to handle the dropdown activation ...
void OnClickButton(CPoint pt) override {
//... Add any pre-drop code here.
CMFCPropertyGridProperty::OnClickButton(pt); // Call base class
//... Add any post-drop code here
}
};
uj5u.com熱心網友回復:
MFC 會通知父視窗屬性更改通過 AFX_WM_PROPERTY_CHANGED
CMFCPropertyGridCtrl當用戶更改所選屬性的值時,發送給屬性網格控制元件 ( )的所有者。
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
ON_REGISTERED_MESSAGE(AFX_WM_PROPERTY_CHANGED, OnPropertyChanged)
END_MESSAGE_MAP()
afx_msg LRESULT CMyDialog::OnPropertyChanged(WPARAM wparam, LPARAM lparam)
{
if (!lparam)
return 0;
auto prop = reinterpret_cast<CMFCPropertyGridProperty*>(lparam);
if (prop != m_pProp)
{
auto str_variant = prop->GetValue();
CString str;
if(str_variant.vt == VT_BSTR)
str = CString(str_variant.bstrVal);
}
return 0;
}
如果您有多個控制元件與網格控制元件,您希望宣告pProp為類成員,m_pProp以便可以測驗其值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/326992.html
上一篇:如何解決MavenJSF專案:java:packageorg.primefaces.model.chart不存在?
