static void lstResetListBoxContent(PLISTBOXDATA pData) { int i; PLISTBOXITEM plbi, next; pData->itemCount = 0; pData->itemTop = 0; pData->itemHilighted = 0; #if 0 pData->itemVisibles = 0; #endif plbi = pData->head; while (plbi) { FreeFixStr(plbi->key); next = plbi->next; if (plbi < pData->buffStart || plbi > pData->buffEnd) free(plbi); plbi = next; } pData->head = NULL; pData->freeList = pData->buffStart; plbi = pData->freeList; for (i = 0; i < pData->buffLen - 1; i++) { plbi->next = plbi + 1; plbi++; } plbi->next = NULL; }
/* create a new page */ static BOOL create_page (HWND hwnd, DWORD style, PPROPSHEETDATA propsheet, PROPPAGE *page, PDLGTEMPLATE dlgtpl, WNDPROC proc) { int i, len; PCTRLDATA ctrl; HWND hCtrl; RECT rcPage; if ((dlgtpl->controlnr > 0) && !dlgtpl->controls) return FALSE; GetClientRect (hwnd, &rcPage); /* create content page */ if ((style & 0xf0L) == PSS_BOTTOM) { page->hwnd = CreateWindowEx (CTRL_STATIC, "", SS_LEFT, WS_EX_NONE, IDC_STATIC, 2, 2, rcPage.right - 4, rcPage.bottom - 4, hwnd, dlgtpl->dwAddData); } else { page->hwnd = CreateWindowEx (CTRL_STATIC, "", SS_LEFT, WS_EX_NONE, IDC_STATIC, 2, propsheet->head_rc.bottom + 2, rcPage.right - 4, rcPage.bottom - 4 - propsheet->head_rc.bottom, hwnd, dlgtpl->dwAddData); } if (page->hwnd == HWND_INVALID) return FALSE; len = strlen (dlgtpl->caption); page->title = FixStrAlloc (len); if (page->title) strcpy (page->title, dlgtpl->caption); page->proc = proc; page->icon = dlgtpl->hIcon; for (i = 0; i < dlgtpl->controlnr; i++) { ctrl = dlgtpl->controls + i; hCtrl = CreateWindowEx (ctrl->class_name, ctrl->caption, ctrl->dwStyle | WS_CHILD, ctrl->dwExStyle, ctrl->id, ctrl->x, ctrl->y, ctrl->w, ctrl->h, page->hwnd, ctrl->dwAddData); if (hCtrl == HWND_INVALID) { DestroyWindow (page->hwnd); if (page->title) { FreeFixStr (page->title); } return FALSE; } } SetWindowCallbackProc (page->hwnd, page->proc); SendMessage (page->hwnd, MSG_INITPAGE, 0, dlgtpl->dwAddData); return TRUE; }
static int set_page_title (PROPPAGE * page, char *ptr) { int len = 0; if (page->title) { FreeFixStr (page->title); } if (ptr) { len = strlen (ptr); if (!(page->title = FixStrAlloc (len))) { return PS_ERR; } strcpy (page->title, ptr); } else { page->title = NULL; } return PS_OKAY; }
/* change page title */ static int set_page_title_normal_style (HDC hdc, PPROPSHEETDATA propsheet, PROPPAGE *page, char *title) { int len = 0; if (page->title) { FreeFixStr (page->title); } if (title) { len = strlen (title); if (!(page->title = FixStrAlloc (len))) { return PS_ERR; } strcpy (page->title, title); page->width = tab_required_width (hdc, propsheet, page); update_propsheet (propsheet); } else { page->title = NULL; } return PS_OKAY; }
static void lstListBoxCleanUp(LISTBOXDATA * pData) { PLISTBOXITEM plbi; PLISTBOXITEM next; plbi = pData->head; while (plbi) { FreeFixStr(plbi->key); next = plbi->next; if (plbi < pData->buffStart || plbi > pData->buffEnd) free(plbi); plbi = next; } if (pData->pTabStops) { free(pData->pTabStops); pData->pTabStops = NULL; } free(pData->buffStart); }
/* create a new page */ static BOOL create_page (HWND hwnd, DWORD style, PPROPSHEETDATA propsheet, PROPPAGE *page, PDLGTEMPLATE dlgtpl, WNDPROC proc) { int i, len, w, h; PCTRLDATA ctrl; HWND hCtrl; RECT rcPage; DWORD ex_style; if ((dlgtpl->controlnr > 0) && !dlgtpl->controls) return FALSE; if (GetWindowExStyle (hwnd) & WS_EX_TRANSPARENT) ex_style = WS_EX_TRANSPARENT | WS_EX_USEPARENTRDR; else ex_style = WS_EX_USEPARENTRDR; GetClientRect (hwnd, &rcPage); w = RECTW(rcPage) - OFFSET_VALUE*2; h = RECTH(rcPage) -RECTH(propsheet->head_rc) - OFFSET_VALUE*2; /* create content page */ if ((style & 0xf0L) == PSS_BOTTOM) { page->hwnd = CreateWindowEx (CTRL_STATIC, "", SS_LEFT, ex_style, IDC_STATIC, OFFSET_VALUE, OFFSET_VALUE, w, h, hwnd, dlgtpl->dwAddData); } else { page->hwnd = CreateWindowEx (CTRL_STATIC, "", SS_LEFT, ex_style, IDC_STATIC, OFFSET_VALUE, OFFSET_VALUE + propsheet->head_rc.bottom, w, h, hwnd, dlgtpl->dwAddData); } if (page->hwnd == HWND_INVALID) return FALSE; len = strlen (dlgtpl->caption); page->title = FixStrAlloc (len); if (page->title) strcpy (page->title, dlgtpl->caption); page->proc = proc; page->icon = dlgtpl->hIcon; for (i = 0; i < dlgtpl->controlnr; i++) { ctrl = dlgtpl->controls + i; hCtrl = CreateWindowEx (ctrl->class_name, ctrl->caption, ctrl->dwStyle | WS_CHILD, ctrl->dwExStyle, ctrl->id, ctrl->x, ctrl->y, ctrl->w, ctrl->h, page->hwnd, ctrl->dwAddData); if (hCtrl == HWND_INVALID) { DestroyWindow (page->hwnd); if (page->title) { FreeFixStr (page->title); } return FALSE; } } SetWindowCallbackProc (page->hwnd, page->proc); SendMessage (page->hwnd, MSG_INITPAGE, 0, dlgtpl->dwAddData); return TRUE; }
/* destroy a page */ static void destroy_page (PROPPAGE * page) { FreeFixStr (page->title); DestroyWindow (page->hwnd); }