⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 winsetup.cpp

📁 GSview 4.6 PostScript previewer。Ghostscript在MS-Windows, OS/2 and Unix下的图形化接口
💻 CPP
📖 第 1 页 / 共 4 页
字号:

#ifdef __BORLANDC__
#pragma argsused
#endif
/* language dialog box */
BOOL CALLBACK _export
LanguageDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message) {
	case WM_INITDIALOG:
	    centre_dialog(hDlg);
	    ShowWindow(hDlg, SW_SHOWNORMAL);
            return( TRUE);
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
		case IDOK:
                case IDCANCEL:
                    EndDialog(hDlg, 0);
                    return(TRUE);
                case IDM_LANGEN:
                case IDM_LANGCT:
                case IDM_LANGDE:
                case IDM_LANGES:
                case IDM_LANGFR:
                case IDM_LANGGR:
                case IDM_LANGIT:
                case IDM_LANGNL:
                case IDM_LANGRU:
                case IDM_LANGSE:
                case IDM_LANGSK:
                    EndDialog(hDlg, LOWORD(wParam));
                    return(TRUE);
                default:
                    return(FALSE);
            }
    }
    return(FALSE);
}

/* prompt to change language if Windows language doesn't match */
/* GSview language */
void 
check_language(void)
{
char winlang[MAXSTR];
int language;
    GetProfileString("Intl", "sLanguage", "ENG", winlang, sizeof(winlang));
    /* if Window language isn't English */
    if ( strnicmp(winlang, "EN", 2)
#ifdef BETA
      || TRUE
#endif
	)
    {
	language = DialogBoxParam(g_hLanguage, MAKEINTRESOURCE(IDD_LANG), HWND_DESKTOP, LanguageDlgProc, (LPARAM)NULL);
	switch (language) {
	    case IDM_LANGEN:
	    case IDM_LANGCT:
	    case IDM_LANGDE:
	    case IDM_LANGES:
	    case IDM_LANGFR:
	    case IDM_LANGGR:
	    case IDM_LANGIT:
	    case IDM_LANGNL:
	    case IDM_LANGRU:
	    case IDM_LANGSE:
	    case IDM_LANGSK:
		load_language(language);
	}
    }
}


#ifdef __BORLANDC__
#pragma argsused	/* ignore warning for next function */
#endif
/* input string dialog box */
BOOL CALLBACK _export
InputDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message) {
        case WM_INITDIALOG:
	    SetDlgItemText(hDlg, ID_ANSWER, get_string_answer);
            return( TRUE);
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
		case IDOK:
		    GetDlgItemText(hDlg, ID_ANSWER, get_string_answer, sizeof(get_string_answer));
                    EndDialog(hDlg, IDOK);
                    return(TRUE);
                case IDCANCEL:
                    EndDialog(hDlg, IDCANCEL);
                    return(TRUE);
                default:
                    return(FALSE);
            }
    }
    return(FALSE);
}

#ifdef __BORLANDC__
#pragma argsused	/* ignore warning for next function */
#endif
/* Modeless Dialog Box */
BOOL CALLBACK _export
MainDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static BOOL initialised;
    switch(message) {
        case WM_INITDIALOG:
	    /* create child dialog windows */
	    if (!initialised) {
		WIZPAGE *page;
		initialised=TRUE;
		for (page=pages; page->id; page++) {
		    page->hwnd = CreateDialogParam(g_hLanguage, MAKEINTRESOURCE(page->id), hDlg, ModelessDlgProc, (LPARAM)NULL);
		    ShowWindow(page->hwnd, SW_HIDE);
		}
		ShowWindow(pages[0].hwnd, SW_SHOW);
		SetFocus(GetDlgItem(pages[0].hwnd, IDNEXT));
		SendDlgItemMessage(pages[0].hwnd, IDNEXT, BM_SETSTYLE, 
		    (WPARAM)BS_DEFPUSHBUTTON, TRUE);
		hwnd_current = pages[0].hwnd;
	    }
            return FALSE;	/* we decide the focus */
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
                case IDCANCEL:
                case IDOK:
		    PostQuitMessage(0);
                    return(TRUE);
                default:
                    return(FALSE);
            }
	case WM_CLOSE:
	    PostQuitMessage(0);
	    return TRUE;
    }
    return FALSE;
}


