#include #include #include #include #include #include "ids.h" // // FUNCTION: PackWiz_SelectFileDlgProc(HWND,UINT,WPARAM,LPARAM) // // PURPOSE: Dialog procedure for FIRST page of Create New Package Wizard // // INT_PTR CALLBACK PackWiz_SelectFileDlgProc(HWND hDlg, UINT uMsg , WPARAM wParam, LPARAM lParam) { LPPACKAGER_INFO lppi = (LPPACKAGER_INFO)GetWindowLongPtr(hDlg, DWLP_USER); switch (uMsg) { case WM_INITDIALOG: lppi = (LPPACKAGER_INFO)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)lppi); Edit_LimitText(GetDlgItem(hDlg, IDC_COMMAND), ARRAYSIZE(lppi->szFilename) - 1); if (*lppi->szFilename) SetDlgItemText(hDlg, IDC_COMMAND, lppi->szFilename); break; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDHELP: break; case IDC_COMMAND: // Check to see if we have a change in the edit control switch (GET_WM_COMMAND_CMD(wParam, lParam)) { case EN_CHANGE: if (GetWindowTextLength(GetDlgItem(hDlg, IDC_COMMAND)) > 0) PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT); else PropSheet_SetWizButtons(GetParent(hDlg), 0); break; } break; case IDC_BROWSE: { TCHAR szExt[80]; TCHAR szFilter[80]; TCHAR szTitle[80]; TCHAR szFilename[MAX_PATH]; int ret; LPTSTR lpsz = szFilter; // load the filter and then replace all the @ characters // with NULL. The end of the string will be doubly // null-terminated LoadString(g_hinst, IDS_BROWSEFILTER, szFilter, ARRAYSIZE(szFilter)-1); while (*lpsz) { if (*lpsz == TEXT('@')) { *lpsz = 0; lpsz++; } else { lpsz = CharNext(lpsz); } } *(lpsz+1) = 0; LoadString(g_hinst, IDS_BROWSEEXT, szExt, ARRAYSIZE(szExt)); LoadString(g_hinst, IDS_BROWSETITLE, szTitle, ARRAYSIZE(szTitle)); GetDlgItemText(hDlg, IDC_COMMAND, lppi->szFilename, ARRAYSIZE(lppi->szFilename)); // Danger - this is a TCHAR API! ret = GetFileNameFromBrowse(hDlg,szFilename, ARRAYSIZE(lppi->szFilename), NULL, szExt, szFilter, szTitle); if (ret > 0) { lstrcpy(lppi->szFilename, szFilename); } SetDlgItemText(hDlg, IDC_COMMAND, lppi->szFilename); break; } } break; case WM_NOTIFY: switch (((NMHDR *)lParam)->code) { case PSN_KILLACTIVE: SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); return TRUE; case PSN_RESET: // reset to original values *lppi->szFilename = TEXT('\0'); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); break; case PSN_SETACTIVE: Edit_SetText(GetDlgItem(hDlg, IDC_COMMAND), lppi->szFilename); if (GetWindowTextLength(GetDlgItem(hDlg, IDC_COMMAND)) > 0) PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_NEXT); else PropSheet_SetWizButtons(GetParent(hDlg), 0); break; case PSN_WIZNEXT: GetDlgItemText(hDlg, IDC_COMMAND, lppi->szFilename, ARRAYSIZE(lppi->szFilename)); break; case PSN_QUERYCANCEL: *lppi->szFilename = TEXT('\0'); return FALSE; default: return FALSE; } break; case WM_DESTROY: case WM_HELP: case WM_CONTEXTMENU: break; default: return FALSE; } // end of switch on uMsg return TRUE; } // // FUNCTION: PackWiz_SelectIconDlgProc(HWNDd, UINT, WPARAM, LPARAM) // // PURPOSE: Dialog procedure for SECOND page of Create New Package Wizard // // INT_PTR CALLBACK PackWiz_SelectIconDlgProc(HWND hDlg, UINT uMsg , WPARAM wParam, LPARAM lParam) { LPPACKAGER_INFO lppi = (LPPACKAGER_INFO)GetWindowLongPtr(hDlg, DWLP_USER); switch (uMsg) { case WM_INITDIALOG: lppi = (LPPACKAGER_INFO)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)lppi); *lppi->szIconPath = TEXT('\0'); lppi->iIcon = 0; break; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDHELP: break; case IDC_CHANGEICON: if (S_OK == PickIconDlg(hDlg, lppi->szIconPath, ARRAYSIZE(lppi->szIconPath), &(lppi->iIcon))) { HICON hicon = ExtractAssociatedIcon(g_hinst, lppi->szIconPath, (LPWORD)&(lppi->iIcon)); if (hicon) { HWND hPackIcon = GetDlgItem(hDlg, IDC_PACKICON); SendMessage(hPackIcon, STM_SETICON, (WPARAM)hicon, (LPARAM)0); } } break; } break; case WM_NOTIFY: switch (((NMHDR *)lParam)->code) { case PSN_KILLACTIVE: SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); return TRUE; case PSN_RESET: // reset to original values *lppi->szIconPath = TEXT('\0'); lppi->iIcon = 0; SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); break; case PSN_SETACTIVE: { HICON hicon = NULL; if (PathFileExists(lppi->szFilename)) hicon = ExtractAssociatedIcon(g_hinst, *lppi->szIconPath? lppi->szIconPath : lppi->szFilename, (LPWORD)&(lppi->iIcon)); if (!hicon) hicon = LoadIcon(g_hinst,MAKEINTRESOURCE(IDI_PACKAGER)); HWND hPackIcon = GetDlgItem(hDlg, IDC_PACKICON); SendMessage(hPackIcon, STM_SETICON, (WPARAM)hicon, (LPARAM)0); PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK|PSWIZB_NEXT); } break; case PSN_WIZBACK: break; case PSN_WIZNEXT: break; case PSN_QUERYCANCEL: *lppi->szFilename = TEXT('\0'); return FALSE; break; default: return FALSE; } break; case WM_DESTROY: case WM_HELP: case WM_CONTEXTMENU: break; default: return FALSE; } // end of switch on uMsg return TRUE; } // // FUNCTION: PackWiz_SelectLabelDlgProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Dialog procedure for THIRD page of Create New Package Wizard // // INT_PTR CALLBACK PackWiz_SelectLabelDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { LPPACKAGER_INFO lppi = (LPPACKAGER_INFO)GetWindowLongPtr(hDlg, DWLP_USER); switch (uMsg) { case WM_INITDIALOG: lppi = (LPPACKAGER_INFO)((LPPROPSHEETPAGE)lParam)->lParam; SetWindowLongPtr(hDlg, DWLP_USER, (LONG_PTR)lppi); Edit_LimitText(GetDlgItem(hDlg, IDC_COMMAND), ARRAYSIZE(lppi->szLabel) - 1); GetDisplayName(lppi->szLabel,lppi->szFilename); break; case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDHELP: break; case IDC_COMMAND: // Check to see if we have a change in the edit control switch (GET_WM_COMMAND_CMD(wParam, lParam)) { case EN_CHANGE: if (GetWindowTextLength(GetDlgItem(hDlg, IDC_COMMAND)) > 0) PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK|PSWIZB_FINISH); else PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK); break; } break; } break; case WM_NOTIFY: switch (((NMHDR *)lParam)->code) { case PSN_KILLACTIVE: SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); return TRUE; case PSN_RESET: // reset to original values *lppi->szLabel = TEXT('\0'); SetWindowLongPtr(hDlg, DWLP_MSGRESULT, FALSE); break; case PSN_SETACTIVE: Edit_SetText(GetDlgItem(hDlg, IDC_COMMAND), lppi->szLabel); if (GetWindowTextLength(GetDlgItem(hDlg, IDC_COMMAND)) > 0) PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK|PSWIZB_FINISH); else PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK); break; case PSN_WIZBACK: GetDlgItemText(hDlg, IDC_COMMAND, lppi->szLabel, ARRAYSIZE(lppi->szLabel)); break; case PSN_WIZFINISH: GetDlgItemText(hDlg, IDC_COMMAND, lppi->szLabel, ARRAYSIZE(lppi->szLabel)); break; case PSN_QUERYCANCEL: *lppi->szFilename = TEXT('\0'); return FALSE; default: return FALSE; } break; case WM_DESTROY: case WM_HELP: case WM_CONTEXTMENU: break; default: return FALSE; } // end of switch on uMsg return TRUE; } // // FUNCTION: PackWiz_EditPackageDlgProc(HWND,UINT,WPARAM,LPARAM) // // PURPOSE: Dialog procedure for Edit Package // // NOTE: We have two different types of packages we could edit, but they // both have exactly the same dialog layout, except for some static text, which // doesn't affect the dialog procedure // // INT_PTR CALLBACK PackWiz_EditPackageDlgProc(HWND hDlg, UINT uMsg , WPARAM wParam, LPARAM lParam) { LPPACKAGER_INFO lppi = (LPPACKAGER_INFO)GetWindowLongPtr(hDlg, DWLP_USER); switch (uMsg) { case WM_INITDIALOG: { HICON hicon; lppi = (LPPACKAGER_INFO)lParam; SetWindowLongPtr(hDlg, DWLP_USER, lParam); Edit_LimitText(GetDlgItem(hDlg, IDC_EDIT1), ARRAYSIZE(lppi->szFilename) - 1); Edit_LimitText(GetDlgItem(hDlg, IDC_EDIT2), ARRAYSIZE(lppi->szLabel) - 1); SetDlgItemText(hDlg, IDC_EDIT1, lppi->szFilename); SetDlgItemText(hDlg, IDC_EDIT2, lppi->szLabel); if (*lppi->szIconPath != TEXT('\0')) hicon = ExtractAssociatedIcon(g_hinst, lppi->szIconPath, (LPWORD)&(lppi->iIcon)); else hicon = LoadIcon(g_hinst,MAKEINTRESOURCE(IDI_PACKAGER)); HWND hPackIcon = GetDlgItem(hDlg, IDC_PACKICON); SendMessage(hPackIcon, STM_SETICON, (WPARAM)hicon, (LPARAM)0); break; } case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDHELP: break; case IDOK: GetDlgItemText(hDlg, IDC_EDIT1, lppi->szFilename, ARRAYSIZE(lppi->szFilename)); GetDlgItemText(hDlg, IDC_EDIT2, lppi->szLabel, ARRAYSIZE(lppi->szLabel)); EndDialog(hDlg, 1); break; case IDCANCEL: EndDialog(hDlg, -1); break; case IDC_CHANGEICON: { PickIconDlg(hDlg, lppi->szIconPath, ARRAYSIZE(lppi->szIconPath), &(lppi->iIcon)); HICON hicon = ExtractAssociatedIcon(g_hinst, lppi->szIconPath, (LPWORD)&(lppi->iIcon)); if (hicon) { HWND hPackIcon = GetDlgItem(hDlg, IDC_PACKICON); SendMessage(hPackIcon, STM_SETICON, (WPARAM)hicon, (LPARAM)0); } } break; case IDC_BROWSE: { TCHAR szExt[80]; TCHAR szFilter[80]; TCHAR szTitle[80]; LPTSTR lpsz = szFilter; // load the filter and then replace all the @ characters // with NULL. The end of the string will be doubly // null-terminated LoadString(g_hinst, IDS_BROWSEFILTER, szFilter, ARRAYSIZE(szFilter)-1); while (*lpsz) { if (*lpsz == TEXT('@')) { *lpsz = 0; lpsz++; } else { lpsz = CharNext(lpsz); } } *(lpsz+1) = 0; LoadString(g_hinst, IDS_BROWSEEXT, szExt, ARRAYSIZE(szExt)); LoadString(g_hinst, IDS_BROWSETITLE, szTitle, ARRAYSIZE(szTitle)); GetDlgItemText(hDlg, IDC_EDIT1, lppi->szFilename, ARRAYSIZE(lppi->szFilename)); GetFileNameFromBrowse(hDlg,lppi->szFilename, ARRAYSIZE(lppi->szFilename), NULL, szExt, szFilter, szTitle); SetDlgItemText(hDlg, IDC_EDIT1, lppi->szFilename); } break; } break; case WM_DESTROY: case WM_HELP: case WM_CONTEXTMENU: break; default: return FALSE; } // end of switch on uMsg return TRUE; } // // // FUNCTION: PackWiz_FillInPropertyPage(PROPSHEETPAGE *, int, LPFN) // // PURPOSE: Fills in the given PROPSHEETPAGE structure // // COMMENTS: // // This function fills in a PROPSHEETPAGE structure with the // information the system needs to create the page. // void PackWiz_FillInPropertyPage(PROPSHEETPAGE* psp, int idDlg, DLGPROC pfnDlgProc, LPPACKAGER_INFO lppi) { psp->dwSize = sizeof(PROPSHEETPAGE); psp->dwFlags = 0; psp->hInstance = g_hinst; psp->pszTemplate = MAKEINTRESOURCE(idDlg); psp->pszIcon = NULL; psp->pfnDlgProc = pfnDlgProc; psp->pszTitle = NULL; psp->lParam = (LPARAM)lppi; } // // // FUNCTION: PackWiz_CreateWizard(HWND) // // PURPOSE: Create the Wizard control. // // COMMENTS: // // This function creates the wizard property sheet. // int PackWiz_CreateWizard(HWND hwndOwner, LPPACKAGER_INFO lppi) { PROPSHEETPAGE psp[PACKWIZ_NUM_PAGES]; PROPSHEETHEADER psh; PackWiz_FillInPropertyPage(&psp[0], IDD_SELECTFILE, PackWiz_SelectFileDlgProc,lppi); PackWiz_FillInPropertyPage(&psp[1], IDD_SELECTICON, PackWiz_SelectIconDlgProc,lppi); PackWiz_FillInPropertyPage(&psp[2], IDD_SELECTLABEL, PackWiz_SelectLabelDlgProc,lppi); psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_PROPSHEETPAGE | PSH_WIZARD; psh.hwndParent = hwndOwner; psh.nPages = ARRAYSIZE(psp); psh.nStartPage = 0; psh.pszIcon = NULL; psh.ppsp = (LPCPROPSHEETPAGE) &psp; return (int)(PropertySheet(&psh)); } // // FUNCTION: PackWiz_EditPackage(HWND, WORD, LPPACKAGER_INFO) // // PURPOSE: To Run the Edit Package Dialog Procedure // // int PackWiz_EditPackage(HWND hwnd, int idDlg, LPPACKAGER_INFO lppi) { return (int)DialogBoxParam(g_hinst, MAKEINTRESOURCE(idDlg), hwnd, PackWiz_EditPackageDlgProc, (LPARAM)lppi); }