今天是使用combo box实现:根据选择值不同,控制另一个控件的启用停用。例如:选择1时启用,2或者3时停用。
选择CBN_SELECHANGE消息
以下为实现(有问题)
void CAccOpen::OnSelchange()
{
// TODO: Add your control notification handler code here
CString l_cstrList;
((CComboBox*)GetDlgItem(IDC_DRAW_TYPE))->GetWindowText(l_cstrList);
if( l_cstrList[0]=='1' )
{
GetDlgItem( IDC_ACC_PWD )->EnableWindow( true );
GetDlgItem( IDC_ACCPWD )->EnableWindow( true );
}
else
{
GetDlgItem( IDC_ACC_PWD )->EnableWindow( false );
GetDlgItem( IDC_ACCPWD )->EnableWindow( false );
}
}
发现一般选择2时才启用,选择3或者1时停用,跟踪了一下,发现
((CComboBox*)GetDlgItem(IDC_DRAW_TYPE))->GetWindowText(l_cstrList);
中得到l_cstrList有滞后性,是上一个值,非当下值。
修改成如下实现即可:
int iPos=((CComboBox*)GetDlgItem(IDC_DRAW_TYPE))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_DRAW_TYPE))->GetLBText(iPos,l_cstrList);
if( l_cstrList[0]=='1' )
{
GetDlgItem( IDC_ACC_PWD )->EnableWindow( true );
GetDlgItem( IDC_ACCPWD )->EnableWindow( true );
}
else
{
GetDlgItem( IDC_ACC_PWD )->EnableWindow( false );
GetDlgItem( IDC_ACCPWD )->EnableWindow( false );
}
选择消息CBN_SELENDOK 进行实现效果一样。