#ifdef __BORLANDC__
#pragma argsused	/* ignore warning for next function */
#endif
/* Modeless Dialog Box */
BOOL CALLBACK _export
ModelessDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message) {
        case WM_INITDIALOG:
            return( TRUE);
        case WM_COMMAND:
            switch(LOWORD(wParam)) {
		case IDOK:
                case IDNEXT:
		    next_page(hDlg);
                    return(TRUE);
                case IDPREV:
		    SendDlgItemMessage(hDlg, IDPREV, BM_SETSTYLE, 
		        (WPARAM)0, TRUE);	/* remove default style */
		    prev_page(hDlg);
                    return(TRUE);
		case IDFINISH:
		    installing = TRUE;
		    if (!install_all() || g_bQuit) {
			WIZPAGE *page;
			/* FAILED */
		        page = find_page_from_id(IDD_TEXTWIN);
			page->next = IDD_FAILED;	/* KLUDGE */
			EnableWindow(GetDlgItem(page->hwnd, IDNEXT), TRUE);
			SetDlgItemText(find_page_from_id(IDD_FAILED)->hwnd,
			   IDD_FAILED_REASON, error_message); 
			gs_addmess(error_message);
			gs_addmess_update();
		    }
		    else {
			WIZPAGE *page;
		        page = find_page_from_id(IDD_TEXTWIN);
			page->next = IDD_DONE;	/* KLUDGE */
			EnableWindow(GetDlgItem(page->hwnd, IDNEXT), TRUE);
			gs_addmess_update();
		    }
		    if (autoexec_bak[0] != '\0') {
			char buf1[MAXSTR], buf2[MAXSTR];
			load_string(IDS_DONEBAK, buf1, sizeof(buf2));
			sprintf(buf2, buf1, autoexec_bak);
			SetDlgItemText(find_page_from_id(IDD_DONE)->hwnd,
			   IDD_DONE_BAK, buf2); 
		    }
		    installing = FALSE;
		    PostMessage(find_page_from_id(IDD_TEXTWIN)->hwnd,
			WM_COMMAND, (WPARAM)IDNEXT, (LPARAM)0);
                    return(TRUE);
                case IDCANCEL:
		    g_bQuit = TRUE;
		    if (installing)
		        gs_addmess("\ncancelling\n");
		    else 
		         PostMessage(GetParent(hDlg), WM_COMMAND, 
				(WPARAM)IDCANCEL, (LPARAM)0);
                    return(TRUE);
		case IDC_CREATEFOLDER:
		    if (HIWORD(wParam) == BN_CLICKED) {
			BOOL bFolder;
			bFolder = SendDlgItemMessage(hDlg, IDC_CREATEFOLDER, 
			    BM_GETCHECK, 0, 0) == BST_CHECKED;
			EnableWindow(GetDlgItem(hDlg, IDM_PROGMAN2), bFolder);
			EnableWindow(GetDlgItem(hDlg, IDC_ALLUSERS), bFolder);
			EnableWindow(GetDlgItem(hDlg, IDC_BROWSE_GROUP), bFolder);
		    }
                    return(TRUE);
		case IDC_VIEWREADME:
		    {
		    char szReadmeName[MAXSTR];
		    strcpy(szReadmeName, g_szSourceDir);
		    strcat(szReadmeName, "\\gsview\\Readme.htm");
		    ShellExecute(hDlg, NULL, szReadmeName, 
			NULL, NULL, SW_SHOWNORMAL);
		    }
                    return(TRUE);
		case IDC_VIEWHELP:
		    {
		    char szHelpName[MAXSTR];
		    strcpy(szHelpName, g_szSourceDir);
		    strcat(szHelpName, "\\gsview\\");
		    load_string(IDS_HELPFILE, szHelpName+strlen(szHelpName),
			sizeof(szHelpName) - strlen(szHelpName) - 1);
		    WinHelp(hDlg,szHelpName,HELP_CONTENTS,(DWORD)NULL);
		    }
                    return(TRUE);
		case IDC_BROWSE_DIR:
		    { char dir[MAXSTR];
		    char *p;
		    GetDlgItemText(find_page_from_id(IDD_DIR)->hwnd, 
			ID_ANSWER, dir, sizeof(dir));
		    strcpy(szDirName, dir);
		    if ( (p = strrchr(szDirName, '\\')) != (char *)NULL ) {
			    strcpy(szFolderName, p+1);
			    if (p == szDirName+2)
				    p++;	// step over c:\   //
			    *p = '\0';
		    }
		    else {
			    strcpy(szDirName, "c:\\");
			    strcpy(szFolderName, dir);
		    }
		    if (DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DIRDLG), 
			    hDlg, DirDlgProc)) {
			    strcpy(dir, szDirName);
			    if (strlen(dir) && (dir[strlen(dir)-1] != '\\'))
				    strcat(dir, "\\");
			    strcat(dir, szFolderName);
			    SetDlgItemText(find_page_from_id(IDD_DIR)->hwnd, 
				ID_ANSWER, dir);
		    }
		    }
		    return(TRUE);
		case IDC_BROWSE_GROUP:
		    { char dir[MAXSTR];
		    char programs[MAXSTR];
		    char *p;
		    GetDlgItemText(find_page_from_id(IDD_FINISH)->hwnd, 
			IDM_PROGMAN2, dir, sizeof(dir));
		    cinst.GetPrograms(
			    SendDlgItemMessage(hDlg, IDC_ALLUSERS,
			    BM_GETCHECK, 0, 0) == BST_CHECKED,
			    programs, sizeof(programs));
		    strcpy(szDirName, programs);
		    strcpy(szFolderName, dir);
		    if (DialogBox(g_hInstance, MAKEINTRESOURCE(IDD_DIRDLG), 
			    hDlg, DirDlgProc)) {
			    strcpy(dir, szFolderName);
			    p = szDirName;
			    if (strnicmp(szDirName, programs, 
				    strlen(programs)) == 0) {
				    p += strlen(programs);
				    if (*p == '\\')
					    p++;
				    strcpy(dir, p);
				    if (strlen(dir) && 
					    (dir[strlen(dir)-1] != '\\'))
					    strcat(dir, "\\");
				    strcat(dir, szFolderName);
			    }
			    SetDlgItemText(find_page_from_id(IDD_FINISH)->hwnd,
				IDM_PROGMAN2, dir);
		    }
		    }
		    return TRUE;
		case TEXTWIN_COPY:
		    {HGLOBAL hglobal;
		    LPSTR p;
		    DWORD result;
		    int start, end;
		    result = SendDlgItemMessage(hDlg, TEXTWIN_MLE, EM_GETSEL, (WPARAM)0, (LPARAM)0);
		    start = LOWORD(result);
		    end   = HIWORD(result);
		    if (start == end) {
			start = 0;
			end = twend;
		    }
		    hglobal = GlobalAlloc(GHND | GMEM_SHARE, end-start+1);
		    if (hglobal == (HGLOBAL)NULL) {
			MessageBeep(~0);
			return(FALSE);
		    }
		    p = (LPSTR)GlobalLock(hglobal);
		    if (p == (LPSTR)NULL) {
			MessageBeep(~0);
			return(FALSE);
		    }
		    lstrcpyn(p, twbuf+start, end-start);
		    GlobalUnlock(hglobal);
		    OpenClipboard(hDlg);
		    EmptyClipboard();
		    SetClipboardData(CF_TEXT, hglobal);
		    CloseClipboard();
		    }
                default:
                    return(FALSE);
            }
	case WM_CLOSE:
	    PostMessage(GetParent(hDlg), WM_COMMAND, (WPARAM)IDCANCEL, (LPARAM)0);
	    return TRUE;
    }
    return FALSE;
}

//////////////////////////////////////////////////////////////////////
// Create file list
//////////////////////////////////////////////////////////////////////

FILE *fList;

typedef int (*PFN_dodir)(const char *name);

/* Called once for each directory */
#ifdef __BORLANDC__
#pragma argsused
#endif
int
dodir(const char *filename)
{
    return 0;
}

/* Called once for each file */
int
dofile(const char *filename)
{
    if (fList != (FILE *)NULL) {
		fputs(filename, fList);
		fputs("\n", fList);
    }
	
    return 0;
}


/* Walk through directory 'path', calling dodir() for given directory
 * and dofile() for each file.
 * If recurse=1, recurse into subdirectories, calling dodir() for
 * each directory.
 */
int 
dirwalk(char *path, int recurse, PFN_dodir dodir, PFN_dodir dofile)
{    
	WIN32_FIND_DATA find_data;
	HANDLE find_handle;
	char pattern[MAXSTR];	/* orig pattern + modified pattern */
	char base[MAXSTR];
	char name[MAXSTR];
	BOOL bMore = TRUE;
	char *p;
	
	
	if (path) {
		strcpy(pattern, path);
		if (strlen(pattern) != 0)  {
			p = pattern + strlen(pattern) -1;
			if (*p == '\\')
				*p = '\0';		// truncate trailing backslash
		}
		
		strcpy(base, pattern);
		if (strchr(base, '*') != NULL) {
			// wildcard already included
			// truncate it from the base path
			if ( (p = strrchr(base, '\\')) != NULL )
				*(++p) = '\0';
		}
		else if (isalpha(pattern[0]) && 
			pattern[1]==':' && pattern[2]=='\0')  {
			strcat(pattern, "\\*");		// search entire disk
			strcat(base, "\\");
		}
		else {
			// wildcard NOT included
			// check to see if path is a directory
			find_handle = FindFirstFile(pattern, &find_data);
			if (find_handle != INVALID_HANDLE_VALUE) {
				FindClose(find_handle);
				if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
					strcat(pattern, "\\*");		// yes, search files 
					strcat(base, "\\");
				}
				else {
					dofile(path);				// no, return just this file
					return 0;
				}
			}
			else
				return 1;	// path invalid
		}
	}
	else {
		base[0] = '\0';
		strcpy(pattern, "*");
	}
	
	find_handle = FindFirstFile(pattern,  &find_data);
	if (find_handle == INVALID_HANDLE_VALUE)
		return 1;
	
	while (bMore) {
		strcpy(name, base);
		strcat(name, find_data.cFileName);
		if (find_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
			if ( strcmp(find_data.cFileName, ".") && 
				strcmp(find_data.cFileName, "..") ) {
				dodir(name);
				if (recurse)
					dirwalk(name, recurse, dodir, dofile);
			}
		}
		else {
			dofile(name);
		}
		bMore = FindNextFile(find_handle, &find_data);
	}
	FindClose(find_handle);
	
	return 0;
}



