MFC:在运行时扩展
MFC: Expanding during runtime
我有一个使用 MFC 的 GUI 项目在工作。
小部件(控件)在编译时消息映射中进行消息处理table。
我想在运行时有条件地向窗体添加控件,但我一直纠结于如何在运行时将消息处理程序附加到消息映射。
如何在运行时将消息处理程序添加到 MFC 消息映射?
我应该使用替代流程吗?
有关消息映射的信息,请参阅 MFC Message Maps documentation。
环境:
Windows 7 或 Windows 10(该应用程序适用于 OS)
Visual Studio 2017
如果您知道为添加的控件提供的 "ID" 值的范围(您应该这样做),那么您可以在消息映射中使用 ON_CONTROL_RANGE
条目,而不是 ON_CONTROL
(通常用于特定的单个控件)。例如,对于单击其中一个控件(其 ID 在 IDC_FIRST
到 IDC_LAST
范围内的按钮),您可以添加以下消息映射条目:
ON_CONTROL_RANGE(BN_CLICKED, IDC_FIRST, IDC_LAST, OnButtonClick)
消息处理程序 OnButtonClick
的格式与单个控件的格式非常相似,但带有一个 UINT
参数,即发送消息的控件的 ID:
void MyDialog::OnButtonClick(UINT nID)
{
int button_number = static_cast<int>(nID - IDC_FIRST);
// .. do something
return;
}
随时要求进一步澄清and/or解释。
我有一个使用 MFC 的 GUI 项目在工作。
小部件(控件)在编译时消息映射中进行消息处理table。
我想在运行时有条件地向窗体添加控件,但我一直纠结于如何在运行时将消息处理程序附加到消息映射。
如何在运行时将消息处理程序添加到 MFC 消息映射?
我应该使用替代流程吗?
有关消息映射的信息,请参阅 MFC Message Maps documentation。
环境:
Windows 7 或 Windows 10(该应用程序适用于 OS)
Visual Studio 2017
如果您知道为添加的控件提供的 "ID" 值的范围(您应该这样做),那么您可以在消息映射中使用 ON_CONTROL_RANGE
条目,而不是 ON_CONTROL
(通常用于特定的单个控件)。例如,对于单击其中一个控件(其 ID 在 IDC_FIRST
到 IDC_LAST
范围内的按钮),您可以添加以下消息映射条目:
ON_CONTROL_RANGE(BN_CLICKED, IDC_FIRST, IDC_LAST, OnButtonClick)
消息处理程序 OnButtonClick
的格式与单个控件的格式非常相似,但带有一个 UINT
参数,即发送消息的控件的 ID:
void MyDialog::OnButtonClick(UINT nID)
{
int button_number = static_cast<int>(nID - IDC_FIRST);
// .. do something
return;
}
随时要求进一步澄清and/or解释。