如何在 c & mingw 中创建复选框

Posted

技术标签:

【中文标题】如何在 c & mingw 中创建复选框【英文标题】:How to create checkbox in c & mingw 【发布时间】:2013-09-25 19:36:51 【问题描述】:

如何在 c 中创建复选框/单选按钮/数字步进器? 我可以制作这样的按钮:

CreateWindowEx(0, "BUTTON", label, WS_VISIBLE | WS_CHILD, 10, top, 100, 20, hWndDlg, NULL, hInst, NULL);

我正在使用 mingw 进行编译。我搜索了这个,发现mingw无法做到这一点,因为它不支持MFC?

另外,我想要做的事情可能更容易理解:

void renderOptionsTab (HWND hWndDlg, JSONLinkElement *tab) 
    int top = 35;
    do 
        std::string type = std::string((char *)((JSONObject *)tab->value)->getValue("type"));
        char *label = (char *)((JSONObject *)tab->value)->getValue("label");
        void *value = (char *)((JSONObject *)tab->value)->getValue("value");

        char *forComponent = (char *)((JSONObject *)tab->value)->getValue("for");
        char *idComponent = (char *)((JSONObject *)tab->value)->getValue("id");
        char *group = (char *)((JSONObject *)tab->value)->getValue("group");


        char *display = (char *)((JSONObject *)tab->value)->getValue("display");

        if (type == std::string("checkbox")) 
            CreateWindowEx(0, "Button", label, WS_VISIBLE | WS_CHILD, 10, top, 100, 20, hWndDlg, NULL, hInst, NULL);
         else if (type == std::string("br")) 

         else if (type == std::string("buildID")) 
            CreateWindowEx(0, "Static", VERSION.c_str(), WS_VISIBLE | WS_CHILD, 10, top, 100, 20, hWndDlg, NULL, hInst, NULL);
         else if (type == std::string("browse")) 

         else if (type == std::string("label")) 

         else if (type == std::string("radio")) 

         else if (type == std::string("number")) 

         else if (type == std::string("button")) 
            CreateWindowEx(0, "BUTTON", label, WS_VISIBLE | WS_CHILD, 10, top, 100, 20, hWndDlg, NULL, hInst, NULL);
        

        if (display != NULL) 
            if (std::string(display) == std::string("inline")) 
                top -= 30;
            
        

        top += 30;
        tab = tab->next;
     while (tab->next != NULL);

按钮工作,不知道如何解决其余的。

【问题讨论】:

这是普通的 WinAPI,应该可以与 mingw 一起使用。你能告诉我们你是如何使用 CreateWindowEx 的吗? (它周围的代码) 嗯..没看懂,我用的方法很多,你想知道我是怎么创建的hWndDlg吗? 是的,以及创建按钮的位置/时间。常见的方法是使用 CreateWindowEx() 创建主窗口,并使用 CreateWindow() 在 WM_CREATE 上的 WindowProcedure 中添加按钮等内容。 嗯.. 它有点复杂。我要添加的窗口是由DialogBox(hInst, MAKEINTRESOURCE(IDD_DLG_SETTINGS), NULL, reinterpret_cast<DLGPROC>(settingsDlgProc)); 创建的,其中有一个选项卡控件CreateWindowEx(0, WC_TABCONTROL, "", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, 10, 10, rcClient.right - 20, rcClient.bottom - 42, hwndParent, NULL, hInst, NULL);,我想添加到DialogBox 以响应case WM_NOTIFY: if (((LPNMHDR)lParam)->code == TCN_SELCHANGE) 哦,对不起。我误解了你的问题。您正在搜索 CheckBox 类之类的内容。 【参考方案1】:
CreateWindowEx(0, "BUTTON", label, WS_VISIBLE | WS_CHILD | BS_CHECKBOX, 10, top, 100, 20, hWndDlg, NULL, hInst, NULL);

您只需添加BS_CHECKBOXBS_RADIOBUTTON 样式。 见:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb775951%28v=vs.85%29.aspx 获取可用样式的完整列表。

【讨论】:

哦.. 这似乎比我教的要容易。谢谢!你有什么关于数字步进的吗? (右侧有两个按钮的小文本框:向上和向下) 抱歉,我还没有找到任何相关信息。我认为您必须使用编辑控件和 2 个按钮自己构建它。

以上是关于如何在 c & mingw 中创建复选框的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C#.Net 中创建原型方法(如 JavaScript)?

我将如何在 c 中创建一个输出流,如 stdout?

如何在 Android 中创建广播流

如何以编程方式在 Silverlight 中创建一个没有框(只是复选)的复选框?

选中一个复选框时,如何在 ACF 中创建的另一个块中隐藏其他复选框?

如何在 Django 中创建多选框?