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

📄 gvwdlg.c

📁 GSview 4.6 PostScript previewer。Ghostscript在MS-Windows, OS/2 and Unix下的图形化接口
💻 C
📖 第 1 页 / 共 3 页
字号:
		for (ievent=0; ievent<NUMSOUND; ievent++) {
		    lstrcpy(dsound[ievent].file, sound[ievent].file);
		    load_string(sound[ievent].title, buf, sizeof(buf));
		    SendDlgItemMessageL(hDlg, SOUND_EVENT, LB_ADDSTRING, 0, 
			(LPARAM)((LPTSTR)buf));
		}
		ievent = 0;
		SendDlgItemMessage(hDlg, SOUND_EVENT, LB_SETCURSEL, ievent, 0L);
		/* force update of SOUND_FILE */
		SendDlgNotification(hDlg, SOUND_EVENT, LBN_SELCHANGE);
		return TRUE;
	    case WM_COMMAND:
		notify_message = GetNotification(wParam,lParam);
		switch (LOWORD(wParam)) {
		    case ID_HELP:
			get_help();
		        return(FALSE);
		    case SOUND_EVENT:
			if (notify_message != LBN_SELCHANGE) {
				return FALSE;
			}
			ievent = (int)SendDlgItemMessage(hDlg, SOUND_EVENT, LB_GETCURSEL, 0, 0L);
			if (ievent == LB_ERR) {
			    EnableWindow(GetDlgItem(hDlg, SOUND_TEST), FALSE);
			    return FALSE;
			}
			ifile = find_sound_name(dsound[ievent].file);
			if (ifile >= 0) {
			    lstrcpy(buf, get_sound_name(ifile));
			    szPath[0] = '\0';
			    EnableWindow(GetDlgItem(hDlg, SOUND_TEST), ifile!=0);
			}
			else {
			    /* must be WAVE file */
			    int i;
			    lstrcpy(szPath, dsound[ievent].file);
			    p = NULL;
			    for (i=lstrlen(szPath)-1; i >= 0; i--) {
				if (szPath[i] == '\\') {
				    p = szPath+i;
				    break;
				}
			    }
			    if (p != (TCHAR *)NULL) {
			        lstrcpy(buf,++p);
			        *p = '\0';
			    }
			    else {
			        lstrcpy(buf, szPath);
			    }
			    EnableWindow(GetDlgItem(hDlg, SOUND_TEST), TRUE);
			}
			lstrcat(szPath, szWaveFilter);
			DlgDirList(hDlg, szPath, SOUND_FILE, SOUND_PATH, DDL_DRIVES | DDL_DIRECTORY);
			add_sounds(hDlg);
			SendDlgItemMessage(hDlg, SOUND_FILE, LB_SELECTSTRING, file_start, (LPARAM)(LPTSTR)buf);
			return FALSE;
		    case SOUND_FILE:
			if (notify_message == LBN_SELCHANGE) {
			    ifile = (int)SendDlgItemMessage(hDlg, SOUND_FILE, LB_GETCURSEL, 0, 0L);
			    SendDlgItemMessage(hDlg, SOUND_FILE, LB_GETTEXT, ifile, (LPARAM)(LPSTR)buf);
			    ievent = (int)SendDlgItemMessage(hDlg, SOUND_EVENT, LB_GETCURSEL, 0, 0L);
			    if (ifile >= file_start) {
				if (buf[0] == '[') { /* selected a directory */
				    EnableWindow(GetDlgItem(hDlg, SOUND_TEST), FALSE);
			        }
				else { /* selected a WAVE file */
		                    int i = GetDlgItemText(hDlg, SOUND_PATH, dsound[ievent].file, MAXSTR);
			            if (dsound[ievent].file[i-1] != '\\')
			                dsound[ievent].file[i++] = '\\';
		                    DlgDirSelectEx(hDlg, dsound[ievent].file + i, sizeof(dsound[ievent].file), SOUND_FILE);
				    EnableWindow(GetDlgItem(hDlg, SOUND_TEST), TRUE);
				}
			    }
			    else {
				EnableWindow(GetDlgItem(hDlg, SOUND_TEST), ifile!=0);
				lstrcpy(dsound[ievent].file,get_sound_entry(ifile));
			    }
			}
			if (notify_message == LBN_DBLCLK) {
			    ifile = (int)SendDlgItemMessage(hDlg, SOUND_FILE, LB_GETCURSEL, 0, 0L);
			    SendDlgItemMessage(hDlg, SOUND_FILE, LB_GETTEXT, ifile, (LPARAM)(LPSTR)buf);
			    if (buf[0] == '[') {
		                DlgDirSelectEx(hDlg, szPath, sizeof(szPath), SOUND_FILE);
			        lstrcat(szPath, szWaveFilter);
		                DlgDirList(hDlg, szPath, SOUND_FILE, SOUND_PATH, DDL_DRIVES | DDL_DIRECTORY);
				add_sounds(hDlg);
			    }
			    else {
				SendDlgNotification(hDlg, SOUND_TEST, BN_CLICKED);
			    }
			}
			return FALSE;
		    case SOUND_TEST:
			ievent = (int)SendDlgItemMessage(hDlg, SOUND_EVENT, LB_GETCURSEL, 0, 0L);
			if (lstrlen(dsound[ievent].file)==0)
				return FALSE;
			if (lstrcmp(dsound[ievent].file, TEXT(BEEP))==0) {
				MessageBeep(-1);
				return FALSE;
			}
			if (lpfnSndPlaySound != (FPSPS)NULL) 
			    lpfnSndPlaySound(dsound[ievent].file, SND_SYNC);
			else
			    MessageBeep(-1);
			return FALSE;
		    case IDOK:
			for (ievent=0; ievent<NUMSOUND; ievent++)
			    lstrcpy(sound[ievent].file, dsound[ievent].file);
			free_sounds();
			EndDialog(hDlg, TRUE);
			return TRUE;
		    case IDCANCEL:
			free_sounds();
			EndDialog(hDlg, FALSE);
			return TRUE;
		}
		break;
	}
	return FALSE;
}

/* Return TRUE if a contiguous block of pages (>2) is found */
/* Store start and end of this range in first and last */
/* If not contiguous, store entire page range in first and last */
BOOL
contiguous_range(HWND hDlg, int *first, int *last)
{
int i;
BOOL gap = FALSE;	/* TRUE is gap found after block */
BOOL contiguous = TRUE;
int block = 0;		/* number of pages set in a contiguous block */
BOOL selected;
    for (i=0; i<(int)(psfile.dsc->page_count); i++) {
	selected = (int)SendDlgItemMessage(hDlg, PAGE_LIST, LB_GETSEL, i, 0L);
	if (selected && contiguous) {
	    if (gap)
		contiguous = FALSE;
	    else {
		if (block == 0)
		    *first = i;
		else
		    *last = i+1;
		block++;
	    }
	}
	else if (!selected && block)
	    gap = TRUE;
    }
    if (block < 2)
	contiguous = FALSE;
    if (!contiguous) {
	*first = 0;
	*last = psfile.dsc->page_count;
    }
    return contiguous;
}

#ifdef __BORLANDC__
#pragma argsused
#endif
BOOL CALLBACK _export
PageDlgProc(HWND hDlg, UINT wmsg, WPARAM wParam, LPARAM lParam)
{
	int i;
	WORD notify_message;
	static BOOL ecdisable;
	switch (wmsg) {
	    case WM_INITDIALOG:
		{TCHAR buf[MAXSTR];
		char cbuf[MAXSTR];
		for (i=0; i<(int)(psfile.dsc->page_count); i++) {
		    page_ordlabel(cbuf, i);
		    SendDlgItemMessageA(hDlg, PAGE_LIST, LB_ADDSTRING, 0, 
			(LPARAM)((LPSTR)cbuf));
		}
		SendDlgItemMessage(hDlg, PAGE_LIST, LB_SETCURSEL, 
		    psfile.page_list.current, 0L);
		SendDlgItemMessage(hDlg, PAGE_LIST, LB_GETTEXT, 
		    psfile.page_list.current, (LPARAM)buf);
		ecdisable = TRUE;
		SetDlgItemText(hDlg, PAGE_EDIT, buf);
		ecdisable = FALSE;
		}
		return TRUE;
	    case WM_COMMAND:
		notify_message = GetNotification(wParam,lParam);
		switch (LOWORD(wParam)) {
		    case PAGE_EDIT:
			if (!ecdisable && (notify_message == EN_CHANGE)) {
			    TCHAR buf[MAXSTR];
			    GetDlgItemText(hDlg, PAGE_EDIT, buf, 
				sizeof(buf)/sizeof(TCHAR));
			    if ((i = (int)SendDlgItemMessage(hDlg, PAGE_LIST, 
				    LB_FINDSTRING, -1, (LPARAM)buf))
				!= LB_ERR) {
				SendDlgItemMessage(hDlg, PAGE_LIST, 
				    LB_SETCURSEL, i, 0L);
			    }
			}
			return TRUE;
		    case PAGE_LIST:
			if (notify_message == LBN_DBLCLK)
				PostMessage(hDlg, WM_COMMAND, IDOK, 0L);
		        else if (notify_message == LBN_SELCHANGE) {
			    TCHAR buf[MAXSTR];
			    i = (int)SendDlgItemMessage(hDlg, PAGE_LIST, 
				LB_GETCURSEL, 0, 0L);
			    if (i != LB_ERR) {
				SendDlgItemMessage(hDlg, PAGE_LIST, LB_GETTEXT, 
				    i, (LPARAM)buf);
				/* Update edit field, but stop edit field from
			         * from altering list box selection */
				ecdisable = TRUE;
				SetDlgItemText(hDlg, PAGE_EDIT, buf);
				ecdisable = FALSE;
			    }
			}
			return FALSE;
		    case IDOK:
			i = (int)SendDlgItemMessage(hDlg, PAGE_LIST, 
				LB_GETCURSEL, 0, 0L);
			if (i == LB_ERR)
			    EndDialog(hDlg, FALSE);
			else {
			    psfile.page_list.current = i;
			    /* if available, also save in selection array */
			    if (psfile.page_list.select) {
			      for (i=0; i<(int)(psfile.dsc->page_count); i++) {
				  psfile.page_list.select[i] = FALSE;
			      }
			      psfile.page_list.select[psfile.page_list.current]
				 = TRUE;
			    }
			    EndDialog(hDlg, TRUE);
			}
			return TRUE;
		    case IDCANCEL:
			EndDialog(hDlg, FALSE);
			return TRUE;
		}
		break;
	}
	return FALSE;
}


#ifdef __BORLANDC__
#pragma argsused
#endif
BOOL CALLBACK _export
PageMultiDlgProc(HWND hDlg, UINT wmsg, WPARAM wParam, LPARAM lParam)
{
	int i;
	WORD notify_message;
	switch (wmsg) {
	    case WM_INITDIALOG:
		{
		char cbuf[MAXSTR];
		if (psfile.page_list.reverse)
		    SendDlgItemMessage(hDlg, PAGE_REVERSE, BM_SETCHECK, 1, 0);
		for (i=0; i<(int)(psfile.dsc->page_count); i++) {
		    page_ordlabel(cbuf, i);
		    SendDlgItemMessageA(hDlg, PAGE_LIST, LB_ADDSTRING, 0, 
			(LPARAM)((LPSTR)cbuf));
		}
		if (psfile.page_list.multiple) {
		    /* multiple selection list box */
		    for (i=0; i<(int)(psfile.dsc->page_count); i++)
			if (psfile.page_list.select[i]) 
			    SendDlgItemMessage(hDlg, PAGE_LIST, LB_SETSEL, TRUE, MAKELPARAM(i,0));
		    SendDlgItemMessage(hDlg, PAGE_LIST, LB_SETSEL, TRUE, MAKELPARAM(psfile.page_list.current, 0));
		}
		else {
		    /* single selection list box */
		    SendDlgItemMessage(hDlg, PAGE_LIST, LB_SETSEL, TRUE, MAKELPARAM(psfile.page_list.current, 0));
		    SendDlgItemMessage(hDlg, PAGE_LIST, LB_SETCURSEL, psfile.page_list.current, 0L);
		    EnableWindow(GetDlgItem(hDlg, PAGE_ALL), FALSE);
		    EnableWindow(GetDlgItem(hDlg, PAGE_ODD), FALSE);
		    EnableWindow(GetDlgItem(hDlg, PAGE_EVEN), FALSE);
		}
		}
		return TRUE;
	    case WM_COMMAND:
		notify_message = GetNotification(wParam,lParam);
		switch (LOWORD(wParam)) {
		    case PAGE_LIST:
			if (notify_message == LBN_DBLCLK)
				PostMessage(hDlg, WM_COMMAND, IDOK, 0L);
			return FALSE;
		    case PAGE_ALL:
			SendDlgItemMessage(hDlg, PAGE_LIST, LB_SELITEMRANGE, TRUE, 
				MAKELPARAM(0,psfile.dsc->page_count-1));
			return FALSE;
		    case PAGE_ODD:
			{
			int first, last;
			contiguous_range(hDlg, &first, &last);
			for (i=(int)SendDlgItemMessage(hDlg, PAGE_LIST, 
				LB_GETCOUNT, 0, 0L)-1; i>=0; i--)
			    if (i >= first && i < last)
			        SendDlgItemMessage(hDlg, PAGE_LIST, LB_SETSEL, 
				    !(i&1), MAKELPARAM(i,0));
			SendDlgItemMessage(hDlg, PAGE_LIST, LB_SETTOPINDEX, 
			    first, 0L);
			}
			return FALSE;
		    case PAGE_EVEN:
			{
			int first, last;
			contiguous_range(hDlg, &first, &last);
			for (i=(int)SendDlgItemMessage(hDlg, PAGE_LIST, 
				LB_GETCOUNT, 0, 0L)-1; i>=0; i--)
			    if (i >= first && i < last)
			        SendDlgItemMessage(hDlg, PAGE_LIST, LB_SETSEL, 
				    (i&1), MAKELPARAM(i,0));
			SendDlgItemMessage(hDlg, PAGE_LIST, LB_SETTOPINDEX, 
			    first, 0L);
			}
			return FALSE;
		    case IDOK:
			psfile.page_list.reverse = 
			    (int)SendDlgItemMessage(hDlg, PAGE_REVERSE, 
				BM_GETCHECK, 0, 0);
			i = (int)SendDlgItemMessage(hDlg, PAGE_LIST, LB_GETCURSEL, 0, 0L);
			psfile.page_list.current = (i == LB_ERR) ? -1 : i;
			for (i=0; i<(int)(psfile.dsc->page_count); i++) {
			  psfile.page_list.select[i] =
			    (int)SendDlgItemMessage(hDlg, PAGE_LIST, LB_GETSEL, i, 0L);
			}
			EndDialog(hDlg, TRUE);
			return TRUE;
		    case IDCANCEL:
			EndDialog(hDlg, FALSE);
			return TRUE;
		}
		break;
	}
	return FALSE;
}

/* Get page number from dialog box and store in ppage */
/* multiple is TRUE if multiple pages may be selected */
/* allpages is TRUE if all pages should be initially selected */
BOOL
get_page(int *ppage, BOOL multiple, BOOL allpages)
{
DLGPROC lpProc;
BOOL flag;
LPTSTR dlgname;
int i;
	if (psfile.dsc == (CDSC *)NULL)
		return FALSE;
	if (psfile.dsc->page_count == 0) {
		gserror(IDS_NOPAGE, NULL, MB_ICONEXCLAMATION, SOUND_NONUMBER);
		return FALSE;
	}
	// Make psfile.page_list.reverse sticky
        // psfile.page_list.reverse = FALSE;
	psfile.page_list.current = *ppage - 1;
	psfile.page_list.multiple = multiple;
	if (psfile.page_list.select == (BOOL *)NULL)
		return FALSE;

	memset(psfile.page_list.select, 0, psfile.dsc->page_count * sizeof(BOOL) );
	if (multiple) {
	    for (i=0; i< (int)(psfile.dsc->page_count); i++)
		psfile.page_list.select[i] = allpages;
	}
	psfile.page_list.select[psfile.page_list.current] = TRUE;

	if (psfile.page_list.multiple) {
	    dlgname = MAKEINTRESOURCE(IDD_MULTIPAGE);
	    lpProc = (DLGPROC)PageMultiDlgProc;
	}
	else {
	    dlgname = MAKEINTRESOURCE(IDD_PAGE);
	    lpProc = (DLGPROC)PageDlgProc;
	}
	flag = DialogBoxParamL(hlanguage, dlgname, hwndimg, lpProc, (LPARAM)NULL);
	if (flag && (psfile.page_list.current >= 0))
		*ppage = psfile.page_list.current + 1;
	return flag;
}


#ifndef VIEWONLY
#ifdef __BORLANDC__
#pragma argsused
#endif
BOOL CALLBACK _export
BoundingBoxDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static int bboxindex;
float x, y;
TCHAR buf[MAXSTR];
    switch(message) {
	case WM_INITDIALOG:
	    bboxindex = 0;
	    load_string(IDS_BBPROMPT, buf, sizeof(buf));
	    SetDlgItemText(hDlg, BB_PROMPT, buf);
	    return TRUE;
	case WM_COMMAND:
	    switch(LOWORD(wParam)) {
		case BB_CLICK:
		    if (!get_cursorpos(&x, &y)) {
			DestroyWindow(hDlg);
			hDlgModeless = 0;
		    }
		    switch(bboxindex) {
			case 0:
			    bbox.llx = (int)x;
			    break;
			case 1:
			    bbox.lly = (int)y;
			    break;
			case 2:
			    bbox.urx = (int)x;
			    break;
			case 3:
			    bbox.ury = (int)y;
			    bbox.valid = TRUE;
			    break;
		    }
		    bboxindex++;
		    if (bboxindex <= 3) {
	    	        load_string(IDS_BBPROMPT+bboxindex, buf, sizeof(buf));
	    	        SetDlgItemText(hDlg, BB_PROMPT, buf);
			return FALSE;
		    }
		case IDCANCEL:
		    DestroyWindow(hDlg);
		    hDlgModeless = 0;
		    return TRUE;
	    }
	case WM_CLOSE:
	    DestroyWindow(hDlg);
	    hDlgModeless = 0;
	    return TRUE;
    }
    return FALSE;
}

BOOL
get_bbox(void)
{
	bbox.valid = FALSE;
	bbox.llx = bbox.lly = bbox.urx = bbox.ury = 0;
	if ((gsdll.state != GS_PAGE) && (gsdll.state != GS_IDLE)) {
	    gserror(IDS_EPSNOBBOX, NULL, MB_ICONEXCLAMATION, SOUND_ERROR);
	    return FALSE;
	}
	hDlgModeless = CreateDialogParamL(hlanguage, MAKEINTRESOURCE(IDD_BBOX),
	    hwndimg, BoundingBoxDlgProc, (LPARAM)NULL);
	while (hDlgModeless) {
	    do_message();	/* wait for bounding box to be obtained */
	}
	return bbox.valid;
}

/* dialog box for warning PSTOEPS warning and auto/manual bbox selection */
#ifdef __BORLANDC__
#pragma argsused
#endif
BOOL CALLBACK _export
PSTOEPSDlgProc(HWND hDlg, UINT wmsg, WPARAM wParam, LPARAM lParam)
{
	switch (wmsg) {
	    case WM_INITDIALOG:
		if (option.auto_bbox)
		    SendDlgItemMessage(hDlg, PSTOEPS_AUTOBBOX, BM_SETCHECK, 1, 0);
		return TRUE;
	    case WM_COMMAND:
		switch (LOWORD(wParam)) {
		    case ID_HELP:
			get_help();
		        return FALSE;
		    case IDOK:
		    case IDYES:
			/* get Print to File status */

⌨️ 快捷键说明

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