如何在 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_CHECKBOX
或BS_RADIOBUTTON
样式。
见:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb775951%28v=vs.85%29.aspx 获取可用样式的完整列表。
【讨论】:
哦.. 这似乎比我教的要容易。谢谢!你有什么关于数字步进的吗? (右侧有两个按钮的小文本框:向上和向下) 抱歉,我还没有找到任何相关信息。我认为您必须使用编辑控件和 2 个按钮自己构建它。以上是关于如何在 c & mingw 中创建复选框的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C#.Net 中创建原型方法(如 JavaScript)?
如何以编程方式在 Silverlight 中创建一个没有框(只是复选)的复选框?