📄 w32g_subwin3.c
字号:
switch (type) { default: case CVV_TYPE_LEFT: rc1.left = rc1.right; rc1.right = lprc->right; break; case CVV_TYPE_RIGHT: rc1.left = lprc->left; rc1.right = rc1.left; break; case CVV_TYPE_TOP: rc1.top = rc1.bottom; rc1.bottom = lprc->bottom; break; case CVV_TYPE_BOTTOM: rc1.top = lprc->top; rc1.bottom = rc1.top; break; } if ( lockflag ) TRACER_LOCK (); FillRect(hdc, &rc1, hBack); if ( lockflag ) TRACER_UNLOCK (); InvalidateRect ( w32g_tracer_wnd.hwnd, &rc1, FALSE ); DeleteObject ( (HGDIOBJ) hFore ); DeleteObject ( (HGDIOBJ) hBack ); return 0;}#endifstatic int string_view_border_draw ( RECT *lprc, COLORREF back, int lockflag){ HDC hdc; HPEN hPen1 = NULL; HPEN hPen2 = NULL; HPEN hPen3 = NULL; HPEN hPen4 = NULL; HPEN hOldPen = NULL; if ( !w32g_tracer_wnd.active ) return 0; hdc = w32g_tracer_wnd.hmdc; hPen1 = CreatePen(PS_SOLID, 1, RGB(GetRValue(back) + 32, GetGValue(back) + 32, GetBValue(back) + 32)); hPen2 = CreatePen(PS_SOLID, 1, RGB(GetRValue(back) - 16, GetGValue(back) - 16, GetBValue(back) - 16)); hPen3 = CreatePen(PS_SOLID, 1, RGB(GetRValue(back) + 16, GetGValue(back) + 16, GetBValue(back) + 16)); hPen4 = CreatePen(PS_SOLID, 1, RGB(GetRValue(back) - 32, GetGValue(back) - 32, GetBValue(back) - 32)); if ( lockflag ) TRACER_LOCK (); hOldPen= (HPEN)SelectObject(hdc,GetStockObject(NULL_PEN)); // 忋慄 SelectObject(hdc, hPen1); MoveToEx(hdc, lprc->left, lprc->top, NULL); LineTo(hdc, lprc->right, lprc->top); // 嵍慄 SelectObject(hdc, hPen3); MoveToEx(hdc, lprc->left, lprc->top, NULL); LineTo(hdc, lprc->left, lprc->bottom); // 壓慄 SelectObject(hdc, hPen2); MoveToEx(hdc, lprc->left, lprc->bottom - 1, NULL); LineTo(hdc, lprc->right, lprc->bottom - 1); // 塃慄 SelectObject(hdc, hPen4); MoveToEx(hdc, lprc->right - 1, lprc->top, NULL); LineTo(hdc, lprc->right - 1, lprc->bottom); SelectObject(hdc, hOldPen); if ( lockflag ) TRACER_UNLOCK (); DeleteObject (hPen1); DeleteObject (hPen2); DeleteObject (hPen3); DeleteObject (hPen4); return 0;}static int cheap_string_view_draw_font ( RECT *lprc, char *str, COLORREF fore, COLORREF back, int mode, HFONT hFont, int lockflag ){ HDC hdc; COLORREF old_fore, old_back; HGDIOBJ hgdiobj; UINT old_mode; int left, top, bottom; if ( !w32g_tracer_wnd.active ) return 0; hdc = w32g_tracer_wnd.hmdc; if ( lockflag ) TRACER_LOCK (); if ( mode == CSV_CENTER ) { old_mode = SetTextAlign(hdc, TA_CENTER | TA_BOTTOM ); left = ( lprc->left + lprc->right ) / 2; top = lprc->top; bottom = lprc->bottom; } else if ( mode == CSV_LEFT ) { old_mode = SetTextAlign(hdc, TA_LEFT | TA_BOTTOM ); left = lprc->left; top = lprc->top; bottom = lprc->bottom; } else if ( mode == CSV_RIGHT ) { old_mode = SetTextAlign(hdc, TA_RIGHT | TA_BOTTOM ); left = lprc->right; top = lprc->top; bottom = lprc->bottom; } old_fore = SetTextColor ( hdc, fore ); old_back = SetBkColor ( hdc, back ); hgdiobj = SelectObject( hdc, hFont );// ExtTextOut ( hdc, left, top, ETO_CLIPPED | ETO_OPAQUE, lprc, str, strlen(str), NULL); ExtTextOut ( hdc, left, bottom - 2, ETO_CLIPPED | ETO_OPAQUE, lprc, str, strlen(str), NULL); SetTextColor ( hdc, old_fore ); SetBkColor ( hdc, old_back ); SelectObject( hdc, hgdiobj ); SetTextAlign(hdc, old_mode ); string_view_border_draw(lprc, back, FALSE); if ( lockflag ) TRACER_UNLOCK (); InvalidateRect ( w32g_tracer_wnd.hwnd, lprc, FALSE ); return 0;}static int cheap_string_view_draw ( RECT *lprc, char *str, COLORREF fore, COLORREF back, int mode, int lockflag ){ return cheap_string_view_draw_font ( lprc, str, fore, back, mode, w32g_tracer_wnd.hFontCommon, lockflag );}static int cheap_half_string_view_draw ( RECT *lprc, char *str, COLORREF fore, COLORREF back, int mode, int lockflag ){ HDC hdc; COLORREF old_fore, old_back; HGDIOBJ hgdiobj; UINT old_mode; HFONT hFont = w32g_tracer_wnd.hFontHalf; int left, top; if ( !w32g_tracer_wnd.active ) return 0; hdc = w32g_tracer_wnd.hmdc; if ( lockflag ) TRACER_LOCK (); if ( mode == CSV_CENTER ) { old_mode = SetTextAlign(hdc, TA_CENTER ); left = ( lprc->left + lprc->right ) / 2; top = lprc->top; } else if ( mode == CSV_LEFT ) { old_mode = SetTextAlign(hdc, TA_LEFT ); left = lprc->left; top = lprc->top; } else if ( mode == CSV_RIGHT ) { old_mode = SetTextAlign(hdc, TA_RIGHT ); left = lprc->right; top = lprc->top; } old_fore = SetTextColor ( hdc, fore ); old_back = SetBkColor ( hdc, back ); hgdiobj = SelectObject( hdc, hFont ); ExtTextOut ( hdc, left, top-3, ETO_CLIPPED | ETO_OPAQUE, lprc, str, strlen(str), NULL); SetTextColor ( hdc, old_fore ); SetBkColor ( hdc, old_back ); SelectObject( hdc, hgdiobj ); SetTextAlign(hdc, old_mode ); string_view_border_draw(lprc, back, FALSE); if ( lockflag ) TRACER_UNLOCK (); InvalidateRect ( w32g_tracer_wnd.hwnd, lprc, FALSE ); return 0;}void TracerWndPaintAll(int lockflag){ int i, j; char buff[1024]; RECT rc; if ( !w32g_tracer_wnd.active ) return; if ( lockflag ) TRACER_LOCK(); // 僞僀僩儖 strcpy ( buff, "ch" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_channel_top ); cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, " instrument " ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_instrument ); cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, " map " ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_inst_map ); cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "bank" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_bank ); cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "prog" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_program ); cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "vel" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_velocity ); cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "vo" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_volume ); cheap_half_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "ex" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_expression ); cheap_half_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "pa" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_panning ); cheap_half_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "su" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_sustain ); cheap_half_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "pb" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_pitch_bend ); cheap_half_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "mw" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_mod_wheel ); cheap_half_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "ch" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_chorus_effect ); cheap_half_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); strcpy ( buff, "re" ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_reverb_effect ); cheap_half_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); get_head_rc(&rc, &w32g_tracer_wnd.rc_temper_keysig); tracer_temper_keysig_draw(&rc, CTL_STATUS_UPDATE, CTL_STATUS_UPDATE, FALSE); get_head_rc ( &rc, &w32g_tracer_wnd.rc_gm ); tracer_gm_draw ( &rc, w32g_tracer_wnd.play_system_mode == GM_SYSTEM_MODE ? 1 : 0, FALSE ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_gs ); tracer_gs_draw ( &rc, w32g_tracer_wnd.play_system_mode == GS_SYSTEM_MODE ? 1 : 0, FALSE ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_xg ); tracer_xg_draw ( &rc, w32g_tracer_wnd.play_system_mode == XG_SYSTEM_MODE ? 1 : 0, FALSE ); strcpy ( buff, w32g_tracer_wnd.titlename ); get_head_rc ( &rc, &w32g_tracer_wnd.rc_head_rest ); cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_LEFT, FALSE ); // 奺僠儍儞僱儖 for ( i = 0; i < TRACER_CHANNELS ; i ++ ) { if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_channel_top ) == 0 ) { sprintf ( buff, "%02d", i + 1); if ( IS_SET_CHANNELMASK ( w32g_tracer_wnd.quietchannels, i ) ) cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK_VERY_DARK, CSV_CENTER, FALSE ); else { if ( IS_SET_CHANNELMASK ( w32g_tracer_wnd.channel_mute, i ) ) cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK_DARK, CSV_CENTER, FALSE ); else cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, FALSE ); } } tracer_ch_program_draw ( i, w32g_tracer_wnd.bank[i], w32g_tracer_wnd.program[i], w32g_tracer_wnd.instrument[i], w32g_tracer_wnd.mapID[i], FALSE ); if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_velocity ) == 0 ) tracer_velocity_draw ( &rc, w32g_tracer_wnd.velocity[i], VEL_MAX, FALSE ); if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_volume ) == 0 ) tracer_volume_draw ( &rc, w32g_tracer_wnd.volume[i], 128, FALSE ); if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_expression ) == 0 ) tracer_expression_draw ( &rc, w32g_tracer_wnd.expression[i], 128, FALSE ); if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_panning ) == 0 ) tracer_pan_draw ( &rc, w32g_tracer_wnd.panning[i], 128, FALSE ); if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_sustain ) == 0 ) tracer_sustain_draw ( &rc, w32g_tracer_wnd.sustain[i], FALSE ); if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_pitch_bend ) == 0 ) tracer_pitch_bend_draw ( &rc, w32g_tracer_wnd.pitch_bend[i], 0x4000, FALSE ); if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_mod_wheel ) == 0 ) tracer_mod_wheel_draw ( &rc, w32g_tracer_wnd.mod_wheel[i], 32, FALSE ); if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_chorus_effect ) == 0 ) tracer_chorus_effect_draw ( &rc, w32g_tracer_wnd.chorus_effect[i], 128, FALSE ); if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_reverb_effect ) == 0 ) tracer_reverb_effect_draw ( &rc, w32g_tracer_wnd.reverb_effect[i], 128, FALSE ); if (! get_ch_rc(i, &rc, &w32g_tracer_wnd.rc_temper_type)) tracer_temper_type_draw(&rc, i, CTL_STATUS_UPDATE, FALSE); for ( j = 0; j < 128; j ++ ) { if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_notes ) == 0 ) notes_view_draw ( &rc, j, w32g_tracer_wnd.notes[i][j], TRUE, FALSE ); } } // ... if ( lockflag ) TRACER_UNLOCK(); InvalidateRect( w32g_tracer_wnd.hwnd,NULL, FALSE );}// GUI 僗儗僢僪偐傜偺傒屇傋傞void TracerWndPaintDo(int flag){ RECT rc; if ( !w32g_tracer_wnd.active ) return; if ( flag ) InvalidateRect( w32g_tracer_wnd.hwnd,NULL, FALSE ); if ( GetUpdateRect(w32g_tracer_wnd.hwnd, &rc, FALSE) ) { PAINTSTRUCT ps; if ( GDI_LOCK_EX(0) == 0 ) { TRACER_LOCK(); w32g_tracer_wnd.hdc = BeginPaint(w32g_tracer_wnd.hwnd, &ps); BitBlt(w32g_tracer_wnd.hdc,rc.left,rc.top,rc.right,rc.bottom,w32g_tracer_wnd.hmdc,rc.left,rc.top,SRCCOPY); EndPaint(w32g_tracer_wnd.hwnd, &ps); GDI_UNLOCK(); TRACER_UNLOCK(); } else { InvalidateRect ( w32g_tracer_wnd.hwnd, &rc, FALSE ); } }}BOOL CALLBACKTracerCanvasWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam){ switch (uMess) { case WM_CREATE: break; case WM_PAINT: TracerWndPaintDo(FALSE); return 0; case WM_DROPFILES: SendMessage(hMainWnd,WM_DROPFILES,wParam,lParam); return 0; case WM_RBUTTONDBLCLK: case WM_LBUTTONDBLCLK: { int i, mode; int xPos = LOWORD(lParam); int yPos = HIWORD(lParam); RECT rc; int flag = FALSE; get_head_rc ( &rc, &w32g_tracer_wnd.rc_channel_top ); if ( rc.left <= xPos && xPos <= rc.right && rc.top <= yPos && yPos <= rc.bottom ) { char buff[64]; for ( i = 0; i < TRACER_CHANNELS; i ++ ) { if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_channel_top ) == 0 ) { sprintf ( buff, "%02d", i + 1 ); if ( uMess == WM_RBUTTONDBLCLK ) UNSET_CHANNELMASK ( channel_mute, i ); else TOGGLE_CHANNELMASK ( channel_mute, i ); if ( IS_SET_CHANNELMASK ( quietchannels, i ) ) cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK_VERY_DARK, CSV_CENTER, TRUE ); else { flag = TRUE; if ( IS_SET_CHANNELMASK ( channel_mute, i ) ) cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK_DARK, CSV_CENTER, TRUE ); else cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, TRUE ); } } } if ( flag ) w32g_send_rc ( RC_SYNC_RESTART, 0 ); w32g_tracer_wnd.channel_mute = channel_mute; w32g_tracer_wnd.quietchannels = quietchannels; flag = TRUE; } if ( uMess == WM_RBUTTONDBLCLK ) break; if ( flag ) break; for ( i = 0; i < TRACER_CHANNELS; i ++ ) { if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_channel_top ) == 0 ) { if ( rc.left <= xPos && xPos <= rc.right && rc.top <= yPos && yPos <= rc.bottom ) { char buff[64]; sprintf ( buff, "%02d", i + 1 ); TOGGLE_CHANNELMASK ( channel_mute, i ); if ( IS_SET_CHANNELMASK ( quietchannels, i ) ) cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK_VERY_DARK, CSV_CENTER, TRUE ); else { flag = TRUE; if ( IS_SET_CHANNELMASK ( channel_mute, i ) ) cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK_DARK, CSV_CENTER, TRUE ); else cheap_string_view_draw ( &rc, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, TRUE ); } w32g_tracer_wn
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -