Delphi/VB/VS.NET 风格的对象检查器控件






4.44/5 (8投票s)
2001年8月5日
1分钟阅读

95364

2205
Delphi 风格的对象检查器
引言
这个控件是 Delphi/VB/VS.NET 风格的对象检查器的实现。我将这个控件用于许多应用程序的属性页中,让用户可以快速更改应用程序设置。我尽量保持代码的简单,虽然初次使用这个控件可能会觉得有点奇怪——控件的接口并不像其他 MFC 控件的接口那样,因为它旨在成为一个专门用于更改属性的控件。
文档比较简略,因为我没有太多时间编写文档。但是,包含的演示应该有助于理解如何使用控件的功能。
特点
该控件支持许多内置属性类型(尽管添加您自己的属性类型应该不是问题)
bool
short
int
float
double
CString
CStringList
COLORREF
COleDateTime
用法
要在您自己的应用程序中使用此控件,请将 CObjectInspector.cpp、CColorButton.cpp 和 CColourPopup.cpp 添加到您的项目文件中。打开资源编辑器并在对话框上放置一个自定义控件。在控件的属性中,将窗口类名输入为“ObjectInspectorCtrl”。将 CObjectInspector
变量添加到您的对话框类
CObjectInspector m_OI;
在您的 DoDataExchange 函数中添加 DDX_Control 处理程序
void CMyDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDlg) DDX_Control(pDX, IDC_OI, m_OI); //}}AFX_DATA_MAP }
重写 OnInitDialog 以自定义对象检查器并添加组和属性
BOOL CMyDialog::OnInitDialog() { CDialog::OnInitDialog(); CObjectInspector::CProperty *pGroup; // Create new property group m_OI.AddProperty (pProp = new CObjectInspector::CProperty("Group")); // Add properties to the group pProp->AddProperty (new CObjectInspector::CProperty("Integer-Value", &m_nIntValue)); pProp->AddProperty (new CObjectInspector::CProperty("Bool Value", &m_bBoolVal)); }
重写 OnNotify
以接收来自控件的通知消息
BOOL CMyDialog::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { if (wParam == IDC_OI) { CObjectInspector::NM_OIVIEW *nmHdr = (CObjectInspector::NM_OIVIEW*) lParam; // OIVN_ITEMCHANGED is sent after the user has changed a property if (nmHdr->hdr.code == OIVN_ITEMCHANGED) { // Do some stuff (use nmHdr->pProperty to access the altered property) } // OIVN_ITEMCHANGING is sent when the user is currently editing a property if (nmHdr->hdr.code == OIVN_ITEMCHANGING) { // Do some stuff (use nmHdr->pProperty to access the currently edited property) } } return CDialog::OnNotify(wParam, lParam, pResult); }
已知问题
使用光标键进行导航体验不太理想。
致谢
- 感谢 Chris Maunder 提供他的颜色选择器
- 感谢 Keith Rule 提供他的内存 DC 类