【发布时间】:2019-12-02 07:31:06
【问题描述】:
我有一个包含“1,2,3,4,5”的组合框。当我在组合框中进行选择时,会加载先前的选择。例如,如果组合框中的值为“1”并且我选择“2”,则“1”将加载到我的变量nApplication 中,“2”将显示在我的组合框中。如果我想加载“2”,我需要再更改一次选择。示例从“2”更改为“3”。如何让它加载我选择的号码?我的代码如下所示。
void CAppDlg::DoDataExchange(CDataExchange* pDX)
{
DDX_Text(pDX, IDC_Application, nApplication);
.
.
void CAppDlg::OnCbnSelchangeapplication()
{
UpdateData(TRUE);
int j = nApplication-1;
for(int i=0; i<MAX_LABEL; i++){
bool bShow = i < arrLabel[j];
((CButton *)GetDlgItem(IDC_Label1+i))->ShowWindow(bShow);
}
}
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
可能
CBN_SELCHANGE消息(映射到OnCbnSelchangeapplication()处理程序)在组合框的内容更新之前被处理。当用户输入完成时,UpdateData(TRUE)通常在OnOK()处理程序中调用。一种解决方法是更改OnCbnSelchangeapplication()中的代码以发布自定义消息,并将您当前拥有的代码移动到此消息的处理程序。这样UpdateData(TRUE)将在处理CBN_SELCHANGE消息“之后”在技术上被调用。 -
感谢您的回答。但是“发布自定义消息”是什么意思?
-
例如,
PostMessage(WM_APP+100);(参数默认为零)。您还需要在消息映射中添加一个映射宏:ON_MESSAGE(WM_APP+100, OnComboBoxChanged ),当然还要添加OnComboBoxChanged ()处理程序并将当前位于OnCbnSelchangeapplication()中的代码移到那里。 -
你的问题不清楚。请注意,1 在索引 0 处,2 在索引 1 处,依此类推,但您可能已经知道了。
-
你为什么要
nApplication-1?nApplication是活动索引。当用户更改值时调用选择更改处理程序。
标签: c++ visual-studio-2010 variables combobox mfc