单选按钮的使用 我在一个对话框中添加了两个单选按钮(同组),和两个文本框。我想实现这样的功能。一个单选按钮对应一个文本框,当一个单选按钮被选中时,其对应的文本框可用,如果单选按钮未被选中,则对应的文本框不可用。请问如何实现啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很容易啊,对两个单选按钮的事件进行处理,然后enablwindow()就可以了。 响应ON_BN_CLICKED,就是按钮按下的消息;对应的文本框GetDlgItem(IDC_xxx)->EnableWindow(TRUE)另外一个GetDlgItem(IDC_xxx)->EnableWindow(FALSE) 为什么我这样写实现不了呢?void A::OnARadio() { if (m_btnA.GetCheck()) { GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE); GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE); } else { GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE); GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE); }}void A::OnBRadio() { if (!m_btnA.GetCheck()) { GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE); GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE); } else { GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE); GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE); }} 如果是想要选中,文本框可用,再按一次不选中,文本框不可用,这样切换的话,建议用复选框好点,void CAdfasdDlg::OnCheck1() { // TODO: Add your control notification handler code here if(((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck()) GetDlgItem(IDC_EDIT3)->EnableWindow(true); else GetDlgItem(IDC_EDIT3)->EnableWindow(false);}不知你是不是这个意思,, 不很清楚你的意思,这2个按钮是同组的吗?如果是同组的,那么这2个else里的语句永不会被执行, void A::OnARadio() { GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE); GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE); }void A::OnBRadio() { GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE); GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE); } 这两个radio是同组的。我想实现的是一个radio被选中(而不仅仅是单击),然后它相应的文本可用,未被选中的那个radio对应的文本不可用。 单击即小选中了此radio按钮,在单击响应函数里设置文本框即可,想9楼那样是不是你要的? 通过DDX机制,将该组按钮定义为一个变量,如 int m_nRadio;DDX的实现 DDX_Radio(pDX, IDC_RADIO1, m_nRadio);void A::OnARadio() { OnRadio();}void A::OnBRadio() { OnRadio();}增加一个成员函数OnRadio();void A::OnRadio() { UpdateData(); GetDlgItem(IDC_A_EDIT)->EnableWindow( m_nRadio == 0 ? TRUE : FALSE); GetDlgItem(IDC_B_EDIT)->EnableWindow( m_nRadio == 0 ? FALSE : TRUE ); } 通过DDX机制,将该组按钮定义为一个变量,如 int m_nRadio; DDX的实现 DDX_Radio(pDX, IDC_RADIO1, m_nRadio); void A::OnARadio() { OnRadio(); } void A::OnBRadio() { OnRadio(); } 增加一个成员函数OnRadio(); void A::OnRadio() { UpdateData(); GetDlgItem(IDC_A_EDIT)->EnableWindow( m_nRadio == 0 ? TRUE : FALSE); GetDlgItem(IDC_B_EDIT)->EnableWindow( m_nRadio == 1 ? TRUE : FALSE); } 方法有很多种。9楼就是其中之一。下面是另一种方法:.h文件中:// Generated message map functions //{{AFX_MSG(SetupDlg5) afx_msg void OnSelect(UINT nID); //}}AFX_MSG.CPP中:BEGIN_MESSAGE_MAP(SetupDlg5, CDialog) //{{AFX_MSG_MAP(SetupDlg5) ON_COMMAND_RANGE(IDC_RADIO1,IDC_RADIO2,OnSelect) //}}AFX_MSG_MAPEND_MESSAGE_MAP()void C****::OnSelect(UINT nID){ switch(nID) { case IDC_RADIO1: //单击第一个 GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE); GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE); break; case IDC_RADIO2: //单击第二个 GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE); GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE); break; default:break; } } 关于CListCtrl::DeleteAllItems() 怎么引用其他类的函数 请问对话框中CTreeCtr树控件的右键菜单如何实现? 请问在一个程序的主线程中工作线程中怎么样设置线程的个数 求救!!!!GetPrivateProfileInt 我遇到了VC的怪问题,大家来想想!!! 离散余弦反变换。(急,在线等!) 手机铃声问题 如何将网页中的多个关键字替换成相关的链接? 在MFC中如何在链表中嵌套CString类,我的链表出现了没有想到的错误 帮忙看看启动画面的问题 请问这个函数定义怎么理解
很容易啊,对两个单选按钮的事件进行处理,然后enablwindow()就可以了。
对应的文本框GetDlgItem(IDC_xxx)->EnableWindow(TRUE)
另外一个GetDlgItem(IDC_xxx)->EnableWindow(FALSE)
void A::OnARadio()
{
if (m_btnA.GetCheck())
{
GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE);
GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE);
}
else
{
GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE);
}
}void A::OnBRadio()
{
if (!m_btnA.GetCheck())
{
GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE);
GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE);
}
}
{
// TODO: Add your control notification handler code here
if(((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck())
GetDlgItem(IDC_EDIT3)->EnableWindow(true);
else
GetDlgItem(IDC_EDIT3)->EnableWindow(false);
}
不知你是不是这个意思,,
不很清楚你的意思,这2个按钮是同组的吗?如果是同组的,那么这2个else里的语句永不会被执行,
{
GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE);
GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE);
}void A::OnBRadio()
{
GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE);
}
单击即小选中了此radio按钮,在单击响应函数里设置文本框即可,想9楼那样是不是你要的?
int m_nRadio;DDX的实现
DDX_Radio(pDX, IDC_RADIO1, m_nRadio);void A::OnARadio()
{
OnRadio();
}
void A::OnBRadio()
{
OnRadio();
}增加一个成员函数OnRadio();void A::OnRadio()
{
UpdateData();
GetDlgItem(IDC_A_EDIT)->EnableWindow( m_nRadio == 0 ? TRUE : FALSE);
GetDlgItem(IDC_B_EDIT)->EnableWindow( m_nRadio == 0 ? FALSE : TRUE );
}
int m_nRadio; DDX的实现
DDX_Radio(pDX, IDC_RADIO1, m_nRadio); void A::OnARadio()
{
OnRadio();
}
void A::OnBRadio()
{
OnRadio();
} 增加一个成员函数OnRadio(); void A::OnRadio()
{
UpdateData();
GetDlgItem(IDC_A_EDIT)->EnableWindow( m_nRadio == 0 ? TRUE : FALSE);
GetDlgItem(IDC_B_EDIT)->EnableWindow( m_nRadio == 1 ? TRUE : FALSE);
}
.h文件中:
// Generated message map functions
//{{AFX_MSG(SetupDlg5)
afx_msg void OnSelect(UINT nID);
//}}AFX_MSG
.CPP中:
BEGIN_MESSAGE_MAP(SetupDlg5, CDialog)
//{{AFX_MSG_MAP(SetupDlg5)
ON_COMMAND_RANGE(IDC_RADIO1,IDC_RADIO2,OnSelect)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()void C****::OnSelect(UINT nID)
{
switch(nID)
{
case IDC_RADIO1: //单击第一个
GetDlgItem(IDC_A_EDIT)->EnableWindow(TRUE);
GetDlgItem(IDC_B_EDIT)->EnableWindow(FALSE);
break;
case IDC_RADIO2: //单击第二个
GetDlgItem(IDC_A_EDIT)->EnableWindow(FALSE);
GetDlgItem(IDC_B_EDIT)->EnableWindow(TRUE);
break;
default:break;
}
}