[セットトップ]VS 08 SP 1におけるCMFCPropertyGridCtrlの基本的な使い方
DLGにおける基本的な応用.
まずCxxdlg.hファイルに追加
そしてCxxdlg.cppのOnInitDialog()の
OK
メッセージ・アクティビティを介して値と入力された場所を説明します.
.hに加入する
.cppに赤を入れる
次に関数を追加
==============================================================================
2010.07.01更新
今日はvs 2008 sp 1でウィザードで生成されたSDI vsテーマフレームワークにCMFCPropertyGridPropertyの応用がたくさんあることを発見しました.
===============================================================================
2010.08.02
オプションにComboBoxを追加するのも便利です
comboxが出てくる
=================================================================================
2012-01-20
プログラムの中でpropのポインタを獲得したいのはこのようにすることができます
たとえば
0
-0
--0
--1
-1
1
-0
--0
-1
2
=================================================================================
2013-08-20
ボタンに自分のダイアログボックスをポップアップするには、クラスを派生させることができます.
=================================================================================
2013-08-29
多くの階層がある場合に注意してください.
1
-2
--3
---4
その中の2 3はいずれもGroup形式に設定しなければならない,すなわち構造時に1つのパラメータしかない.
=============================================================================
2013-09-15
すべてのnewから出てくるメモリについて人工的なdeleteで解放されず、コントロールクラスが自動的に解放されます.
===========================================================================
newオブジェクトの場合2番目のパラメータは使わないほうがいいです
これで設定に相当するのでvariant_tパラメータのフォーマットがUINTの後で更にSetValueの時断言を触発することができて、ヒントは一致しません
まずCxxdlg.hファイルに追加
public:
CMFCPropertyGridCtrl m_MFCPGCtrl;
CMFCPropertyGridProperty* pGroup1;
CMFCPropertyGridProperty* pGroup2;
そしてCxxdlg.cppのOnInitDialog()の
CRect rc;
GetClientRect(rc);
rc.bottom -= 50;
rc.left += 50;
rc.right -= 50;
m_MFCPGCtrl.Create(WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_BORDER,rc,this,IDC_CMFCPGCTRL);
m_MFCPGCtrl.EnableHeaderCtrl(true,_T(" "),_T(" "));
m_MFCPGCtrl.EnableDescriptionArea();
m_MFCPGCtrl.SetVSDotNetLook();
m_MFCPGCtrl.MarkModifiedProperties();
m_MFCPGCtrl.SetAlphabeticMode(false);
m_MFCPGCtrl.SetShowDragContext();
pGroup1 = new CMFCPropertyGridProperty(_T(" 1"));
pGroup2 = new CMFCPropertyGridProperty(_T(" 2"));
pGroup3 = new CMFCPropertyGridProperty(_T(" 3"));
pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T(" 1"),_T("2.5"),_T(" 1 ")));
pGroup1->AddSubItem(new CMFCPropertyGridProperty(_T(" 2"),_T("3.5"),_T(" 2 ")));
pGroup2->AddSubItem(new CMFCPropertyGridProperty(_T(" 3"),_T("4.5"),_T(" 3 ")));
pGroup2->AddSubItem(new CMFCPropertyGridProperty(_T(" 4"),_T("5.5"),_T(" 4 ")));
pGroup3->AddSubItem(new CMFCPropertyGridFileProperty(_T(" "), TRUE, _T("D://defaule.csv"), _T("csv"), NULL, _T("csv Files(*.csv)|*.csv|All Files(*.*)|*.*||"), _T(" csv ")));//
m_MFCPGCtrl.AddProperty(pGroup1);
m_MFCPGCtrl.AddProperty(pGroup2);
m_MFCPGCtrl.AddProperty(pGroup3);
m_MFCPGCtrl.ExpandAll();
OK
メッセージ・アクティビティを介して値と入力された場所を説明します.
.hに加入する
afx_msg LRESULT OnPropertyChanged(WPARAM,LPARAM);
.cppに赤を入れる
BEGIN_MESSAGE_MAP(CCMFCPGCtrlDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_REGISTERED_MESSAGE(AFX_WM_PROPERTY_CHANGED, OnPropertyChanged)
END_MESSAGE_MAP()
次に関数を追加
LRESULT CCMFCPGCtrlDlg::OnPropertyChanged (WPARAM,LPARAM lParam)
{
CMFCPropertyGridProperty* pProp = (CMFCPropertyGridProperty*) lParam;
int i = (int) pProp->GetData ();
CString s = pProp->GetName(); //
COleVariant t = pProp->GetValue(); //
t = pProp->GetOriginalValue(); //
CString d;
d = t.bstrVal; // COleVariant CString
return 0;
}
==============================================================================
2010.07.01更新
今日はvs 2008 sp 1でウィザードで生成されたSDI vsテーマフレームワークにCMFCPropertyGridPropertyの応用がたくさんあることを発見しました.
===============================================================================
2010.08.02
オプションにComboBoxを追加するのも便利です
CMFCPropertyGridProperty* pProp = new CMFCPropertyGridProperty(_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);
comboxが出てくる
=================================================================================
2012-01-20
プログラムの中でpropのポインタを獲得したいのはこのようにすることができます
CMFCPropertyGridProperty* pProp = m_PGCtrl.GetProperty(i)->GetSubItem(j)//i,j
たとえば
0
-0
--0
--1
-1
1
-0
--0
-1
2
=================================================================================
2013-08-20
ボタンに自分のダイアログボックスをポップアップするには、クラスを派生させることができます.
class CBTinValueProperty :public CMFCPropertyGridProperty
{
public:
CBTinValueProperty(const CString& strName,const COleVariant& varValue,LPCTSTR lpszDescr = NULL):
CMFCPropertyGridProperty(strName,varValue,lpszDescr)
{}
virtual ~CBTinValueProperty()
{}
virtual BOOL HasButton() const;
virtual void OnClickButton(CPoint point);
protected:
private:
};
BOOL CBTinValueProperty::HasButton() const
{
return TRUE;
}
void CBTinValueProperty::OnClickButton(CPoint point)
{
AfxMessageBox(_T("ok"));
}
=================================================================================
2013-08-29
多くの階層がある場合に注意してください.
1
-2
--3
---4
その中の2 3はいずれもGroup形式に設定しなければならない,すなわち構造時に1つのパラメータしかない.
CMFCPropertyGridProperty* pProp1 = new CMFCPropertyGridProperty(_T(" "));
=============================================================================
2013-09-15
すべてのnewから出てくるメモリについて人工的なdeleteで解放されず、コントロールクラスが自動的に解放されます.
===========================================================================
newオブジェクトの場合2番目のパラメータは使わないほうがいいです
_variant_t((UINT)0)
これで設定に相当するのでvariant_tパラメータのフォーマットがUINTの後で更にSetValueの時断言を触発することができて、ヒントは一致しません