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

📄 w32g_subwin.c

📁 linux上播放midi音乐,但是要一些设置.可网上查找. 软件名称: TiMidity++-2.13.0.tar
💻 C
📖 第 1 页 / 共 4 页
字号:
	ShowWindow(hTracerWnd,SW_HIDE);	UpdateWindow(hTracerWnd);}BOOL CALLBACKTracerWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam){	switch (uMess){	case WM_INITDIALOG:		return FALSE;	case WM_COMMAND:		switch (LOWORD(wParam)) {		case IDCLOSE:			ShowWindow(hwnd, SW_HIDE);			MainWndUpdateTracerButton();			break;		default:			return FALSE;		}		case WM_SIZE:			return FALSE;		case WM_CLOSE:			ShowWindow(hTracerWnd, SW_HIDE);			MainWndUpdateTracerButton();			break;		default:			return FALSE;	}	return FALSE;}#endif//****************************************************************************// Doc Window#define IDM_DOCWND_CHOOSEFONT 4232int DocWndIndependent = 0; /* Independent document viewer mode.(撈棫僪僉儏儊儞僩價儏儚乕儌乕僪) */int DocWndAutoPopup = 0;DOCWNDINFO DocWndInfo;static BOOL CALLBACK DocWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);static void InitDocEditWnd(HWND hParentWnd);static void DocWndConvertText(char *in, int in_size, char *out, int out_size);static void DocWndSetText(char *text, int text_size);static void DocWndSetInfo(char *info, char *filename);static void DocWndInfoInit(void);static int DocWndInfoLock(void);static void DocWndInfoUnLock(void);void InitDocWnd(HWND hParentWnd);void DocWndInfoReset(void);void DocWndAddDocFile(char *filename);void DocWndSetMidifile(char *filename);void DocWndReadDoc(int num);void DocWndReadDocNext(void);void DocWndReadDocPrev(void);static int DocWndInfoReset2(HWND hwnd);static int DocWndInfoApply(void);static int DocWndSetFontEdit(char *fontName, int fontWidth, int fontHeight);void InitDocWnd(HWND hParentWnd){	HMENU hMenu;	HICON hIcon;	if (hDocWnd != NULL) {		DestroyWindow(hDocWnd);		hDocWnd = NULL;	}	DocWndInfoReset2(hDocWnd);	INILoadDocWnd();	switch(PlayerLanguage){  	case LANGUAGE_ENGLISH:		hDocWnd = CreateDialog			(hInst,MAKEINTRESOURCE(IDD_DIALOG_DOC_EN),hParentWnd,DocWndProc);		break; 	default:	case LANGUAGE_JAPANESE:		hDocWnd = CreateDialog			(hInst,MAKEINTRESOURCE(IDD_DIALOG_DOC),hParentWnd,DocWndProc);	break;	}	hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON_TIMIDITY), IMAGE_ICON, 16, 16, 0);	if (hIcon!=NULL) SendMessage(hDocWnd,WM_SETICON,FALSE,(LPARAM)hIcon);	DocWndInfoReset2(hDocWnd);	hMenu = GetSystemMenu(DocWndInfo.hwnd,FALSE);	switch(PlayerLanguage){	case LANGUAGE_JAPANESE:		AppendMenu(hMenu,MF_SEPARATOR,0,0);		AppendMenu(hMenu,MF_STRING,IDM_DOCWND_CHOOSEFONT,"僼僅儞僩偺慖戰");		break; 	default:  	case LANGUAGE_ENGLISH:		AppendMenu(hMenu,MF_SEPARATOR,0,0);		AppendMenu(hMenu,MF_STRING,IDM_DOCWND_CHOOSEFONT,"Choose Font");		break;	}	DocWndInfoReset2(hDocWnd);	INILoadDocWnd();	DocWndInfoApply();	ShowWindow(hDocWnd,SW_HIDE);	UpdateWindow(hDocWnd);	EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_PREV),FALSE);	EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_NEXT),FALSE);}static BOOL CALLBACKDocWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam){	switch (uMess){	case WM_INITDIALOG:		PutsDocWnd("Doc Window\n");		DocWndInfoInit();		SetWindowPosSize(GetDesktopWindow(),hwnd,DocWndInfo.PosX, DocWndInfo.PosY );		return FALSE;	case WM_DESTROY:		{		RECT rc;		GetWindowRect(hwnd,&rc);		DocWndInfo.Width = rc.right - rc.left;		DocWndInfo.Height = rc.bottom - rc.top;		}		INISaveDocWnd();		break;	case WM_SYSCOMMAND:		switch(wParam){		case IDM_DOCWND_CHOOSEFONT:		{			char fontName[64];			int fontHeight;			int fontWidth;			strcpy(fontName,DocWndInfo.fontName);			fontHeight = DocWndInfo.fontHeight;			fontWidth = DocWndInfo.fontWidth;			if(DlgChooseFont(hwnd,fontName,&fontHeight,&fontWidth)==0){				DocWndSetFontEdit(fontName,fontWidth,fontHeight);			}			break;		}			break;		default:			break;		}    case WM_COMMAND:		switch (LOWORD(wParam)) {		case IDCLOSE:			ShowWindow(hwnd, SW_HIDE);			MainWndUpdateDocButton();			break;        case IDCLEAR:			ClearDocWnd();			break;		default:			break;		}		switch (LOWORD(wParam)) {		case IDC_BUTTON_NEXT:			DocWndReadDocNext();			break;		case IDC_BUTTON_PREV:			DocWndReadDocPrev();			break;		default:			break;		}		return FALSE;	// See PreDispatchMessage() in w32g2_main.c	case WM_SYSKEYDOWN:	case WM_KEYDOWN:	{		int nVirtKey = (int)wParam;		switch(nVirtKey){			case VK_ESCAPE:				SendMessage(hwnd,WM_CLOSE,0,0);				break;		}	}		break;	case WM_CLOSE:		ShowSubWindow(hDocWnd,0);//		ShowWindow(hDocWnd, SW_HIDE);		MainWndUpdateDocButton();		break;	case WM_SIZE:		switch(wParam){		case SIZE_MAXIMIZED:		case SIZE_RESTORED:			{		// 側傫偐堄枴側偔柺搢(^^;;				int x,y,cx,cy;				int max = 0;				int width;				RECT rcParent;				RECT rcEDIT_INFO, rcEDIT_FILENAME, rcBUTTON_PREV, rcBUTTON_NEXT, rcEDIT;				HWND hwndEDIT_INFO, hwndEDIT_FILENAME, hwndBUTTON_PREV, hwndBUTTON_NEXT, hwndEDIT;				int nWidth = LOWORD(lParam);				int nHeight = HIWORD(lParam);				GetWindowRect(hwnd,&rcParent);				cx = rcParent.right-rcParent.left;				cy  = rcParent.bottom-rcParent.top;				if(cx < 300)					MoveWindow(hwnd,rcParent.left,rcParent.top,300,cy,TRUE);				if(cy < 200)					MoveWindow(hwnd,rcParent.left,rcParent.top,cx,200,TRUE);				GetClientRect(hwnd,&rcParent);				hwndEDIT = GetDlgItem(hwnd,IDC_EDIT);				hwndEDIT_INFO = GetDlgItem(hwnd,IDC_EDIT_INFO);				hwndEDIT_FILENAME = GetDlgItem(hwnd,IDC_EDIT_FILENAME);				hwndBUTTON_PREV = GetDlgItem(hwnd,IDC_BUTTON_PREV);				hwndBUTTON_NEXT = GetDlgItem(hwnd,IDC_BUTTON_NEXT);				GetWindowRect(hwndEDIT,&rcEDIT);				GetWindowRect(hwndEDIT_INFO,&rcEDIT_INFO);				GetWindowRect(hwndEDIT_FILENAME,&rcEDIT_FILENAME);				GetWindowRect(hwndBUTTON_PREV,&rcBUTTON_PREV);				GetWindowRect(hwndBUTTON_NEXT,&rcBUTTON_NEXT);				width = rcParent.right - rcParent.left;				cx = rcBUTTON_NEXT.right-rcBUTTON_NEXT.left;				cy = rcBUTTON_NEXT.bottom-rcBUTTON_NEXT.top;				x = rcParent.right - cx - 5;				y = rcParent.bottom - cy;				MoveWindow(hwndBUTTON_NEXT,x,y,cx,cy,TRUE);				width -= cx + 5;				if(cy>max) max = cy;				cx = rcBUTTON_PREV.right-rcBUTTON_PREV.left;				cy = rcBUTTON_PREV.bottom-rcBUTTON_PREV.top;				x  -= cx + 5;				y = rcParent.bottom - cy;				MoveWindow(hwndBUTTON_PREV,x,y,cx,cy,TRUE);				width -= cx;				if(cy>max) max = cy;				width -= 5;//				cx = rcEDIT_INFO.right-rcEDIT_INFO.left;				cx = (int)(width * 0.36);				cy = rcEDIT_INFO.bottom-rcEDIT_INFO.top;				x = rcParent.left;				y = rcParent.bottom - cy;				MoveWindow(hwndEDIT_INFO,x,y,cx,cy,TRUE);				if(cy>max) max = cy;				x += cx + 5;//				cx = rcEDIT_FILENAME.right-rcEDIT_FILENAME.left;				cx = (int)(width * 0.56);				cy = rcEDIT_FILENAME.bottom-rcEDIT_FILENAME.top;				y = rcParent.bottom - cy;				MoveWindow(hwndEDIT_FILENAME,x,y,cx,cy,TRUE);				if(cy>max) max = cy;				cx = rcParent.right - rcParent.left;				cy = rcParent.bottom - rcParent.top - max - 5;				x  = rcParent.left;				y = rcParent.top;				MoveWindow(hwndEDIT,x,y,cx,cy,TRUE);				InvalidateRect(hwnd,&rcParent,FALSE);				UpdateWindow(hwnd);				GetWindowRect(hwnd,&rcParent);				DocWndInfo.Width = rcParent.right - rcParent.left;				DocWndInfo.Height = rcParent.bottom - rcParent.top;				break;			}		case SIZE_MINIMIZED:		case SIZE_MAXHIDE:		case SIZE_MAXSHOW:		default:			break;		}		break;	case WM_MOVE://		DocWndInfo.PosX = (int) LOWORD(lParam);//		DocWndInfo.PosY = (int) HIWORD(lParam);		{			RECT rc;			GetWindowRect(hwnd,&rc);			DocWndInfo.PosX = rc.left;			DocWndInfo.PosY = rc.top;		}		break;	default:		return FALSE;	}	return FALSE;}static int DocWndInfoReset2(HWND hwnd){//	memset(&DocWndInfo,0,sizeof(DOCWNDINFO));	DocWndInfo.PosX = - 1;	DocWndInfo.PosY = - 1;	DocWndInfo.Height = 400;	DocWndInfo.Width = 400;	DocWndInfo.hPopupMenu = NULL;	DocWndInfo.hwnd = hwnd;	if ( hwnd != NULL )	DocWndInfo.hwndEdit = GetDlgItem(hwnd,IDC_EDIT);	strcpy(DocWndInfo.fontNameEN,"Times New Roman");	strcpy(DocWndInfo.fontNameJA,"俵俽 柧挬");	DocWndInfo.fontHeight = 12;	DocWndInfo.fontWidth = 6;	DocWndInfo.fontFlags = FONT_FLAGS_FIXED;	switch(PlayerLanguage){	case LANGUAGE_ENGLISH:		DocWndInfo.fontName = DocWndInfo.fontNameEN; 		break;	default:	case LANGUAGE_JAPANESE:		DocWndInfo.fontName = DocWndInfo.fontNameJA; 		break;	}	return 0;}static int DocWndInfoApply(void){	RECT rc;	HFONT hFontPre = NULL;	DWORD fdwPitch = (DocWndInfo.fontFlags&FONT_FLAGS_FIXED)?FIXED_PITCH:VARIABLE_PITCH;		DWORD fdwItalic = (DocWndInfo.fontFlags&FONT_FLAGS_ITALIC)?TRUE:FALSE;	HFONT hFont =		CreateFont(DocWndInfo.fontHeight,DocWndInfo.fontWidth,0,0,FW_DONTCARE,fdwItalic,FALSE,FALSE,			DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,	      	fdwPitch | FF_DONTCARE,DocWndInfo.fontName);	if(hFont != NULL){		hFontPre = DocWndInfo.hFontEdit;		DocWndInfo.hFontEdit = hFont;		SendMessage(DocWndInfo.hwndEdit,WM_SETFONT,(WPARAM)DocWndInfo.hFontEdit,(LPARAM)MAKELPARAM(TRUE,0));	}	GetWindowRect(DocWndInfo.hwnd,&rc);	MoveWindow(DocWndInfo.hwnd,rc.left,rc.top,DocWndInfo.Width,DocWndInfo.Height,TRUE);//	InvalidateRect(hwnd,&rc,FALSE);//	UpdateWindow(hwnd);	if(hFontPre!=NULL) CloseHandle(hFontPre);	INISaveDocWnd();	return 0;}static int DocWndSetFontEdit(char *fontName, int fontWidth, int fontHeight){	strcpy(DocWndInfo.fontName,fontName);	DocWndInfo.fontWidth = fontWidth;	DocWndInfo.fontHeight = fontHeight;	DocWndInfoApply();	return 0;}static char ControlCode[] = "@ABCDEFGHIJKLMNOPQRS";static void DocWndConvertText(char *in, int in_size, char *out, int out_size){	char *buffer = (char *)safe_malloc(sizeof(char)*out_size);	int buffer_size = out_size;	int i=0, j=0;	int nl = 0;// Convert Return Code CR, LF -> CR+LF ,//         Control Code -> ^? (^@, ^A, ^B, ...).// stage1:	for(;;){		if(i>=in_size || j>=buffer_size-1)			goto stage1_end;		if(nl==13){			if(in[i]==13){				if(j>=buffer_size-2)					goto stage1_end;				buffer[j++] = 13;				buffer[j++] = 10;				i++;				nl = 13;				continue;			}			if(in[i]==10){				if(j>=buffer_size-2)					goto stage1_end;				buffer[j++] = 13;				buffer[j++] = 10;				i++;				nl = 0;				continue;			}			if(j>=buffer_size-2)				goto stage1_end;			buffer[j++] = 13;			buffer[j++] = 10;			if(in[i]>=0 && in[i]<=0x1f && in[i]!='\t'){				if(j>=buffer_size-2)					goto stage1_end;				buffer[j++] = '^';				buffer[j++] = ControlCode[in[i]];			} else {				if(j>=buffer_size-1)					goto stage1_end;				buffer[j++] = in[i];			}			i++;			nl = 0;			continue;		}		if(nl==10){			if(in[i]==13||in[i]==10){				if(j>=buffer_size-2)					goto stage1_end;				buffer[j++] = 13;				buffer[j++] = 10;				nl = in[i];				i++;				continue;			}			if(j>=buffer_size-2)				goto stage1_end;			buffer[j++] = 13;			buffer[j++] = 10;			if(in[i]>=0 && in[i]<=0x1f && in[i]!='\t'){				if(j>=buffer_size-2)					goto stage1_end;				buffer[j++] = '^';				buffer[j++] = ControlCode[in[i]];			} else {				if(j>=buffer_size-1)					goto stage1_end;				buffer[j++] = in[i];			}			i++;			nl = 0;			continue;		}		if(in[i]==13||in[i]==10){			nl = in[i];			i++;			continue;		}		if(in[i]>=0 && in[i]<=0x1f && in[i]!='\t'){			if(j>=buffer_size-2)				goto stage1_end;			buffer[j++] = '^';			buffer[j++] = ControlCode[in[i]];		} else {			if(j>=buffer_size-1)				goto stage1_end;			buffer[j++] = in[i];		}		i++;		nl = 0;		continue;	}stage1_end:	buffer[j] = '\0';// Convert KANJI Code.// stage2:#ifndef MAX2#define MAX2(x,y) ((x)>=(y)?(x):(y))#endif	switch(PlayerLanguage){  	case LANGUAGE_ENGLISH: 	default:		strncpy(out,buffer,MAX2(buffer_size-1,out_size-1));		out[out_size-1] = '\0';		break;	case LANGUAGE_JAPANESE:		strncpy(out,buffer,MAX2(buffer_size-1,out_size-1));		nkf_convert(buffer,out,out_size-1,NULL,"SJIS");		out[out_size-1] = '\0';		break;

⌨️ 快捷键说明

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