+void wgt_checkbox_check(struct wgt_widget *w)
+{
+ SendMessage(w->handle, BM_SETCHECK, BST_CHECKED, 0);
+}
+
+void wgt_checkbox_uncheck(struct wgt_widget *w)
+{
+ SendMessage(w->handle, BM_SETCHECK, BST_UNCHECKED, 0);
+}
+
+int wgt_checkbox_checked(struct wgt_widget *w)
+{
+ return SendMessage(w->handle, BM_GETCHECK, 0, 0) == BST_CHECKED;
+}
+
+int wgt_combo_setitems(struct wgt_widget *w, const char **items, int num_items)
+{
+ int i;
+ char **newit;
+ struct wgt_rect size;
+
+ if(!(newit = malloc(num_items * sizeof *newit))) {
+ fprintf(stderr, "wgt_combo_setitems: failed to allocate item list\n");
+ return -1;
+ }
+ for(i=0; i<num_items; i++) {
+ if(!(newit[i] = strdup(items[i]))) {
+ fprintf(stderr, "wgt_combo_setitems: failed to allocate item\n");
+ while(--i >= 0) {
+ free(newit[i]);
+ }
+ free(newit);
+ return -1;
+ }
+ }
+
+ for(i=0; i<w->num_items; i++) {
+ free(w->itemlist[i]);
+ }
+ free(w->itemlist);
+ SendMessage(w->handle, CB_RESETCONTENT, 0, 0);
+
+ w->itemlist = newit;
+ w->num_items = num_items;
+
+ for(i=0; i<num_items; i++) {
+ SendMessage(w->handle, CB_ADDSTRING, 0, (long)w->itemlist[i]);
+ }
+
+ combosize(w->win, items, num_items, w->rect.width, WGT_AUTO, &size);
+ MoveWindow(w->handle, w->rect.x, w->rect.y, w->rect.width, size.height, TRUE);
+ return 0;
+}
+