加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – ownerdrawn复选框

发布时间:2020-12-16 09:38:05 所属栏目:百科 来源:网络整理
导读:我有一个原生的win32 c应用程序,其中有一个复选框.我想替换复选框并创建具有2个状态的ON / OFF切换按钮(就像复选框一样).我已将BS_OWNERDRAW样式添加到复选框并将其绘制到WM_DRAWITEM中的窗口.问题是,当我点击复选框时,我得到一条WM_COMMAND消息(就像没有BS_
我有一个原生的win32 c应用程序,其中有一个复选框.我想替换复选框并创建具有2个状态的ON / OFF切换按钮(就像复选框一样).我已将BS_OWNERDRAW样式添加到复选框并将其绘制到WM_DRAWITEM中的窗口.问题是,当我点击复选框时,我得到一条WM_COMMAND消息(就像没有BS_OWNERDRAW一样),但CHECKED状态不会自动改变.我是否必须实现此功能,或者我错过了什么?

处理单击复选框的代码:

case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);

    switch (wmId)
    {
        case IDC_CHECKBOX:
            if(wmEvent == BN_CLICKED)
            {
                dwPos = SendMessage(checkBox,BM_GETCHECK,0);
                if(dwPos == BST_CHECKED ) 
                {
                   // do some stuff

                } else if(dwPos == BST_UNCHECKED) {
                    // do some stuff
                }
           }

问题是每次我点击复选框BM_GETCHECK都会返回BST_UNCHECKED.如果我删除BS_OWNERDRAW它工作正常.

创建按钮/复选框的代码:

checkBox = CreateWindowEx(
        0,WC_BUTTON,szBuffer,WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_OWNERDRAW,BUTTON_ON_OFF_X,BUTTON_ON_OFF_Y,BUTTON_ON_OFF_WIDTH,BUTTON_ON_OFF_HEIGHT,hWnd,(HMENU)IDC_CHECKBOX,hInst,NULL
   );

解决方法

是.您需要从WM_COMMAND翻译并使用类似 CheckDlgButton的内容切换内部检查状态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读