📄 w32g_subwin3.c
字号:
if (! get_ch_rc((int) e->v1, &rc, &w32g_tracer_wnd.rc_temper_type)) tracer_temper_type_draw(&rc, (int) e->v1, (int8) e->v2, TRUE); break; case CTLE_LYRIC: break; case CTLE_REFRESH: break; case CTLE_RESET: TracerWndReset2();#if 0 if ( w32g_tracer_wnd.play_system_mode != play_system_mode ) {#endif get_head_rc ( &rc, &w32g_tracer_wnd.rc_gm ); tracer_gm_draw ( &rc, play_system_mode == GM_SYSTEM_MODE ? 1 : 0, TRUE ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_gs ); tracer_gs_draw ( &rc, play_system_mode == GS_SYSTEM_MODE ? 1 : 0, TRUE ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_xg ); tracer_xg_draw ( &rc, play_system_mode == XG_SYSTEM_MODE ? 1 : 0, TRUE );#if 0 }#endif w32g_tracer_wnd.play_system_mode = play_system_mode; break; case CTLE_SPEANA: break; case CTLE_PAUSE: break; case CTLE_MAXVOICES:#if 0 w32g_tracer_wnd.maxvoices = (int)e->v1;#endif break; case CTLE_GSLCD: break; }}static int get_head_rc ( RECT *rc, RECT *rc_base ){ rc->top = w32g_tracer_wnd.rc_head.top + rc_base->top; rc->bottom = w32g_tracer_wnd.rc_head.top + rc_base->bottom; rc->left = w32g_tracer_wnd.rc_head.left + rc_base->left; rc->right = w32g_tracer_wnd.rc_head.left + rc_base->right; return 0;}static int get_ch_rc ( int ch, RECT *rc, RECT *rc_base ){ switch (TracerWndInfo.mode) { default: case TWI_MODE_1_32CH: break; case TWI_MODE_1_16CH: if ( ch >= 16 ) return -1; break; case TWI_MODE_17_32CH: if ( ch < 16 ) return -1; ch = ch - 16; break; } rc->top = w32g_tracer_wnd.rc_all_channels.top + rc_base->top + ( w32g_tracer_wnd.ch_height + w32g_tracer_wnd.ch_space ) * ( ch - 0 ); rc->bottom = w32g_tracer_wnd.rc_all_channels.top + rc_base->bottom + ( w32g_tracer_wnd.ch_height + w32g_tracer_wnd.ch_space ) * ( ch - 0 ); rc->left = w32g_tracer_wnd.rc_all_channels.left + rc_base->left; rc->right = w32g_tracer_wnd.rc_all_channels.left + rc_base->right; return 0;}static int notes_view_draw ( RECT *lprc, int note, int vel, int back_draw, int lockflag ){ HDC hdc = w32g_tracer_wnd.hmdc; RECT rc1; int note1, left, top; if (!w32g_tracer_wnd.active) return 0; note1 = note / 12; left = rc1.left = lprc->left + 6 * 7 * note1 + 0; top = rc1.top = lprc->top + 0; rc1.right = lprc->left + 6 * 7 * (note1 + 1) - 0; rc1.bottom = lprc->top + 19 + 1; if ( back_draw ) { if ( lockflag ) TRACER_LOCK (); BitBlt ( hdc, rc1.left, rc1.top, rc1.right - rc1.left, rc1.bottom - rc1.top, tracer_bmp.hmdc, tracer_bmp.rc_notes.left, tracer_bmp.rc_notes.top, SRCCOPY ); if ( lockflag ) TRACER_UNLOCK (); InvalidateRect ( w32g_tracer_wnd.hwnd, &rc1, FALSE ); } note = note % 12; switch(note) { // white keys case 0: left = 0; rc1.right = rc1.left + 7; break; case 2: rc1.left += left = 6; rc1.right = rc1.left + 7; break; case 4: rc1.left += left = 12; rc1.right = rc1.left + 7; break; case 5: rc1.left += left = 18; rc1.right = rc1.left + 7; break; case 7: rc1.left += left = 24; rc1.right = rc1.left + 7; break; case 9: rc1.left += left = 30; rc1.right = rc1.left + 7; break; case 11: rc1.left += left = 36; rc1.right = rc1.left + 6; break; // black keys case 1: rc1.left += left = 4; rc1.right = rc1.left + 5; break; case 3: rc1.left += left = 10; rc1.right = rc1.left + 5; break; case 6: rc1.left += left = 22; rc1.right = rc1.left + 5; break; case 8: rc1.left += left = 28; rc1.right = rc1.left + 5; break; case 10: rc1.left += left = 34; rc1.right = rc1.left + 5; break; default: break; } if ( lockflag ) TRACER_LOCK (); if ( vel >= 0 ) { BitBlt ( hdc, rc1.left, rc1.top, rc1.right - rc1.left, rc1.bottom - rc1.top, tracer_bmp.hmdc, tracer_bmp.rc_notes_mask[note].left + left, tracer_bmp.rc_notes_mask[note].top, SRCPAINT ); BitBlt ( hdc, rc1.left, rc1.top, rc1.right - rc1.left, rc1.bottom - rc1.top, tracer_bmp.hmdc, tracer_bmp.rc_note_on[note].left + left, tracer_bmp.rc_note_on[note].top, SRCAND ); } else if ( vel == TRACER_VOICE_SUSTAINED ) { BitBlt ( hdc, rc1.left, rc1.top, rc1.right - rc1.left, rc1.bottom - rc1.top, tracer_bmp.hmdc, tracer_bmp.rc_notes_mask[note].left + left, tracer_bmp.rc_notes_mask[note].top, SRCPAINT ); BitBlt ( hdc, rc1.left, rc1.top, rc1.right - rc1.left, rc1.bottom - rc1.top, tracer_bmp.hmdc, tracer_bmp.rc_note_sustain[note].left + left, tracer_bmp.rc_note_sustain[note].top, SRCAND ); } else { BitBlt ( hdc, rc1.left, rc1.top, rc1.right - rc1.left, rc1.bottom - rc1.top, tracer_bmp.hmdc, tracer_bmp.rc_notes_mask[note].left + left, tracer_bmp.rc_notes_mask[note].top, SRCPAINT ); BitBlt ( hdc, rc1.left, rc1.top, rc1.right - rc1.left, rc1.bottom - rc1.top, tracer_bmp.hmdc, tracer_bmp.rc_note[note].left + left, tracer_bmp.rc_note[note].top, SRCAND ); } if ( lockflag ) TRACER_UNLOCK (); InvalidateRect ( w32g_tracer_wnd.hwnd, &rc1, FALSE ); return 0;}static int tracer_ch_number_draw(int ch, int mute, int lockflag){ RECT rc; char buff[3]; if (mute != CTL_STATUS_UPDATE) { if (((IS_SET_CHANNELMASK( w32g_tracer_wnd.channel_mute, ch)) ? 1 : 0) == mute) return 0; if (mute) SET_CHANNELMASK(w32g_tracer_wnd.channel_mute, ch); else UNSET_CHANNELMASK(w32g_tracer_wnd.channel_mute, ch); } else mute = (IS_SET_CHANNELMASK( w32g_tracer_wnd.channel_mute, ch)) ? 1 : 0; if (IS_SET_CHANNELMASK(w32g_tracer_wnd.quietchannels, ch)) return 0; if (get_ch_rc(ch, &rc, &w32g_tracer_wnd.rc_channel_top) == 0) { sprintf(buff, "%02d", ch + 1); cheap_string_view_draw(&rc, buff, C_TEXT_FORE, (mute) ? C_TEXT_BACK_DARK : C_TEXT_BACK, CSV_CENTER, lockflag); } return 0;}static int tracer_ch_program_draw ( int ch, int bank, int program, char *instrument, int mapID, int lockflag ){ RECT rc; char buff[64]; char *p_buff; if ( bank >= 0 ) { w32g_tracer_wnd.bank[ch] = bank; } else { if ( ISDRUMCHANNEL(ch) ) bank = w32g_tracer_wnd.bank[ch] = 128; else bank = w32g_tracer_wnd.bank[ch] = channel[ch].bank; } if ( bank == 128 ) { if ( get_ch_rc ( ch, &rc, &w32g_tracer_wnd.rc_bank ) == 0 ) { sprintf ( buff, "drum"); cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, lockflag ); } } else { if ( get_ch_rc ( ch, &rc, &w32g_tracer_wnd.rc_bank ) == 0 ) { sprintf ( buff, "%03d", bank ); cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, lockflag ); } } if ( program >= 0 ) { w32g_tracer_wnd.program[ch] = program; } else { program = w32g_tracer_wnd.program[ch] = channel[ch].program; } if ( get_ch_rc ( ch, &rc, &w32g_tracer_wnd.rc_program ) == 0 ) { sprintf ( buff, "%03d", program ); cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, lockflag ); } if ( instrument == NULL ) {instrument = " ----";} strncpy ( w32g_tracer_wnd.instrument[ch], (char *)instrument, 250 ); w32g_tracer_wnd.instrument[ch][250] = '\0'; if ( w32g_tracer_wnd.instrument[ch][0] != ' ' ) { char buff[255]; strncpy ( buff, w32g_tracer_wnd.instrument[ch], 250 ); buff[250] = '\0'; w32g_tracer_wnd.instrument[ch][0] = ' '; w32g_tracer_wnd.instrument[ch][1] = '\0'; strcat ( w32g_tracer_wnd.instrument[ch], buff ); } if ( get_ch_rc ( ch, &rc, &w32g_tracer_wnd.rc_instrument ) == 0 ) cheap_string_view_draw ( &rc, w32g_tracer_wnd.instrument[ch], C_TEXT_FORE, C_TEXT_BACK, CSV_LEFT, lockflag ); if ( mapID >= 0 ) { w32g_tracer_wnd.mapID[ch] = mapID; } else { mapID = w32g_tracer_wnd.mapID[ch] = channel[ch].mapID; } switch ( mapID ) { default: case INST_NO_MAP: case NUM_INST_MAP: p_buff = "----"; break; case SC_55_TONE_MAP: p_buff = "55 T"; break; case SC_55_DRUM_MAP: p_buff = "55 D"; break; case SC_88_TONE_MAP: p_buff = "88 T"; break; case SC_88_DRUM_MAP: p_buff = "88 D"; break; case SC_88PRO_TONE_MAP: p_buff = "88Pro T"; break; case SC_88PRO_DRUM_MAP: p_buff = "88Pro D"; break; case SC_8850_TONE_MAP: p_buff = "8850 T"; break; case SC_8850_DRUM_MAP: p_buff = "8850 D"; break; case XG_NORMAL_MAP: p_buff = "XG"; break; case XG_SFX64_MAP: p_buff = "XG SFX64"; break; case XG_SFX126_MAP: p_buff = "XG SFX126"; break; case XG_DRUM_MAP: p_buff = "XG D"; break; case GM2_TONE_MAP: p_buff = "GM2 T"; break; case GM2_DRUM_MAP: p_buff = "GM2 D"; } if ( get_ch_rc ( ch, &rc, &w32g_tracer_wnd.rc_inst_map ) == 0 ) cheap_string_view_draw ( &rc, p_buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, lockflag ); return 0;}static int effect_view_border_draw ( RECT *lprc, int lockflag){ HDC hdc; COLORREF base = RGB(128, 128, 128); HPEN hPen1 = NULL; HPEN hPen3 = NULL; HPEN hOldPen = NULL; if ( !w32g_tracer_wnd.active ) return 0; hdc = w32g_tracer_wnd.hmdc; hPen1 = CreatePen(PS_SOLID, 1, base); hPen3 = CreatePen(PS_SOLID, 1, base); if ( lockflag ) TRACER_LOCK (); hOldPen= (HPEN)SelectObject(hdc,GetStockObject(NULL_PEN)); // 塃慄 SelectObject(hdc, hPen3); MoveToEx(hdc, lprc->right, lprc->top - 1, NULL); LineTo(hdc, lprc->right, lprc->bottom + 1); // 壓慄 SelectObject(hdc, hPen1); MoveToEx(hdc, lprc->left - 1, lprc->bottom, NULL); LineTo(hdc, lprc->right + 1, lprc->bottom); SelectObject(hdc, hOldPen); if ( lockflag ) TRACER_UNLOCK (); DeleteObject (hPen1); DeleteObject (hPen3); return 0;}static int tracer_velocity_draw ( RECT *lprc, int vol, int max, int lockflag ){ return tracer_velocity_draw_ex ( lprc, vol, -1, max, lockflag );}static int tracer_velocity_draw_ex ( RECT *lprc, int vol, int vol_old, int max, int lockflag ){ HDC hdc; const int view_max = 30, div = 17; RECT rc; if ( !w32g_tracer_wnd.active ) return 0; hdc = w32g_tracer_wnd.hmdc; vol /= div; if ( vol_old < 0 ) vol_old = max; vol_old /= div; if(vol >= view_max) {vol = view_max;} if(vol_old >= view_max) {vol_old = view_max;} if ( lockflag ) TRACER_LOCK (); // 昁梫側偩偗儀儘僔僥傿僶乕偺攚宨傪昤夋// BitBlt ( hdc, lprc->left + vol, lprc->top, lprc->right - lprc->left - vol, lprc->bottom - lprc->top, BitBlt ( hdc, lprc->left + vol, lprc->top, vol_old - vol, lprc->bottom - lprc->top, tracer_bmp.hmdc, tracer_bmp.rc_velocity[0].left + vol, tracer_bmp.rc_velocity[0].top, SRCCOPY ); // 昁梫側偩偗儀儘僔僥傿僶乕傪昤夋 BitBlt ( hdc, lprc->left, lprc->top, vol, lprc->bottom - lprc->top, tracer_bmp.hmdc, tracer_bmp.rc_velocity[0].left, tracer_bmp.rc_velocity[0].top + 19 + 1, SRCCOPY ); SetRect ( &rc, lprc->left, lprc->top, lprc->left + (( vol_old > vol ) ? vol_old : vol), lprc->bottom); effect_view_border_draw (lprc, lockflag); InvalidateRect ( w32g_tracer_wnd.hwnd, &rc, FALSE ); if ( lockflag ) TRACER_UNLOCK (); return 0;}static int tracer_volume_draw ( RECT *lprc, int vol, int max, int lockflag ){ HDC hdc; const int view_max = 20, div = 7; if ( !w32g_tracer_wnd.active ) return 0; hdc = w32g_tracer_wnd.hmdc; vol /= div; if(vol >= view_max) {vol = view_max;} if ( lockflag ) TRACER_LOCK (); // 昁梫側偩偗攚宨傪昤夋 BitBlt ( hdc, lprc->left + vol, lprc->top, lprc->right - lprc->left - vol, lprc->bottom - lprc->top, tracer_bmp.hmdc, tracer_bmp.rc_volume.left, tracer_bmp.rc_volume.top, SRCCOPY ); // 昁梫側偩偗昤夋 BitBlt ( hdc, lprc->left, lprc->top, vol, lprc->bottom - lprc->top, tracer_bmp.hmdc, tracer_bmp.rc_volume.left, tracer_bmp.rc_volume.top + 9 + 1, SRCCOPY );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -