/* ============================================================================= * manager_alloc * ============================================================================= */ manager_t* manager_alloc () { manager_t* managerPtr; managerPtr = (manager_t*)SEQ_MALLOC(sizeof(manager_t)); assert(managerPtr != NULL); managerPtr->carTablePtr = tableAlloc(); managerPtr->roomTablePtr = tableAlloc(); managerPtr->flightTablePtr = tableAlloc(); managerPtr->customerTablePtr = tableAlloc(); assert(managerPtr->carTablePtr != NULL); assert(managerPtr->roomTablePtr != NULL); assert(managerPtr->flightTablePtr != NULL); assert(managerPtr->customerTablePtr != NULL); return managerPtr; }
static LRESULT CALLBACK tableWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { struct table *t; LRESULT lResult; t = (struct table *) GetWindowLongPtrW(hwnd, GWLP_USERDATA); if (t == NULL) { // we have to do things this way because creating the header control will fail mysteriously if we create it first thing // (which is fine; we can get the parent hInstance this way too) // we use WM_CREATE because we have to use WM_DESTROY to destroy the header; we can't do it in WM_NCDESTROY because Windows will have destroyed it for us by then, and let's match message pairs to be safe if (uMsg == WM_CREATE) { CREATESTRUCTW *cs = (CREATESTRUCTW *) lParam; t = (struct table *) tableAlloc(sizeof (struct table), "error allocating internal Table data structure"); t->hwnd = hwnd; makeHeader(t, cs->hInstance); t->selectedRow = -1; t->selectedColumn = -1; initDummyTableStuff(t); SetWindowLongPtrW(hwnd, GWLP_USERDATA, (LONG_PTR) t); } // even if we did the above, fall through return DefWindowProcW(hwnd, uMsg, wParam, lParam); } if (uMsg == WM_DESTROY) { printf("destroy\n"); // TODO free appropriate (after figuring this part out) components of t // TODO send EVENT_OBJECT_DESTROY events to accessibility listeners (when appropriate); see the note on proxy objects as well destroyHeader(t); tableFree(t, "error allocating internal Table data structure"); return DefWindowProcW(hwnd, uMsg, wParam, lParam); } if (runHandlers(handlers, t, uMsg, wParam, lParam, &lResult)) return lResult; return DefWindowProcW(hwnd, uMsg, wParam, lParam); }