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

📄 w32g_subwin3.c

📁 linux上播放midi音乐,但是要一些设置.可网上查找. 软件名称: TiMidity++-2.13.0.tar
💻 C
📖 第 1 页 / 共 5 页
字号:
/*    TiMidity++ -- MIDI to WAVE converter and player    Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>    Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA    w32g_subwin3.c: Written by Daisuke Aoki <dai@y7.net>*/#ifdef HAVE_CONFIG_H#include "config.h"#endif /* HAVE_CONFIG_H */#include <stdio.h>#include <stdlib.h>#include <process.h>#include <stddef.h>#ifndef NO_STRING_H#include <string.h>#else#include <strings.h>#endif#include "timidity.h"#include "common.h"#include "instrum.h"#include "playmidi.h"#include "readmidi.h"#include "output.h"#include "controls.h"#include "tables.h"#include "miditrace.h"#include "reverb.h"#ifdef SUPPORT_SOUNDSPEC#include "soundspec.h"#endif /* SUPPORT_SOUNDSPEC */#include "recache.h"#include "arc.h"#include "strtab.h"#include "mid.defs"#include "w32g.h"#include <shlobj.h>#include <commctrl.h>#include <windowsx.h>#include "w32g_res.h"#include "w32g_utl.h"#include "w32g_pref.h"#include "w32g_subwin.h"#include "w32g_ut2.h"#include "w32g_tracer.h"extern int gdi_lock_ex ( DWORD timeout );#if 0static int gdi_lock_result;#define GDI_LOCK_EX(timeout) ( \	ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "GDI_LOCK_EX(%s: %d)", __FILE__, __LINE__ ), \	gdi_lock_result = gdi_lock_ex(timeout), \	ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "GDI_LOCK_EX_RESULT(%d)", gdi_lock_result ), \	gdi_lock_result \)#define GDI_LOCK() { \	ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "GDI_LOCK(%s: %d)", __FILE__, __LINE__ ); \	gdi_lock(); \}#define GDI_UNLOCK() { \	ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "GDI_UNLOCK(%s: %d)", __FILE__, __LINE__ ); \	gdi_unlock(); \}#else#define GDI_LOCK() { gdi_lock(); }#define GDI_LOCK_EX(timeout) gdi_lock_ex(timeout)#define GDI_UNLOCK() { gdi_unlock(); }#endif#if defined(__CYGWIN32__) || defined(__MINGW32__)#ifndef TPM_TOPALIGN#define TPM_TOPALIGN	0x0000L#endif#endifextern void VprintfEditCtlWnd(HWND hwnd, char *fmt, va_list argList);extern void PrintfEditCtlWnd(HWND hwnd, char *fmt, ...);extern void PutsEditCtlWnd(HWND hwnd, char *str);extern void ClearEditCtlWnd(HWND hwnd);#define C_BACK RGB(0x00,0x00,0x00)// #define C_BAR_FORE RGB(0xFF,0xFF,0x00)#define C_BAR_FORE RGB(0xD0,0xD0,0x00)#define C_BAR_FORE2 RGB(0xD0,0xB0,0x00)#define C_BAR_BACK RGB(0xA0,0xA0,0xA0)#define C_BAR_LEFT RGB(0xD0,0xD0,0x00)#define C_BAR_RIGHT RGB(0x80,0xD0,0x40)#define C_TEXT_FORE RGB(0x00,0x00,0x00)#define C_TEXT_BACK RGB(0xC0,0xC0,0xC0)#define C_TEXT_BACK_DARK RGB(0x80,0x80,0x80)#define C_TEXT_BACK_VERY_DARK RGB(0x40,0x40,0x40)#define CVV_TYPE_NONE 0#define CVV_TYPE_LEFT 1		// 嵍偐傜塃#define CVV_TYPE_RIGHT 2	// 塃偐傜嵍#define CVV_TYPE_TOP 3		// 忋偐傜壓#define CVV_TYPE_BOTTOM 4	// 壓偐傜忋#define VEL_MAX 128*4#define TWI_MODE_1_32CH		1#define TWI_MODE_1_16CH		2#define TWI_MODE_17_32CH	3#define CTL_STATUS_UPDATE -98extern ControlMode *ctl;#define CSV_LEFT	0#define CSV_RIGHT	1#define CSV_CENTER 2static struct tracer_bmp_ {	HBITMAP hbmp;	HDC hmdc;	RECT rc_volume;	RECT rc_expression;	RECT rc_pan;	RECT rc_sustain;	RECT rc_pitch_bend;	RECT rc_mod_wheel;	RECT rc_chorus_effect;	RECT rc_reverb_effect;	RECT rc_velocity[2];	RECT rc_notes;	RECT rc_notes_sustain;	RECT rc_notes_on;	RECT rc_notes_mask[12];	RECT rc_note[12];	RECT rc_note_sustain[12];	RECT rc_note_on[12];	RECT rc_gm_on;	RECT rc_gm_off;	RECT rc_gs_on;	RECT rc_gs_off;	RECT rc_xg_on;	RECT rc_xg_off;	RECT rc_temper_keysig[32];	RECT rc_temper_type[8];} tracer_bmp;static int get_head_rc ( RECT *rc, RECT *rc_base );static int get_ch_rc ( int ch, RECT *rc, RECT *rc_base );static int notes_view_draw ( RECT *lprc, int note, int vel, int back_draw, int lockflag );#if 0static int cheap_volume_view_draw ( RECT *lprc, int vol, int max, COLORREF fore, COLORREF back, int type, int lockflag );#endifstatic int cheap_string_view_draw ( RECT *lprc, char *str, COLORREF fore, COLORREF back, int mode, int lockflag );static int cheap_half_string_view_draw ( RECT *lprc, char *str, COLORREF fore, COLORREF back, int mode, int lockflag );static int change_tracer_wnd_mode ( int mode );static int init_tracer_bmp ( HDC hdc );static int tracer_ch_number_draw(int ch, int mute, int lockflag);static int tracer_ch_program_draw ( int ch, int bank, int program, char *instrument, int mapID, int lockflag );static int tracer_velocity_draw ( RECT *lprc, int vol, int max, int lockflag );static int tracer_velocity_draw_ex ( RECT *lprc, int vol, int vol_old, int max, int lockflag );static int tracer_volume_draw ( RECT *lprc, int vol, int max, int lockflag );static int tracer_expression_draw ( RECT *lprc, int vol, int max, int lockflag );static int tracer_pan_draw ( RECT *lprc, int vol, int max, int lockflag );static int tracer_sustain_draw ( RECT *lprc, int vol, int lockflag );static int tracer_pitch_bend_draw ( RECT *lprc, int vol, int max, int lockflag );static int tracer_mod_wheel_draw ( RECT *lprc, int vol, int max, int lockflag );static int tracer_chorus_effect_draw ( RECT *lprc, int vol, int max, int lockflag );static int tracer_reverb_effect_draw ( RECT *lprc, int vol, int max, int lockflag );static int tracer_temper_keysig_draw(RECT *lprc, int8 tk, int ko, int lockflag);static int tracer_temper_type_draw(RECT *lprc, int ch, int8 tt, int lockflag);static int tracer_gm_draw ( RECT *lprc, int flag, int lockflag );static int tracer_gs_draw ( RECT *lprc, int flag, int lockflag );static int tracer_xg_draw ( RECT *lprc, int flag, int lockflag );static int notes_view_generate ( int lockflag );// ****************************************************************************// lock#if 0static int tracer_lock_result;#define TRACER_LOCK_EX(timeout) ( \	ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "TRACER_LOCK_EX(%s: %d)", __FILE__, __LINE__ ), \	tracer_lock_result = tracer_lock_ex(timeout), \	ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "TRACER_LOCK_EX_RESULT(%d)", tracer_lock_result ), \	tracer_wnd_lock_result \)#define TRACER_LOCK() { \	ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "TRACER_LOCK(%s: %d)", __FILE__, __LINE__ ); \	tracer_wnd_lock(); \}#define TRACER_UNLOCK() { \	ctl->cmsg(CMSG_INFO, VERB_VERBOSE, "TRACER_UNLOCK(%s: %d)", __FILE__, __LINE__ ); \	tracer_wnd_unlock(); \}#else#define TRACER_LOCK() { tracer_wnd_lock(); }#define TRACER_LOCK_EX(timeout) tracer_wnd_lock_ex(timeout)#define TRACER_UNLOCK() { tracer_wnd_unlock(); }#endifstatic HANDLE volatile hMutexWrd = NULL;static BOOL tracer_wnd_lock_ex ( DWORD timeout ){	if ( hMutexWrd == NULL ) {		hMutexWrd = CreateMutex ( NULL, FALSE, NULL );		if ( hMutexWrd == NULL )			return FALSE;	}	if ( WaitForSingleObject ( hMutexWrd, timeout )== WAIT_FAILED ) {		return FALSE;	}	return TRUE;}static BOOL tracer_wnd_lock (void){	return tracer_wnd_lock_ex ( INFINITE );}static void tracer_wnd_unlock (void){	ReleaseMutex ( hMutexWrd );}// ****************************************************************************// Tracer WindowTRACERWNDINFO TracerWndInfo;static int TracerWndInfoReset(HWND hwnd);static int TracerWndInfoApply(void);w32g_tracer_wnd_t w32g_tracer_wnd;BOOL SetTracerWndActive(void){	if ( IsWindowVisible(hTracerWnd) ) {		w32g_tracer_wnd.active = TRUE;	} else {		w32g_tracer_wnd.active = FALSE;	}	return w32g_tracer_wnd.active;}BOOL CALLBACK TracerWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);BOOL CALLBACK TracerCanvasWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);void InitTracerWnd(HWND hParentWnd){	WNDCLASS wndclass ;	int height, space;	RECT rc, rc2;	HICON hIcon;	static int init = 1;	if ( init ) {		w32g_tracer_wnd.hNullBrush = GetStockObject ( NULL_BRUSH );		w32g_tracer_wnd.hNullPen = GetStockObject ( NULL_PEN );		init = 0;	}	if (hTracerWnd != NULL) {		TRACER_LOCK();		DestroyWindow(hTracerWnd);		hTracerWnd = NULL;		DeleteObject ( (HGDIOBJ)w32g_tracer_wnd.hFontCommon );		DeleteObject ( (HGDIOBJ)w32g_tracer_wnd.hFontHalf );		DeleteDC ( w32g_tracer_wnd.hmdc );		TRACER_UNLOCK();	}	w32g_tracer_wnd.active = FALSE;	INILoadTracerWnd();	hTracerWnd = CreateDialog		(hInst,MAKEINTRESOURCE(IDD_DIALOG_TRACER),hParentWnd,TracerWndProc);	TracerWndInfoReset(hTracerWnd);	ShowWindow(hTracerWnd,SW_HIDE);	hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON_TIMIDITY), IMAGE_ICON, 16, 16, 0);	if (hIcon!=NULL) SendMessage(hTracerWnd,WM_SETICON,FALSE,(LPARAM)hIcon);	INILoadTracerWnd();	w32g_tracer_wnd.font_common_height = 14; 	w32g_tracer_wnd.font_common_width = 0;	SetRect ( &w32g_tracer_wnd.rc_head, 1, 2,  0, 0 );	SetRect ( &w32g_tracer_wnd.rc_all_channels, 1,  20 + 2,  0, 0 );	w32g_tracer_wnd.width = 2 + 880 + 2; 	w32g_tracer_wnd.height = 1 + 19 + 1 + (19 + 1) * 32 + 1; 	w32g_tracer_wnd.ch_height = 19;	w32g_tracer_wnd.ch_space = 1;	height = w32g_tracer_wnd.ch_height;	space = w32g_tracer_wnd.ch_space;#if 0	SetRect ( &w32g_tracer_wnd.rc_current_time, 2, 1, 80, height );	SetRect ( &w32g_tracer_wnd.rc_tempo, 82, 1, 160, height );	SetRect ( &w32g_tracer_wnd.rc_master_volume, 162, 1, 200, height / 2 - 1 );	SetRect ( &w32g_tracer_wnd.rc_maxvoices, 162, height / 2 + 1, 200, height );#endif	wndclass.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_CLASSDC;	wndclass.lpfnWndProc   = TracerCanvasWndProc ;	wndclass.cbClsExtra    = 0 ;	wndclass.cbWndExtra    = 0 ;	wndclass.hInstance     = hInst ;	wndclass.hIcon         = NULL;	wndclass.hCursor       = LoadCursor(0,IDC_ARROW) ;	wndclass.hbrBackground = w32g_tracer_wnd.hNullBrush;	wndclass.lpszMenuName  = NULL;	wndclass.lpszClassName = "tracer canvas wnd";	RegisterClass(&wndclass);	w32g_tracer_wnd.hwnd = CreateWindowEx(0,"tracer canvas wnd",0,WS_CHILD,		CW_USEDEFAULT,0,w32g_tracer_wnd.width,w32g_tracer_wnd.height,		hTracerWnd,0,hInst,0);	w32g_tracer_wnd.hdc = GetDC(w32g_tracer_wnd.hwnd);	TRACER_LOCK();	SelectObject ( w32g_tracer_wnd.hdc, w32g_tracer_wnd.hNullBrush );	SelectObject ( w32g_tracer_wnd.hdc, w32g_tracer_wnd.hNullPen );	w32g_tracer_wnd.hbitmap = CreateCompatibleBitmap(w32g_tracer_wnd.hdc,w32g_tracer_wnd.width,w32g_tracer_wnd.height);	w32g_tracer_wnd.hmdc = CreateCompatibleDC(w32g_tracer_wnd.hdc);	w32g_tracer_wnd.hgdiobj_hmdcprev = SelectObject(w32g_tracer_wnd.hmdc,w32g_tracer_wnd.hbitmap);	SelectObject ( w32g_tracer_wnd.hmdc, w32g_tracer_wnd.hNullBrush );	SelectObject ( w32g_tracer_wnd.hmdc, w32g_tracer_wnd.hNullPen );	TRACER_UNLOCK();	init_tracer_bmp ( w32g_tracer_wnd.hdc );	ReleaseDC(w32g_tracer_wnd.hwnd,w32g_tracer_wnd.hdc);	{		char fontname[128];		if ( PlayerLanguage == LANGUAGE_JAPANESE )			strcpy(fontname,"俵俽 俹柧挬");		else {			strcpy(fontname,"Arial");			w32g_tracer_wnd.font_common_height = 16; 		}		w32g_tracer_wnd.hFontCommon = CreateFont(w32g_tracer_wnd.font_common_height,w32g_tracer_wnd.font_common_width,0,0,FW_DONTCARE,FALSE,FALSE,FALSE,			DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,			DEFAULT_PITCH | FF_MODERN ,fontname);		w32g_tracer_wnd.hFontHalf = CreateFont(-10,0,0,0,FW_DONTCARE,FALSE,FALSE,FALSE,			DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY,			DEFAULT_PITCH | FF_MODERN ,"Courier");	}	TracerWndReset();	SetRect(&w32g_tracer_wnd.rc_channel_top, 1, 0, 20, height);	SetRect(&w32g_tracer_wnd.rc_instrument, 21, 0, 179, height);	SetRect(&w32g_tracer_wnd.rc_inst_map, 180, 0, 233, height);	SetRect(&w32g_tracer_wnd.rc_bank, 234, 0, 264, height);	SetRect(&w32g_tracer_wnd.rc_program, 265, 0, 295, height);	SetRect(&w32g_tracer_wnd.rc_velocity, 296, 0, 326, height);	SetRect(&w32g_tracer_wnd.rc_volume, 327, 0, 347, height / 2);	SetRect(&w32g_tracer_wnd.rc_expression, 327, height / 2 + 1, 347, height);	SetRect(&w32g_tracer_wnd.rc_panning, 348, 0, 368, height / 2);	SetRect(&w32g_tracer_wnd.rc_sustain, 348, height / 2 + 1, 368, height);	SetRect(&w32g_tracer_wnd.rc_pitch_bend, 369, 0, 389, height / 2);	SetRect(&w32g_tracer_wnd.rc_mod_wheel, 369, height / 2 + 1, 389, height);	SetRect(&w32g_tracer_wnd.rc_chorus_effect, 390, 0, 410, height / 2);	SetRect(&w32g_tracer_wnd.rc_reverb_effect, 390, height / 2 + 1, 410, height);	SetRect(&w32g_tracer_wnd.rc_temper_keysig, 411, 0, 444, height);	SetRect(&w32g_tracer_wnd.rc_gm, 445, 0, 469, height);	SetRect(&w32g_tracer_wnd.rc_gs, 470, 0, 494, height);	SetRect(&w32g_tracer_wnd.rc_xg, 495, 0, 519, height);	SetRect(&w32g_tracer_wnd.rc_head_rest, 520, 0, 890, height);	SetRect(&w32g_tracer_wnd.rc_temper_type, 411, 0, 430, height);	SetRect(&w32g_tracer_wnd.rc_notes, 431, 0, 890, height);	GetWindowRect ( hTracerWnd, &rc );	GetClientRect ( hTracerWnd, &rc2 );	rc.left = rc.left;	rc.top = rc.top;

⌨️ 快捷键说明

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