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

📄 gvpdlg.c

📁 GSview 4.6 PostScript previewer。Ghostscript在MS-Windows, OS/2 and Unix下的图形化接口
💻 C
📖 第 1 页 / 共 4 页
字号:
    case WM_CONTROL:
	notify_message = SHORT2FROMMP(mp1);
	if (SHORT1FROMMP(mp1) == PAGE_LIST)
	  switch (notify_message) {
	    case LN_ENTER:
	        if (SHORT1FROMMP(mp1) == PAGE_LIST)
		    WinPostMsg(hwnd, WM_COMMAND, (MPARAM)DID_OK, MPFROM2SHORT(CMDSRC_OTHER, TRUE));
		break;
	    case LN_SELECT:
		i = (int)WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
		    LM_QUERYSELECTION, (MPARAM)0, (MPARAM)0);
		if (i != LIT_NONE) {
		    char buf[MAXSTR];
		    WinSendMsg( WinWindowFromID(hwnd, PAGE_LIST), LM_QUERYITEMTEXT, 
			MPFROM2SHORT(i, sizeof(buf)), MPFROMP(buf) );
		    /* Update edit field, but stop edit field from
		     * from altering list box selection */
		    ecdisable = TRUE;
		    WinSetWindowText( WinWindowFromID(hwnd, PAGE_EDIT), (PBYTE)buf);
		    ecdisable = FALSE;
		}
		break;
	}
	else if ( !ecdisable && (SHORT1FROMMP(mp1) == PAGE_EDIT)
	   && (notify_message = EN_CHANGE) ) {
	    char buf[MAXSTR];
	    WinQueryWindowText(WinWindowFromID(hwnd, PAGE_EDIT), 
		sizeof(buf), (PBYTE)buf);
	    i = (int)WinSendMsg( WinWindowFromID(hwnd, PAGE_LIST), LM_SEARCHSTRING, 
		MPFROM2SHORT(LSS_CASESENSITIVE, LIT_FIRST),
		MPFROMP(buf) );
	    if (i != LIT_NONE) {
		WinSendMsg( WinWindowFromID(hwnd, PAGE_LIST),
		    LM_SELECTITEM, MPFROMLONG(i), MPFROMLONG(TRUE) );
/*
		if (i > 5) 
		    WinSendMsg( WinWindowFromID(hwnd, PAGE_LIST),
			LM_SETTOPINDEX, MPFROMLONG(i - 5), (MPARAM)0 );
*/
	    }
	}
	break;
    case  WM_COMMAND:
      switch(LOUSHORT(mp1)) {
        case DID_OK:
	    i = (int)WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
		LM_QUERYSELECTION, (MPARAM)0, (MPARAM)0);
	    if (i == LIT_NONE) {
                WinDismissDlg(hwnd, DID_CANCEL);
	    }
	    psfile.page_list.current = i;
	    for (i=0; i<(int)psfile.dsc->page_count; i++) {
	        psfile.page_list.select[i] = 0;
	    }
	    psfile.page_list.select[psfile.page_list.current] = TRUE;
            WinDismissDlg(hwnd, DID_OK);
            return (MRESULT)TRUE;
	case DID_CANCEL:
	    WinDismissDlg(hwnd, DID_CANCEL);
	    return (MRESULT)TRUE;
	case ID_HELP:
	    get_help();
	    return (MRESULT)TRUE;
      }
      break;
    }
    return WinDefDlgProc(hwnd, msg, mp1, mp2);
}

MRESULT EXPENTRY PageMultiDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
int i;
int notify_message;
    switch(msg) {
    case  WM_INITDLG:
	{char buf[MAXSTR];
	if (psfile.page_list.reverse)
	    WinSendMsg( WinWindowFromID(hwnd, PAGE_REVERSE),
		BM_SETCHECK, MPFROMLONG(1), MPFROMLONG(0));
	for (i=0; i<(int)psfile.dsc->page_count; i++) {
	    page_ordlabel(buf, i);
	    WinSendMsg( WinWindowFromID(hwnd, PAGE_LIST),
	    	LM_INSERTITEM, MPFROMLONG(LIT_END), 
		MPFROMP(buf) );
	}
	for (i=0; i<(int)psfile.dsc->page_count; i++) {
	    if (psfile.page_list.select[i])
	        WinSendMsg( WinWindowFromID(hwnd, PAGE_LIST), LM_SELECTITEM, 
		    MPFROMLONG(i), MPFROMLONG(TRUE) );
	}
	WinSendMsg( WinWindowFromID(hwnd, PAGE_LIST),
	    	LM_SELECTITEM, MPFROMLONG(psfile.page_list.current), MPFROMLONG(TRUE) );
	if (psfile.page_list.current > 5)
	    WinSendMsg( WinWindowFromID(hwnd, PAGE_LIST),
		LM_SETTOPINDEX, MPFROMLONG(psfile.page_list.current - 5), (MPARAM)0 );
	if (!psfile.page_list.multiple) {
		WinEnableWindow(WinWindowFromID(hwnd, PAGE_ALL), FALSE);
		WinEnableWindow(WinWindowFromID(hwnd, PAGE_ODD), FALSE);
		WinEnableWindow(WinWindowFromID(hwnd, PAGE_EVEN), FALSE);
	}
	}
	break;
    case WM_CONTROL:
	notify_message = SHORT2FROMMP(mp1);
	switch (notify_message) {
	    case LN_ENTER:
	        if (SHORT1FROMMP(mp1) == PAGE_LIST)
		    WinPostMsg(hwnd, WM_COMMAND, (MPARAM)DID_OK, MPFROM2SHORT(CMDSRC_OTHER, TRUE));
		break;
	}
	break;
    case  WM_COMMAND:
      switch(LOUSHORT(mp1)) {
	case DID_CANCEL:
	    WinDismissDlg(hwnd, DID_CANCEL);
	    return (MRESULT)TRUE;
        case DID_OK:
	    psfile.page_list.reverse = 
		(int)WinSendMsg( WinWindowFromID(hwnd, PAGE_REVERSE), 
		    BM_QUERYCHECK, MPFROMLONG(0), MPFROMLONG(0));
	    i = (int)WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
		LM_QUERYSELECTION, (MPARAM)0, (MPARAM)0);
	    psfile.page_list.current = (i == LIT_NONE) ? 0 : i;
	    for (i=0; i<(int)psfile.dsc->page_count; i++) {
	        psfile.page_list.select[i] = 0;
	    }
	    if (psfile.page_list.multiple) {
	        i = LIT_FIRST;
	        while ( (i = (int)WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
			LM_QUERYSELECTION, (MPARAM)i, (MPARAM)0))
		    != LIT_NONE )
		    psfile.page_list.select[i] = TRUE;
	    }
	    else
		psfile.page_list.select[psfile.page_list.current] = TRUE;
            WinDismissDlg(hwnd, DID_OK);
            return (MRESULT)TRUE;
	case PAGE_ALL:
	    WinEnableWindowUpdate(WinWindowFromID(hwnd, PAGE_LIST), FALSE);
	    for (i=(int)WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
		LM_QUERYITEMCOUNT, (MPARAM)0, (MPARAM)0)-1; i>=0; i--)
		WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
		    LM_SELECTITEM, (MPARAM)i, (MPARAM)TRUE);
	    WinEnableWindowUpdate(WinWindowFromID(hwnd, PAGE_LIST), TRUE);
            return (MRESULT)TRUE;
	case PAGE_ODD:
	    WinEnableWindowUpdate(WinWindowFromID(hwnd, PAGE_LIST), FALSE);
	    { int first, last;
		contiguous_range(hwnd, &first, &last);
		for (i=(int)WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
		    LM_QUERYITEMCOUNT, (MPARAM)0, (MPARAM)0)-1; i>=0; i--)
		    if (i >= first && i < last)
		        WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
			    LM_SELECTITEM, (MPARAM)i, (MPARAM)!(i&1));
		    WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
			LM_SETTOPINDEX, MPFROMSHORT(first), (MPARAM)0);
	    }
	    WinEnableWindowUpdate(WinWindowFromID(hwnd, PAGE_LIST), TRUE);
            return (MRESULT)TRUE;
	case PAGE_EVEN:
	    WinEnableWindowUpdate(WinWindowFromID(hwnd, PAGE_LIST), FALSE);
	    { int first, last;
		contiguous_range(hwnd, &first, &last);
		for (i=(int)WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
		    LM_QUERYITEMCOUNT, (MPARAM)0, (MPARAM)0)-1; i>=0; i--)
		    if (i >= first && i < last)
			WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
			    LM_SELECTITEM, (MPARAM)i, (MPARAM)(i&1));
		    WinSendMsg(WinWindowFromID(hwnd, PAGE_LIST), 
			LM_SETTOPINDEX, MPFROMSHORT(first), (MPARAM)0);
	    }
	    WinEnableWindowUpdate(WinWindowFromID(hwnd, PAGE_LIST), TRUE);
            return (MRESULT)TRUE;
	case ID_HELP:
	    get_help();
	    return (MRESULT)TRUE;
      }
      break;
    }
    return WinDefDlgProc(hwnd, msg, mp1, mp2);
}

