MFC 功能包 - 如何更新属性网格控件
Posted
技术标签:
【中文标题】MFC 功能包 - 如何更新属性网格控件【英文标题】:MFC feature pack - how to update the property grid control 【发布时间】:2009-07-20 11:00:39 【问题描述】:我是 MFC 新手,对“MFC 功能包”的新功能有些困惑。通过向导,我现在有一个看起来像 IDE 的应用程序 - 左侧有一个可停靠的文件资源管理器,右侧有一个可停靠的属性窗口。我可以通过 ON_WM_LBUTTONDBLCLK 和 GetItemText() 获取文件资源管理器窗口中的选定项目。
问题: 单击文件资源管理器窗口中的项目后,属性窗口应“更新”。前任。我单击树控件中的一个项目“按钮”,属性窗口应该显示“图像”、“字体”和“颜色”我该怎么做?如何更新propertygridCtrl的内容?
【问题讨论】:
【参考方案1】:要填充属性网格,请查看向导生成的内容。您将为“项目按钮”单击事件设置处理程序,清除网格内容,再次填充。似乎是一个显而易见的答案,所以我可能误解了这个问题。
【讨论】:
这正是它背后的逻辑。我可以通过 void CPropertiesWnd::OnProperties1() 清除和填充网格内容,它在消息映射中被称为 ON_COMMAND(ID_PROPERTIES1, OnProperties1)。这意味着我想在单击树项后在 CViewTree 类中调用 OnProperties1() 。如何调用 afx_msg void OnProperties1()? 呃,像所有其他方法和函数一样调用它:OnProperties1(); ?它只是一个和其他所有函数一样的函数,即使它也是从消息处理程序调用的,您也可以手动调用它。 像函数一样调用 afx_msg?嗯……如果你从另一个类中调用它,它就不会那样工作。你肯定会得到一个错误... 请准确说明您遇到的错误。在它们之前用 afx_msg 声明的函数是普通函数,您不能将它们称为“像函数”——它们是函数。 afx_msg 在最新版本的 MFC 中甚至没有做任何事情(您必须使用它,因为您正在使用 Feature Pack)。 afx_msg 是一个空的#define,被预处理器“删除”。只要您的函数是公共的,您就可以从任何地方调用它(显然,您必须使用正确的参数调用它,但像您这样的消息处理程序不接受参数)。【参考方案2】:我不明白你的困难在哪里。只需有一个派生自 CMFCPropertyGrid 的类,在其上添加一个公共成员函数以更新其数据,具有一个参数。从文件资源管理器窗口调用该函数,将所选元素作为参数。
也许您选择错误来处理用户正在更改所选项目的事实?我不知道你的“文件资源管理器”控件是什么类,但我建议你使用与“项目更改”而不是“单击”或“LButton”有关的东西,因为所选项目可以通过其他方式更改,即方向键!
【讨论】:
以上是关于MFC 功能包 - 如何更新属性网格控件的主要内容,如果未能解决你的问题,请参考以下文章