// This is used when creating a file list.

BOOL make_filelist(int argc, char *argv[])
{
    char *title = NULL;
    char *dir = NULL;
    char *list = NULL;
    int i;
    g_bBatch = TRUE;	// Don't run message loop
	
    for (i=1; i<argc; i++) {
		if (strcmp(argv[i], "-filelist") == 0) {
		    /* ignore */
		}
		if (strcmp(argv[i], "-title") == 0) {
			i++;
			title = argv[i];
		}
		else if (strcmp(argv[i], "-dir") == 0) {
			i++;
			dir = argv[i];
		}
		else if (strcmp(argv[i], "-list") == 0) {
			i++;
			list = argv[i];
		}
		else {
		    if ((title == NULL) || (strlen(title) == 0) ||
			(dir == NULL) || (strlen(dir) == 0) ||
			(list == NULL) || (strlen(list) == 0)) {
			message_box("Usage: setupgs -filelist -title \042AFPL Ghostscript #.##\042 -dir \042gs#.##\042 -list \042filelist.txt\042 spec1 spec2 specn\n");
			return FALSE;
		    }
		    if (fList == (FILE *)NULL) {
			    if ( (fList = fopen(list, "w")) == (FILE *)NULL ) {
					message_box("Can't write list file\n");
					return FALSE;
			    }
			    fputs(title, fList);
			    fputs("\n", fList);
			    fputs(dir, fList);
			    fputs("\n", fList);
		    }
		    if (argv[i][0] == '@') {
			// Use @filename with list of files/directories
			// to avoid DOS command line limit
			FILE *f;
			char buf[MAXSTR];
			int j;
			if ( (f = fopen(&(argv[i][1]), "r")) != (FILE *)NULL) {
			    while (fgets(buf, sizeof(buf), f)) {
				// remove trailing newline and spaces
				while ( ((j = strlen(buf)-1) >= 0) &&
				    ((buf[j] == '\n') || (buf[j] == ' ')) )
				    buf[j] = '\0';
			        dirwalk(buf, TRUE, dodir, dofile);
			    }
			    fclose(f);
			}
			else {
				wsprintf(buf, "Can't open @ file \042%s\042",
				    &argv[i][1]);
				message_box(buf);
			}
		    }
		    else
		        dirwalk(argv[i], TRUE, dodir, dofile);
		}
    }
	
    if (fList != (FILE *)NULL) {
        fclose(fList);
	fList = NULL;
    }
    return TRUE;
}

//////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -