📄 gvwdlg.c
字号:
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 + -