/* SAVEDLG.C Resident Code Segment // Tweak: make non-resident? Routines for Save Theme As dialog Frosting: Master Theme Selector for Windows '95 Copyright (c) 1994-1999 Microsoft Corporation. All rights reserved. */ // --------------------------------------------- // Brief file history: // Alpha: // Beta: // Bug fixes // --------- // // --------------------------------------------- #include "windows.h" #include "frost.h" #include "global.h" // Local Routines BOOL ValidateFilename(LPTSTR); INT_PTR FAR PASCAL SaveAsDlgProc(hDlg, message, wParam, lParam) HWND hDlg; UINT message; WPARAM wParam; LPARAM lParam; { switch (message) { case WM_INITDIALOG: // set max length for new theme name SendDlgItemMessage(hDlg, EC_THEME, EM_LIMITTEXT, (WPARAM)(MAX_PATHLEN-5), (LPARAM)0); // suggest a name for the new saved theme if (LoadString(hInstApp, STR_SUGGEST, szMsg, MAX_STRLEN)) SetDlgItemText(hDlg, EC_THEME, (LPTSTR)szMsg); break; case WM_COMMAND: switch ((int)LOWORD(wParam)) { // watch as changes the edit control case EC_THEME: if (HIWORD(wParam) == EN_CHANGE) { // if changed, enable OK iff nonzero length filename EnableWindow(GetDlgItem(hDlg, IDOK), (BOOL) SendMessage((HWND)LOWORD(lParam), WM_GETTEXTLENGTH, (WPARAM)0, (LPARAM)0) ); } else return (FALSE); // didn't really process msg EXIT break; // OK to go ahead and save the current settings as a new theme case IDOK: { // local variable scope TCHAR szNewFile[MAX_PATHLEN+1]; // get new filename GetDlgItemText(hDlg, EC_THEME, (LPTSTR)szNewFile, MAX_PATHLEN-4); lstrcat((LPTSTR)szNewFile, (LPTSTR)szExt); // check whether they gave valid filename: chars + length if (!ValidateFilename((LPTSTR)szNewFile)) { // bad file: post message and put them back in save dlg /// *** DEBUG *** add messagebox here...................... break; // couldn't use name EXIT } // gather the current windows settings and save them to a THM file WaitCursor(); if (!GatherThemeToFile((LPTSTR)szNewFile)) { // out of disk space or some weird file or disk problem // *** DEBUG *** add messagebox here...................... // could be that most saved OK and just one or some a problem? NormalCursor(); break; // couldn't write to file somehow EXIT } NormalCursor(); // clean up and add new filename to list in drop-down listbox lstrcpy((LPTSTR)szMsg, (LPTSTR)szNewFile); TruncateExt((LPCTSTR)szMsg); if (CB_ERRSPACE != (int) SendDlgItemMessage(hWndApp, DDL_THEME, CB_INSERTSTRING, (WPARAM) -1, /* end of list */ (LPARAM)(LPCTSTR)szMsg) ) { // get new theme count; ask rather than increment -- for failsafe iThemeCount = (int) SendDlgItemMessage(hWndApp, DDL_THEME, CB_GETCOUNT, (WPARAM)0, (LPARAM)0); // select item just added and save index of selection iCurTheme = iThemeCount-1; SendDlgItemMessage(hWndApp, DDL_THEME, CB_SETCURSEL, (WPARAM)iCurTheme, (LPARAM)0); // update cur Theme file name to your new one lstrcpy((LPTSTR)szCurThemeFile, (LPTSTR)szThemeDir); lstrcat((LPTSTR)szCurThemeFile, (LPTSTR)szNewFile); // update checkboxes EnableThemeButtons(); } // else not enuf mem to add new name to DDL; no biggie - already saved // (don't need to update preview, etc; was "cur settings" or prev same last) } // variable scope /* fall through */ case IDCANCEL: EndDialog(hDlg,(int)LOWORD(wParam)); break; default: return (FALSE); break; } break; default: return(FALSE); break; } return TRUE; } // // ValidateFilename // Check that this file and the current directory path together make // a valid filename. // Check for total length, legals chars, etc. // BOOL ValidateFilename(LPTSTR lpszFilename) { // first check for length if (lstrlen((LPTSTR)lpszFilename) + lstrlen((LPTSTR)szThemeDir) > MAX_PATHLEN) return (FALSE); // too long for Win95! EXIT // do ultimate test of name validity with openfile check // cleanup return (TRUE); }