基于CDHtmlDialog的MFC应用中获取单选框输入值的方法
解决MFC中DDX_DHtml_Radio获取单选框值的问题
我之前做MFC HTML对话框的时候也踩过这个坑,刚好能帮到你!
核心问题:搞对szId参数的含义
你之前传单个单选框的ID是错的,DDX_DHtml_Radio的szId需要传入的是单选按钮组的name属性值,也就是你HTML里的http-switch,而不是单个单选框的radio-https或radio-http。
另外要注意,value参数返回的是选中单选框在组内的索引位置(从0开始),不是单选框自身的value属性值(比如"https"或"http"),这点别搞混了。
具体实现步骤
结合你的HTML代码,给你一步步讲怎么用:
在对话框类头文件定义变量
在你的对话框类(比如CMyHtmlDialog)里加一个long类型成员变量,用来存选中的索引:class CMyHtmlDialog : public CDHtmlDialog { // ...其他代码 private: long m_nHttpSwitchSelected; // 初始可以设为1,因为你的默认选中是第二个单选框 };记得在构造函数里初始化它,比如
m_nHttpSwitchSelected = 1;在DoDataExchange里添加DDX绑定
找到对话框的DoDataExchange函数,加上这行代码:void CMyHtmlDialog::DoDataExchange(CDataExchange* pDX) { CDHtmlDialog::DoDataExchange(pDX); // 你的其他DDX代码(比如文本框、复选框的绑定) DDX_DHtml_Radio(pDX, _T("http-switch"), m_nHttpSwitchSelected); }这里
_T("http-switch")就是你单选组的name属性值,一定要和HTML里的一致。获取选中状态
当你需要获取当前选中的单选框时,调用UpdateData(TRUE);,之后m_nHttpSwitchSelected就会有对应的数值:- 选中
radio-https(第一个单选框)→ 值为0 - 选中
radio-http(第二个单选框)→ 值为1
- 选中
额外:如果想要获取单选框的value属性值
如果你的需求是拿到"https"或"http"这种字符串,而不是索引,可以在拿到索引后做对应映射,或者直接通过DOM获取选中的单选框:
// 比如先更新数据拿到索引 UpdateData(TRUE); CString strValue; if (m_nHttpSwitchSelected == 0) { strValue = _T("https"); } else if (m_nHttpSwitchSelected == 1) { strValue = _T("http"); } // 或者直接通过DOM查询选中的单选框 CComPtr<IHTMLInputElement> pSelectedRadio; CComPtr<IHTMLDocument2> pDoc; GetDHtmlDocument(&pDoc); if (pDoc) { CComBSTR bstrName(_T("http-switch")); CComPtr<IHTMLElementCollection> pColl; pDoc->get_elements(&pColl); if (pColl) { long nCount; pColl->get_length(&nCount); for (long i = 0; i < nCount; i++) { CComVariant varIndex(i); CComPtr<IDispatch> pDisp; pColl->item(varIndex, varIndex, &pDisp); CComQIPtr<IHTMLInputElement> pRadio(pDisp); if (pRadio) { CComBSTR bstrRadioName; pRadio->get_name(&bstrRadioName); if (bstrRadioName == bstrName) { VARIANT_BOOL bChecked; pRadio->get_checked(&bChecked); if (bChecked) { CComBSTR bstrRadioValue; pRadio->get_value(&bstrRadioValue); strValue = CString(bstrRadioValue); break; } } } } } }
内容的提问来源于stack exchange,提问作者user9370102
相关产品推荐
相关产品推荐