/* 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)
{
int flag;
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 && allpages) {
	    for (i=0; i< (int)psfile.dsc->page_count; i++)
		psfile.page_list.select[i] = TRUE;
	}
	else
		psfile.page_list.select[psfile.page_list.current] = TRUE;

	if (psfile.page_list.multiple)
	    flag = WinDlgBox(HWND_DESKTOP, hwnd_frame, PageMultiDlgProc, hlanguage, IDD_MULTIPAGE, NULL);
	else
	    flag = WinDlgBox(HWND_DESKTOP, hwnd_frame, PageDlgProc, hlanguage, IDD_PAGE, NULL);
	if ((flag == DID_OK) && (psfile.page_list.current >= 0))
		*ppage = psfile.page_list.current + 1;
	return (flag == DID_OK);
}

MRESULT EXPENTRY BoundingBoxDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
static int bboxindex;
float x, y;
char buf[MAXSTR];
    switch(msg) {
	case WM_INITDLG:
	    bboxindex = 0;
	    load_string(IDS_BBPROMPT, buf, sizeof(buf));
	    WinSetDlgItemText(hwnd, BB_PROMPT, (PBYTE)buf);
	    break;
	case WM_COMMAND:
            switch(SHORT1FROMMP(mp1)) {
		case BB_CLICK:
		    if (!get_cursorpos(&x, &y)) {
			WinDestroyWindow(hwnd);
			hwnd_modeless = 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));
	    	        WinSetDlgItemText(hwnd, BB_PROMPT, (PBYTE)buf);
			WinSetFocus(HWND_DESKTOP, hwnd_modeless);
			return (MRESULT)FALSE;
		    }
		    /* all corners have been obtained so close dialog box */
		    WinDestroyWindow(hwnd);
		    hwnd_modeless = 0;
		    return (MRESULT)TRUE;
	    }
	case WM_CLOSE:
	    WinDestroyWindow(hwnd);
	    hwnd_modeless = 0;
	    return (MRESULT)TRUE;
    }
    return WinDefDlgProc(hwnd, msg, mp1, mp2);
}

BOOL
get_bbox(void)
{
QMSG q_mess;		/* queue message */
	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;
	}
	hwnd_modeless = WinLoadDlg(HWND_DESKTOP, hwnd_frame, BoundingBoxDlgProc, hlanguage, IDD_BBOX, NULL);
	WinSetWindowPos(hwnd_modeless, HWND_TOP, 0, 0, 0, 0, SWP_ZORDER | SWP_ACTIVATE);
	while (hwnd_modeless) {
	    /* wait for bounding box to be obtained */
  	    if (WinGetMsg(hab, &q_mess, 0L, 0, 0))
	        WinDispatchMsg(hab, &q_mess);
	}
	return bbox.valid;
}

/* dialog box for warning PSTOEPS warning and auto/manual bbox selection */
MRESULT EXPENTRY
PSTOEPSDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
{
    switch (msg) {
	case WM_INITDLG:
		if (option.auto_bbox)
		    WinSendMsg( WinWindowFromID(hwnd, PSTOEPS_AUTOBBOX),
			BM_SETCHECK, MPFROMLONG(1), MPFROMLONG(0));
		break;
	case WM_COMMAND:
            switch(SHORT1FROMMP(mp1)) {
		case ID_HELP:
		    nHelpTopic = IDS_TOPICPSTOEPS;
		    get_help();
		    return (MRESULT)TRUE;
                case DID_OK:
                case IDYES:
		    /* get Print to File status */
		    option.auto_bbox = (int)WinSendMsg( WinWindowFromID(hwnd, PSTOEPS_AUTOBBOX), BM_QUERYCHECK, MPFROMLONG(0), MPFROMLONG(0));
                    WinDismissDlg(hwnd, IDYES);
		    return (MRESULT)TRUE;
		case IDNO:
		    nHelpTopic = IDS_TOPICPSTOEPS;
		    get_help();
		    WinDismissDlg(hwnd, IDNO);
		    return (MRESULT)TRUE;
		case DID_CANCEL:
		    WinDismissDlg(hwnd, DID_CANCEL);
		    return (MRESULT)TRUE;
	    }
	    break;
    }
    return WinDefDlgProc(hwnd, msg, mp1, mp2);
}

BOOL
pstoeps_warn(void)
{
    return (WinDlgBox(HWND_DESKTOP, hwnd_frame, PSTOEPSDlgProc, hlanguage, IDD_PSTOEPS, NULL) == IDYES);
}

/* sounds stuff */

#define MAX_SYSTEM_SOUND 16
char *system_sounds;
char *sound_entry[MAX_SYSTEM_SOUND];
char szNone[32];
char szSpeaker[32];
int system_num;
MRESULT EXPENTRY SoundDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);

int
load_sounds(void)
{
char *p;
int j;
HINI hini;
	/* add our two sounds */
	sound_entry[0] = "";
	sound_entry[1] = BEEP;
	load_string(IDS_NONE, szNone, sizeof(szNone));
	load_string(IDS_SPKR, szSpeaker, sizeof(szSpeaker));
	/* get list of system sounds */
	system_sounds = (char *)malloc(PROFILE_SIZE);
	memset(system_sounds, 0, PROFILE_SIZE);
	if (system_sounds != (char *)NULL) {
 	    if ( (hini = PrfOpenProfile(hab, szMMini)) != NULLHANDLE ) {
	        PrfQueryProfileString(hini, (PCSZ)"MMPM2_AlarmSounds", NULL, (PCSZ)"\0\0", system_sounds, PROFILE_SIZE-1);
	        PrfCloseProfile(hini);
	    }
	}
	p = system_sounds;
	for (j=2; p!=(char *)NULL && j<MAX_SYSTEM_SOUND && strlen(p)!=0; j++) {
	    if (atoi(p) > 100)
	        p += strlen(p) + 1;	/* ignore <Try it> */
	    if (strlen(p)==0)
		j--;
	    else {
	        sound_entry[j] = p;	
	        p += strlen(p) + 1;
	    }
	}
	system_num = j;
	return system_num;
}

char *
get_sound_entry(int index)
{
	return (sound_entry[index]);
}

⌨️ 快捷键说明

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