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

📄 w32g_i.c

📁 linux上播放midi音乐,但是要一些设置.可网上查找. 软件名称: TiMidity++-2.13.0.tar
💻 C
📖 第 1 页 / 共 5 页
字号:
			TrackPopupMenu(Canvas.hPopupMenu,TPM_TOPALIGN|TPM_LEFTALIGN,         	rc.left+(int)LOWORD(lParam),rc.top+(int)HIWORD(lParam),            0,Canvas.hwnd,NULL);				PostMessage ( Canvas.hwnd, WM_NULL, 0, 0 );      }			break;		case WM_COMMAND:			switch (LOWORD(wParam)) {			case IDM_CANVAS_GSLCD:				CanvasChange(CANVAS_MODE_GSLCD);				break;			case IDM_CANVAS_MAP16:				Canvas.MapMode = CMAP_MODE_16;				CanvasChange(CANVAS_MODE_MAP16);				break;			case IDM_CANVAS_MAP32:				Canvas.MapMode = CMAP_MODE_32;				CanvasChange(CANVAS_MODE_MAP32);				break;			case IDM_CANVAS_KEYBOARD:				CanvasChange(CANVAS_MODE_KBD_A);				break;			case IDM_CANVAS_KEYBOARD_A:				Canvas.CKPart = 1;				CanvasChange(CANVAS_MODE_KBD_A);				break;			case IDM_CANVAS_KEYBOARD_B:				Canvas.CKPart = 2;				CanvasChange(CANVAS_MODE_KBD_B);				break;			case IDM_CANVAS_SLEEP:				CanvasChange(CANVAS_MODE_SLEEP);				break;			case IDM_CANVAS_REDRAW://				PanelResetPart(PANELRESET_CHANNEL);				CanvasReset();				CanvasClear();				CanvasReadPanelInfo(1);				CanvasUpdate(1);				CanvasPaintAll();				break;			}			break;		default:			return DefWindowProc(hwnd,uMess,wParam,lParam) ;	}	return 0L;}// Color#define CCR_FORE	 	RGB(0x00,0x00,0x00)#define CCR_BACK 		RGB(0x00,0xf0,0x00)#define CCR_DFORE	 	RGB(0x70,0x00,0x00)#define CCR_DBACK		RGB(0x00,0xf0,0x00)#define CCR_LOW		RGB(0x80,0xd0,0x00)#define CCR_MIDDLE	RGB(0xb0,0xb0,0x00)#define CCR_HIGH		RGB(0xe0,0x00,0x00)// 怓傪 m : n 偱崿偤傞static COLORREF HalfColorMN(COLORREF fc, COLORREF bc, int m, int n){	return fc*m/(m+n) + bc*n/(m+n);}static COLORREF HalfColor23(COLORREF fc, COLORREF bc){	return HalfColorMN(fc,bc,2,3);}static COLORREF HalfColor15(COLORREF fc, COLORREF bc){	return HalfColorMN(fc,bc,1,5);}#define CC_BACK				0#define CC_FORE				1#define CC_LOW					2#define CC_MIDDLE				3#define CC_HIGH				4#define CC_FORE_HALF			11#define CC_LOW_HALF			12#define CC_MIDDLE_HALF		13#define CC_HIGH_HALF			14#define CC_FORE_WEAKHALF	15#define CC_DBACK				21#define CC_DFORE				22#define CC_DFORE_HALF		23#define CC_DFORE_WEAKHALF	24static COLORREF CanvasColor(int c){  switch(c){  	case CC_BACK:			return CCR_BACK;  	case CC_FORE:			return CCR_FORE;  	case CC_FORE_HALF:			return HalfColor15(CCR_FORE,CCR_BACK);  	case CC_FORE_WEAKHALF:			return HalfColor23(CCR_FORE,CCR_BACK);  	case CC_DBACK:			return CCR_DBACK;  	case CC_DFORE:			return CCR_DFORE;  	case CC_DFORE_HALF:			return HalfColor15(CCR_DFORE,CCR_DBACK);  	case CC_DFORE_WEAKHALF:			return HalfColor23(CCR_DFORE,CCR_DBACK);  	case CC_LOW:			return CCR_LOW;  	case CC_MIDDLE:			return CCR_MIDDLE;  	case CC_HIGH:			return CCR_HIGH;  	case CC_LOW_HALF:			return HalfColor23(CCR_LOW,CCR_BACK);  	case CC_MIDDLE_HALF:			return HalfColor23(CCR_MIDDLE,CCR_BACK);  	case CC_HIGH_HALF:			return HalfColor23(CCR_HIGH,CCR_BACK);		default:			return CCR_BACK;	}}static int CanvasOK = 0;static void CanvasInit(HWND hwnd){	RECT rc;	GDI_LOCK(); // gdi_lock	Canvas.hwnd = hwnd;	Canvas.hParentWnd = GetParent(Canvas.hwnd);	GetClientRect(Canvas.hParentWnd,&rc);	MoveWindow(Canvas.hwnd,0,0,rc.right-rc.left,rc.bottom-rc.top,FALSE);	GetClientRect(Canvas.hwnd,(RECT *)&(Canvas.rcMe));	Canvas.hdc = GetDC(Canvas.hwnd);	Canvas.hbitmap = CreateCompatibleBitmap(Canvas.hdc,CANVAS_XMAX,CANVAS_YMAX);	Canvas.hmdc = CreateCompatibleDC(Canvas.hdc);	ReleaseDC(Canvas.hwnd,Canvas.hdc);	Canvas.hBitmapSleep = LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP_SLEEP));	Canvas.hgdiobj_hmdcprev = SelectObject(Canvas.hmdc,Canvas.hbitmap);	SetRect((RECT *)&(Canvas.rcSleep),0,0,96,64);	SetRect((RECT *)&(Canvas.rcMap),3,2+2,0,0);	SetRect((RECT *)&(Canvas.rcKeyboard),1,1,0,0);	SetRect((RECT *)&(Canvas.rcGSLCD),3,4,99,68);   Canvas.rcMapMap.left = Canvas.rcMap.left;   Canvas.rcMapMap.top = Canvas.rcMap.top;   Canvas.rcMapMap.right = Canvas.rcMapMap.left + 6*16 - 1;   Canvas.rcMapMap.bottom = Canvas.rcMapMap.top + 3*16 - 1;   Canvas.rcMapSub.left = Canvas.rcMapMap.left;   Canvas.rcMapSub.top = Canvas.rcMapMap.bottom + 2;   Canvas.rcMapSub.right = Canvas.rcMapSub.left + 6*16 - 1;   Canvas.rcMapSub.bottom = Canvas.rcMapSub.top +4+3+3+3+4 - 1;	Canvas.MapDelay = 1;	Canvas.MapResidual = 0;	Canvas.MapMode = (MainWndInfo.CanvasMode == CANVAS_MODE_MAP32)			? CMAP_MODE_32 : CMAP_MODE_16;	Canvas.MapBarMax = 16;	//	Canvas.CKNoteFrom = 24;	//   Canvas.CKNoteTo = 24 + 96;	Canvas.CKNoteFrom = 12;   Canvas.CKNoteTo = Canvas.CKNoteFrom + 96 + 3;	Canvas.CKCh = 16;	Canvas.CKPart = (MainWndInfo.CanvasMode == CANVAS_MODE_KBD_B) ? 2 : 1;	Canvas.UpdateAll = 0;	Canvas.Mode = (MainWndInfo.CanvasMode < CANVAS_MODE_GSLCD			|| MainWndInfo.CanvasMode > CANVAS_MODE_SLEEP)			? 1 : MainWndInfo.CanvasMode;	Canvas.PaintDone = 0;	GDI_UNLOCK(); // gdi_lock	CanvasReset();	CanvasOK = 1;}// Canvas Mapstatic void CanvasMapClear(void){	HPEN hPen;	HBRUSH hBrush;	HGDIOBJ hgdiobj_hpen, hgdiobj_hbrush;	if(!CanvasOK)   	return;	GDI_LOCK(); // gdi_lock	hPen = CreatePen(PS_SOLID,1,CanvasColor(CC_BACK));	hBrush = CreateSolidBrush(CanvasColor(CC_BACK));	hgdiobj_hpen = SelectObject(Canvas.hmdc, hPen);	hgdiobj_hbrush = SelectObject(Canvas.hmdc, hBrush);	Rectangle(Canvas.hmdc,   	Canvas.rcMe.left,Canvas.rcMe.top,Canvas.rcMe.right,Canvas.rcMe.bottom);	SelectObject(Canvas.hmdc, hgdiobj_hpen);	DeleteObject(hPen);	SelectObject(Canvas.hmdc, hgdiobj_hbrush);	DeleteObject(hBrush);	GDI_UNLOCK(); // gdi_lock	InvalidateRect(hCanvasWnd, NULL, FALSE);}static void CanvasMapReset(void){	int i,j,ch;	if(!CanvasOK)   	return;	switch(Canvas.MapMode){   case CMAP_MODE_32:		Canvas.MapCh = 32;#ifdef MAPBAR_LIKE_TMIDI		Canvas.MapBarWidth = 5;		Canvas.MapBarMax = 10+1;		Canvas.rcMapMap.bottom = Canvas.rcMapMap.top + 3*Canvas.MapBarMax*2 + 6 - 1;#else  		Canvas.MapBarWidth = 2;		Canvas.MapBarMax = 16;		Canvas.rcMapMap.bottom = Canvas.rcMapMap.top + 3*Canvas.MapBarMax - 1;#endif		break;   default:   case CMAP_MODE_16:		Canvas.MapCh = 16;		Canvas.MapBarWidth = 5;		Canvas.MapBarMax = 16;		Canvas.rcMapMap.bottom = Canvas.rcMapMap.top + 3*Canvas.MapBarMax - 1;		break;	}	for(i=0;i<Canvas.MapCh;i++){		for(j=0;j<Canvas.MapBarMax;j++){    		Canvas.MapMap[i][j] = CC_FORE_HALF;    		Canvas.MapMapOld[i][j] = -1;		}   	Canvas.MapBar[i] = -1;    	Canvas.MapBarOld[i] = -1;	}	for(ch=0;ch<Canvas.MapCh;ch++){		Canvas.MapPan[ch] = Canvas.MapPanOld[ch] = 2;		Canvas.MapSustain[ch] = Canvas.MapSustainOld[ch] = 0;		Canvas.MapExpression[ch] = Canvas.MapExpressionOld[ch] = 0;		Canvas.MapVolume[ch] = Canvas.MapVolumeOld[ch] = 0;		Canvas.MapPitchbend[ch] = Canvas.MapPitchbendOld[ch] = 0x2000;	}	Canvas.MapResidual = -1;	Canvas.MapUpdateFlag = 1;	Canvas.PaintDone = 0;}static void CanvasMapReadPanelInfo(int flag){	int ch,v;	if(!CanvasOK)		return;	if(!PInfoOK)    	return;   if(Canvas.UpdateAll)   	flag = 1;	if(!Panel->changed && !flag)   	return;	// Bar	Canvas.DrumChannel = drumchannels;	for(ch=0;ch<Canvas.MapCh;ch++){		Canvas.MapBarOld[ch] = Canvas.MapBar[ch];		if(Panel->v_flags[ch] == FLAG_NOTE_ON){#if 0  			v = Panel->ctotal[ch]/8;#else			v = (int) Panel->ctotal[ch] * Canvas.MapBarMax / 128;#endif		} else {      	v = 0;		}		if(v<0) v = 0; else if(v>Canvas.MapBarMax-1) v = Canvas.MapBarMax-1;		if(v != Canvas.MapBar[ch]){			// 抶墑	    	if(Canvas.MapDelay){   	  		int old = Canvas.MapBar[ch];				if(Canvas.MapBar[ch]<0)					Canvas.MapBar[ch] = v;				else					Canvas.MapBar[ch] = (old*10*1/3 + v*10*2/3)/10;				if(old == Canvas.MapBar[ch]){     				if(v>old)						Canvas.MapBar[ch] = old + 1;     				else if(v<old)						Canvas.MapBar[ch] = old - 1;      		}			} else				Canvas.MapBar[ch] = v;		}		if(Canvas.MapBarOld[ch] != Canvas.MapBar[ch])			Canvas.MapResidual = -1;	}	// Sub	if(Canvas.MapMode==CMAP_MODE_16){		Canvas.MapChChanged = 0;		for(ch=0;ch<Canvas.MapCh;ch++){			int changed = 0;			Canvas.MapPanOld[ch] = Canvas.MapPan[ch];			Canvas.MapSustainOld[ch] = Canvas.MapSustain[ch];			Canvas.MapExpressionOld[ch] = Canvas.MapExpression[ch];			Canvas.MapVolumeOld[ch] = Canvas.MapVolume[ch];			Canvas.MapPitchbendOld[ch] = Canvas.MapPitchbend[ch];			if(Panel->channel[ch].panning==NO_PANNING)         	Canvas.MapPan[ch] = -1;			else {				Canvas.MapPan[ch] = ( Panel->channel[ch].panning - 64 ) * 3 /128;//				Canvas.MapPan[ch] = ( 64 - Panel->channel[ch].panning ) * 3 /128;				Canvas.MapPan[ch] = SetValue(Canvas.MapPan[ch],-2,2) + 2;			}			if(Panel->channel[ch].sustain)				Canvas.MapSustain[ch] = 5;         else				Canvas.MapSustain[ch] = 0;			//Canvas.MapSustain[ch] = SetValue(Canvas.MapSustain[ch],0,10);#if 0			Canvas.MapExpression[ch] = (Panel->channel[ch].expression * 11) >>8;#else		    Canvas.MapExpression[ch] = (Panel->channel[ch].expression * 11) >>7;#endif			Canvas.MapExpression[ch] = SetValue(Canvas.MapExpression[ch],0,10);#if 0			Canvas.MapVolume[ch] = (Panel->channel[ch].volume * 11) >>8;#else			Canvas.MapVolume[ch] = (Panel->channel[ch].volume * 11) >>7;#endif			Canvas.MapVolume[ch] = SetValue(Canvas.MapVolume[ch],0,10);			Canvas.MapPitchbend[ch] = Panel->channel[ch].pitchbend;			if(Canvas.MapPanOld[ch]!=Canvas.MapPan[ch]) changed = 1;			if(Canvas.MapSustainOld[ch]!=Canvas.MapSustain[ch]) changed = 1;			if(Canvas.MapExpressionOld[ch]!=Canvas.MapExpression[ch]) changed = 1;			if(Canvas.MapVolumeOld[ch]!=Canvas.MapVolume[ch]) changed = 1;			if(Canvas.MapPitchbendOld[ch]!=Canvas.MapPitchbend[ch]) changed = 1;			if(changed)  		    	Canvas.MapChChanged |= 1 << ch;		}	}}static void CanvasMapDrawMapBar(int flag){	int i,ch;	if(!CanvasOK)		return;   if(Canvas.UpdateAll)   	flag = 1;	if(!Canvas.MapResidual && !flag)   	return;	Canvas.MapResidual = 0;	for(ch=0;ch<Canvas.MapCh;ch++){		int drumflag = IS_SET_CHANNELMASK(Canvas.DrumChannel,ch); 		char color1,color2,color3;		if(drumflag){			color1 = CC_DFORE;			color2 = CC_DFORE_WEAKHALF;         color3 = CC_DFORE_HALF;      } else {			color1 = CC_FORE;			color2 = CC_FORE_WEAKHALF;         color3 = CC_FORE_HALF;      }		for(i=0;i<Canvas.MapBarMax;i++){			int y = Canvas.MapBarMax-1-i;			Canvas.MapMapOld[ch][y] = Canvas.MapMap[ch][y];			if(i<=Canvas.MapBar[ch]){				Canvas.MapMap[ch][y] = color1;				Canvas.MapResidual = 1;#if 1		// 巆憸			} else if(i<=Canvas.MapBarOld[ch]){				Canvas.MapMap[ch][y] = color2;				Canvas.MapResidual = 1;#endif    		} else {				Canvas.MapMap[ch][y] = color3;			}		}	}	if(Canvas.MapResidual==0)		Canvas.MapResidual = -1;}// #define CMAP_ALL_UPDATEstatic void CanvasMapUpdate(int flag){	RECT rc;	int i,j;	int change_flag = 0;	if(!CanvasOK)   	return;	CanvasMapDrawMapBar(flag);   if(Canvas.UpdateAll)   	flag = 1;	if(PInfoOK && Canvas.MapMode==CMAP_MODE_16){   if(flag || Panel->changed){		int ch;		GDI_LOCK();		for(ch=0;ch<Canvas.MapCh;ch++){			int x,y;         COLORREF color;			COLORREF colorFG, colorBG;			int drumflag = IS_SET_CHANNELMASK(Canvas.DrumChannel,ch);			if(!flag && !(Canvas.MapChChanged & (1<<ch)))         	continue;			if(drumflag){				colorFG = CanvasColor(CC_DFORE);				colorBG = CanvasColor(CC_DFORE_HALF);      	} else {				colorFG = CanvasColor(CC_FORE);				colorBG = CanvasColor(CC_FORE_HALF);      	}         rc.left = Canvas.rcMapSub.left + (5 + 1) * ch;         rc.right = rc.left + 5 - 1;			// PAN         rc.top = Canvas.rcMapSub.top;         rc.bottom = rc.top + 3 - 1;				for(x=rc.left;x<=rc.right;x++){				for(y=rc.top;y<=rc.bottom;y++)        			SetPixelV(Canvas.hmdc,x,y,colorBG);				}			if(Canvas.MapPan[ch]>=0){				x = rc.left + Canvas.MapPan[ch];				for(y=rc.top;y<=rc.bottom;y++)     				SetPixelV(Canvas.hmdc,x,y,colorFG);			}         // SUSTAIN         rc.top = rc.bottom + 2;         rc.bottom = rc.top + 2 - 1;				if(Canvas.MapSustain[ch]){					for(x=rc.left;x<=rc.right;x++){					for(y=rc.top;y<=rc.bottom;y++)        				SetPixelV(Canvas.hmdc,x,y,colorFG);					}				} else {					for(x=rc.left;x<=rc.right;x++){					for(y=rc.top;y<=rc.bottom;y++)        				SetPixelV(Canvas.hmdc,x,y,colorBG);					}         // EXPRESSION         rc.top = rc.bottom + 2;         rc.bottom = rc.top + 2 - 1;			for(i=1;i<=10;i++){         		if(i <= Canvas.MapExpression[ch])            	color = colorFG;            else            	color = colorBG;			x = rc.left + (i-1)/2;			y = rc.top + (i+1)%2;  				SetPixelV(Canvas.hmdc,x,y,color);			}         // VOLUME         rc.top = rc.bottom + 2;         rc.bottom = rc.top + 2 - 1;			for(i=1;i<=10;i++){        		if(i <= Canvas.MapVolume[ch])            	color = colorFG;            else            	color = colorBG;            x = rc.left + (i-1)/2;				y = rc.top + (i+1)%2;  				SetPixelV(Canvas.hmdc,x,y,color);			}         // PITCH_BEND         rc.top = rc.bottom + 2;         rc.bottom = rc.top + 3 - 1;					for(x=rc.left;x<=rc.right;x++){				for(y=rc.top;y<=rc.bottom;y++)        			SetPixelV(Canvas.hmdc,x,y,colorBG);					}         if(Canvas.MapPitchbend[ch]==-2){         	y = rc.top + 1;				for(x=rc.left;x<=rc.right;x++)  					SetPixelV(Canvas.hmdc,x,y,colorFG);				y++;				for(x=rc.left;x<=rc.right;x++)  					SetPixelV(Canvas.hmdc,x,y,colorFG);			} else if(Canvas.MapPitchbend[ch]>0x2000){         	y = rc.top;				for(x=rc.left;x<=rc.left;x++)  					SetPixelV(Canvas.hmdc,x,y,colorFG);				y++;				for(x=rc.left;x<=rc.left+2;x++)  					SetPixelV(Canvas.hmdc,x,y,colorFG);				y++;				for(x=rc.left;x<=rc.left+4;x++)		 			SetPixelV(Canvas.hmdc,x,y,colorFG);			} else if(Canvas.MapPitchbend[ch]<0x2000){         	y = rc.top;				for(x=rc.right;x<=rc.right;x++)  					SetPixelV(Canvas.hmdc,x,y,colorFG);

⌨️ 快捷键说明

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