MFC 里面checkbox状态问题

这是一个账号007 2014-08-22 03:07:37
在初始状态下,复选框是未未选中状态,添加了点击鼠标事件,点击如果是未选中,则选中


void CPcSetDlg::OnBnClickedCheckVector()
{
if ( BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_UNDER))
{
((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(1);
}
else
{
((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(0);
}

//下面code省略
//...
}


省略部分是我做了一些别的数据处理,跟状态没有关系,但是处理数据有一定的时间.

现在我想问的是,是要等整个按键下的代码执行完以后,才刷新这个选中状态?还是开头设置了,立即改变状态?
现在我测试是并没有立即改变勾选状态的,请问怎么处理,能达到实时的效果?
...全文
601 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcf_reader 2014-08-29
  • 打赏
  • 举报
回复
难道是你处理过程很费时?界面假死? 若是,那就用线程
「已注销」 2014-08-29
  • 打赏
  • 举报
回复
void CPcSetDlg::OnBnClickedCheckVector()
{
    CButton *pbtn = GetDlgItem(IDC_CHECK_UNDER);
    if (BST_CHECKED != pbtn->GetCheck())
    {
        pbtn->SendMessage(BM_CLICK, 0, 0);
    }
    //...
}
Sandrer 2014-08-28
  • 打赏
  • 举报
回复
引用 4 楼 fangjl9 的回复:
[quote=引用 2 楼 Sandrer 的回复:] 楼主的代码我有点看不懂 if (BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_UNDER)) 这里是判断 IDC_CHECK_UNDER 是否被钩选没错吧? 接着如果 IDC_CHECK_UNDER 被钩选的话,那下一句 ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(1); 这句代码又钩选了一次 IDC_CHECK_UNDER ??? 那这个状态压根就没改变吧 你是不是 if...else... 中的代码调换了?
这个是让 IDC_CHECK_UNDER的状态与BST_CHECKED的状态同步吧。
void CPcSetDlg::OnBnClickedCheckVector()
{
    if ( BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_UNDER))
        ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(1);
       else
        ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(0);
    UpdateData(FALSE);
     //下面code省略
    //...
}
2楼参数给的TRUE不对,TRUE是表明将控件的值给变量,FALSE才是吧数据刷给控件。还有你的大括号好多,看得眼花[/quote] 还有一点(你所说的2#不是我...你应该说的是1#),楼主的代码中并没有说控件与变量绑定了 所以说 UpdateData 根本不着边,也就是1#的方法也没用
Sandrer 2014-08-28
  • 打赏
  • 举报
回复
引用 4 楼 fangjl9 的回复:
[quote=引用 2 楼 Sandrer 的回复:] 楼主的代码我有点看不懂 if (BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_UNDER)) 这里是判断 IDC_CHECK_UNDER 是否被钩选没错吧? 接着如果 IDC_CHECK_UNDER 被钩选的话,那下一句 ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(1); 这句代码又钩选了一次 IDC_CHECK_UNDER ??? 那这个状态压根就没改变吧 你是不是 if...else... 中的代码调换了?
这个是让 IDC_CHECK_UNDER的状态与BST_CHECKED的状态同步吧。
void CPcSetDlg::OnBnClickedCheckVector()
{
    if ( BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_UNDER))
        ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(1);
       else
        ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(0);
    UpdateData(FALSE);
     //下面code省略
    //...
}
2楼参数给的TRUE不对,TRUE是表明将控件的值给变量,FALSE才是吧数据刷给控件。还有你的大括号好多,看得眼花[/quote] 什么叫状态同步呢,楼主的代码中操作的都是同一个控件,跟谁同步?
fangjl9 2014-08-28
  • 打赏
  • 举报
回复
引用 2 楼 Sandrer 的回复:
楼主的代码我有点看不懂 if (BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_UNDER)) 这里是判断 IDC_CHECK_UNDER 是否被钩选没错吧? 接着如果 IDC_CHECK_UNDER 被钩选的话,那下一句 ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(1); 这句代码又钩选了一次 IDC_CHECK_UNDER ??? 那这个状态压根就没改变吧 你是不是 if...else... 中的代码调换了?
这个是让 IDC_CHECK_UNDER的状态与BST_CHECKED的状态同步吧。
void CPcSetDlg::OnBnClickedCheckVector()
{
    if ( BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_UNDER))
        ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(1);
       else
        ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(0);
    UpdateData(FALSE);
     //下面code省略
    //...
}
2楼参数给的TRUE不对,TRUE是表明将控件的值给变量,FALSE才是吧数据刷给控件。还有你的大括号好多,看得眼花
shen_wei 2014-08-22
  • 打赏
  • 举报
回复
if ( BST_CHECKED != IsDlgButtonChecked(IDC_CHECK_UNDER)) { ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(1); }
Sandrer 2014-08-22
  • 打赏
  • 举报
回复
楼主的代码我有点看不懂 if (BST_CHECKED == IsDlgButtonChecked(IDC_CHECK_UNDER)) 这里是判断 IDC_CHECK_UNDER 是否被钩选没错吧? 接着如果 IDC_CHECK_UNDER 被钩选的话,那下一句 ((CButton*)GetDlgItem(IDC_CHECK_UNDER))->SetCheck(1); 这句代码又钩选了一次 IDC_CHECK_UNDER ??? 那这个状态压根就没改变吧 你是不是 if...else... 中的代码调换了?
SiGoYi 2014-08-22
  • 打赏
  • 举报
回复
修改完成后,立刻UpdateData(TRUE);式式

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