📄 w32g_i.c
字号:
break; } LoadIniFile(sp_temp,st_temp); PrefWndCreate(hMainWnd); break; case IDM_MWDEBUG:#ifdef W32GUI_DEBUG if(IsWindowVisible(hDebugWnd)) ShowWindow(hDebugWnd,SW_HIDE); else ShowWindow(hDebugWnd,SW_SHOW);#endif break; case IDM_MHTOPIC: MessageBox(hwnd, "Not Supported.","Warning!",MB_OK); break; case IDM_MHHELP: MessageBox(hwnd, "Not Supported.","Warning!",MB_OK); break; case IDM_MHONLINEHELP: if (PlayerLanguage == LANGUAGE_JAPANESE) { ShellExecute(HWND_DESKTOP, NULL, "http://timidity-docs.sourceforge.jp/", NULL, NULL, SW_SHOWNORMAL); } else { ShellExecute(HWND_DESKTOP, NULL, "http://timidity.sourceforge.net/index.html.en", NULL, NULL, SW_SHOWNORMAL); } break; case IDM_MHBTS: if (PlayerLanguage == LANGUAGE_JAPANESE) { ShellExecute(HWND_DESKTOP, NULL, "http://timidity-docs.sourceforge.jp/cgi-bin/kagemai-ja/guest.cgi", NULL, NULL, SW_SHOWNORMAL); } else { ShellExecute(HWND_DESKTOP, NULL, "http://timidity-docs.sourceforge.jp/cgi-bin/kagemai-en/guest.cgi", NULL, NULL, SW_SHOWNORMAL); } break; case IDM_MHONLINEHELPCFG: ShellExecute(HWND_DESKTOP, NULL, "http://timidity-docs.sourceforge.jp/cgi-bin/hiki/hiki.cgi?%28ja%29timidity.cfg", NULL, NULL, SW_SHOWNORMAL); break; case IDM_MHVERSION: VersionWnd(hwnd); break; case IDM_MHTIMIDITY: TiMidityWnd(hwnd); break; case IDM_FORCE_RELOAD: if (!w32g_play_active) {reload_cfg();} break; case IDM_MHSUPPLEMENT: SupplementWnd(hwnd); break; default: UpdateOutputMenu(hwnd, wId); break; }}void update_subwindow(void){ SUBWINDOW *s = subwindow; int i; for(i=0;s[i].hwnd!=NULL;i++){ if(IsWindow(*(s[i].hwnd))) s[i].status |= SWS_EXIST; else { s[i].status = 0; continue; } if(IsIconic(*(s[i].hwnd))) s[i].status |= SWS_ICON; else s[i].status &= ~ SWS_ICON; if(IsWindowVisible(*(s[i].hwnd))) s[i].status &= ~ SWS_HIDE; else s[i].status |= SWS_HIDE; }}void MainWndSetPauseButton(int flag){ if(flag) SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_MAIN, TB_CHECKBUTTON, IDM_PAUSE, (LPARAM)MAKELONG(TRUE, 0)); else SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_MAIN, TB_CHECKBUTTON, IDM_PAUSE, (LPARAM)MAKELONG(FALSE, 0));}void MainWndSetPlayButton(int flag){ return;}void MainWndUpdateConsoleButton(void){ if(IsWindowVisible(hConsoleWnd)) SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_SUBWND, TB_CHECKBUTTON, IDM_CONSOLE, (LPARAM)MAKELONG(TRUE, 0)); else SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_SUBWND, TB_CHECKBUTTON, IDM_CONSOLE, (LPARAM)MAKELONG(FALSE, 0));}void MainWndUpdateListButton(void){ if(IsWindowVisible(hListWnd)) SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_SUBWND, TB_CHECKBUTTON, IDM_LIST, (LPARAM)MAKELONG(TRUE, 0)); else SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_SUBWND, TB_CHECKBUTTON, IDM_LIST, (LPARAM)MAKELONG(FALSE, 0));}void MainWndUpdateDocButton(void){ if(IsWindowVisible(hDocWnd)) SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_SUBWND, TB_CHECKBUTTON, IDM_DOC, (LPARAM)MAKELONG(TRUE, 0)); else SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_SUBWND, TB_CHECKBUTTON, IDM_DOC, (LPARAM)MAKELONG(FALSE, 0));}void MainWndUpdateTracerButton(void){ if(IsWindowVisible(hTracerWnd)) SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_SUBWND, TB_CHECKBUTTON, IDM_TRACER, (LPARAM)MAKELONG(TRUE, 0)); else SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_SUBWND, TB_CHECKBUTTON, IDM_TRACER, (LPARAM)MAKELONG(FALSE, 0));}void MainWndUpdateWrdButton(void){ if(IsWindowVisible(hWrdWnd)) SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_SUBWND, TB_CHECKBUTTON, IDM_WRD, (LPARAM)MAKELONG(TRUE, 0)); else SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_SUBWND, TB_CHECKBUTTON, IDM_WRD, (LPARAM)MAKELONG(FALSE, 0));}void MainWndUpdateSoundSpecButton(void){}#undef SUBWINDOW_POS_IS_OLD_CLOSED_WINDOWvoid ShowSubWindow(HWND hwnd,int showflag){ int i, num; RECT rc;#ifdef SUBWINDOW_POS_IS_OLD_CLOSED_WINDOW RECT rc2;#endif int max = 0; if(showflag){ if(IsWindowVisible(hwnd)) return; for(i=0;SubWindowHistory[i].hwnd!=NULL;i++) if(*(SubWindowHistory[i].hwnd)==hwnd) num = i; for(i=0;SubWindowHistory[i].hwnd!=NULL;i++) if(*(SubWindowHistory[i].hwnd)!=hwnd){ if(SubWindowHistory[i].status > 0) SubWindowHistory[i].status += 1; if(SubWindowHistory[i].status>SubWindowMax){ if(SubWindowHistory[i].status>max){ GetWindowRect(*(SubWindowHistory[i].hwnd), &rc); max = SubWindowHistory[i].status; } ShowWindow(*(SubWindowHistory[i].hwnd),SW_HIDE); SubWindowHistory[i].status = 0; } }#ifdef SUBWINDOW_POS_IS_OLD_CLOSED_WINDOW // 僒僽僂僀儞僪僂傪嵟戝悢傪墇偊偰暵偠傜傟傞屆偄僂僀儞僪僂偵崌傢偣傞巇條偼巭傔傞偙偲偵偟偨丅 if(max>0){ GetWindowRect(hwnd, &rc2); MoveWindow(hwnd,rc.left,rc.top,rc2.right-rc2.left,rc2.bottom-rc2.top,TRUE); }#endif ShowWindow(hwnd,SW_SHOW); SubWindowHistory[num].status = 1; } else { if(!IsWindowVisible(hwnd)) return; for(i=0;SubWindowHistory[i].hwnd!=NULL;i++) if(*(SubWindowHistory[i].hwnd)==hwnd) num = i; for(i=0;SubWindowHistory[i].hwnd!=NULL;i++) if(i!=num) if(SubWindowHistory[i].status>=SubWindowHistory[num].status) SubWindowHistory[i].status -= 1; ShowWindow(hwnd,SW_HIDE); SubWindowHistory[num].status = 0; } MainWndUpdateConsoleButton(); MainWndUpdateListButton(); MainWndUpdateTracerButton(); MainWndUpdateDocButton(); MainWndUpdateWrdButton(); MainWndUpdateSoundSpecButton();}void ToggleSubWindow(HWND hwnd){ if(IsWindowVisible(hwnd)) ShowSubWindow(hwnd,0); else ShowSubWindow(hwnd,1);}void OnShow(void){ SUBWINDOW *s = subwindow; int i; for(i=0;s[i].hwnd!=NULL;i++) if(s[i].status & SWS_EXIST) { if(s[i].status & SWS_HIDE) ShowWindow(*(s[i].hwnd),SW_HIDE); else ShowWindow(*(s[i].hwnd),SW_SHOW); }}void OnHide(void){ SUBWINDOW *s = subwindow; int i; for(i=0;s[i].hwnd!=NULL;i++){ if(s[i].status & SWS_EXIST) ShowWindow(*(s[i].hwnd),SW_HIDE); }}#ifdef W32GUI_DEBUGvoid DebugThread(void *args){ MSG msg; DebugThreadExit = 0; InitDebugWnd(NULL); AttachThreadInput(GetWindowThreadProcessId(hDebugThread,NULL), GetWindowThreadProcessId(hWindowThread,NULL),TRUE); AttachThreadInput(GetWindowThreadProcessId(hWindowThread,NULL), GetWindowThreadProcessId(hDebugThread,NULL),TRUE); while( GetMessage(&msg,NULL,0,0) ){ TranslateMessage(&msg); DispatchMessage(&msg); } DebugThreadExit = 1; crt_endthread();}void DebugThreadInit(void){ DWORD dwThreadID; if(!DebugThreadExit) return; hDebugThread = crt_beginthreadex(NULL,0,DebugThread,0,0,&dwThreadID);}#endif//-----------------------------------------------------------------------------// Toolbar Mainstatic TBBUTTON MainTbb[] = { {4, IDM_STOP, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, {3, IDM_PAUSE, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0}, {0, IDM_PREV, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, {1, IDM_BACKWARD, TBSTATE_ENABLED,TBSTYLE_BUTTON, 0, 0}, {2, IDM_PLAY, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, {5, IDM_FOREWARD, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}, {6, IDM_NEXT, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0}};static void InitMainToolbar(HWND hwnd){ TBADDBITMAP MainTbab; SendDlgItemMessage(hwnd, IDC_TOOLBARWINDOW_MAIN, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); SendDlgItemMessage(hwnd, IDC_TOOLBARWINDOW_MAIN, TB_SETBUTTONSIZE, (WPARAM)0, (LPARAM)MAKELONG(16,16)); MainTbab.hInst = hInst; MainTbab.nID =(int)IDB_BITMAP_MAIN_BUTTON; SendDlgItemMessage(hwnd, IDC_TOOLBARWINDOW_MAIN, TB_ADDBITMAP, 7, (LPARAM)&MainTbab); SendDlgItemMessage(hwnd, IDC_TOOLBARWINDOW_MAIN, TB_ADDBUTTONS, (WPARAM)7,(LPARAM)&MainTbb); SendDlgItemMessage(hwnd, IDC_TOOLBARWINDOW_MAIN, TB_AUTOSIZE, 0, 0);}//-----------------------------------------------------------------------------// Toolbar SubWndstatic TBBUTTON SubWndTbb[] = { {3, IDM_CONSOLE, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0}, {1, IDM_LIST, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0}, {2, IDM_TRACER, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0}, {0, IDM_DOC, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0}, {4, IDM_WRD, TBSTATE_ENABLED, TBSTYLE_CHECK, 0, 0},};static void InitSubWndToolbar(HWND hwnd){ TBADDBITMAP SubWndTbab; SendDlgItemMessage(hwnd, IDC_TOOLBARWINDOW_SUBWND, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0); SendDlgItemMessage(hwnd, IDC_TOOLBARWINDOW_SUBWND, TB_SETBUTTONSIZE, (WPARAM)0, (LPARAM)MAKELONG(16,16)); SubWndTbab.hInst = hInst; SubWndTbab.nID =(int)IDB_BITMAP_SUBWND_BUTTON; SendDlgItemMessage(hwnd, IDC_TOOLBARWINDOW_SUBWND, TB_ADDBITMAP, 5, (LPARAM)&SubWndTbab); SendDlgItemMessage(hwnd, IDC_TOOLBARWINDOW_SUBWND, TB_ADDBUTTONS, (WPARAM)5,(LPARAM)&SubWndTbb); SendDlgItemMessage(hwnd, IDC_TOOLBARWINDOW_SUBWND, TB_AUTOSIZE, 0, 0);}//-----------------------------------------------------------------------------// Canvas Window#define MAPBAR_LIKE_TMIDI // note bar view like tmidi#define TM_CANVAS_XMAX 160#define TM_CANVAS_YMAX 160#define TM_CANVASMAP_XMAX 16#define TM_CANVASMAP_YMAX 16#define CANVAS_XMAX 160#define CANVAS_YMAX 160#define CMAP_XMAX 16#define CMAP_YMAX 16#define CK_MAX_CHANNELS 16#define CMAP_MODE_16 1#define CMAP_MODE_32 2#define CMAP_MAX_CHANNELS 32struct Canvas_ { HWND hwnd; HWND hParentWnd; RECT rcMe; int Mode; HDC hdc; HDC hmdc; HGDIOBJ hgdiobj_hmdcprev; int UpdateAll; int PaintDone; HANDLE hPopupMenu; HANDLE hPopupMenuKeyboard;// Sleep mode RECT rcSleep; HBITMAP hbitmap; HBITMAP hBitmapSleep; int SleepUpdateFlag;// Map mode RECT rcMap; char MapMap[CMAP_MAX_CHANNELS][CMAP_YMAX]; char MapMapOld[CMAP_MAX_CHANNELS][CMAP_YMAX]; char MapBar[CMAP_MAX_CHANNELS]; char MapBarOld[CMAP_MAX_CHANNELS]; int MapDelay; int MapResidual; int MapUpdateFlag; int MapMode; int MapBarWidth; int MapBarMax; int MapCh; int MapPan[CMAP_MAX_CHANNELS]; int MapPanOld[CMAP_MAX_CHANNELS]; int MapSustain[CMAP_MAX_CHANNELS]; int MapSustainOld[CMAP_MAX_CHANNELS]; int MapExpression[CMAP_MAX_CHANNELS]; int MapExpressionOld[CMAP_MAX_CHANNELS]; int MapVolume[CMAP_MAX_CHANNELS]; int MapVolumeOld[CMAP_MAX_CHANNELS]; int MapPitchbend[CMAP_MAX_CHANNELS]; int MapPitchbendOld[CMAP_MAX_CHANNELS]; int MapChChanged; ChannelBitMask DrumChannel; RECT rcMapMap; RECT rcMapSub;// Keyboard mode RECT rcKeyboard; uint32 CKxnote[MAX_W32G_MIDI_CHANNELS][4]; uint32 CKxnote_old[MAX_W32G_MIDI_CHANNELS][4]; int CKNoteFrom; int CKNoteTo; int CKCh; int CKPart; RECT rcGSLCD; int8 GSLCD[16][16]; int8 GSLCD_old[16][16]; int KeyboardUpdateFlag; int xnote_reset;// misc Channel channel[MAX_W32G_MIDI_CHANNELS];} volatile Canvas;#define IDC_CANVAS 4242static HWND hCanvasWnd;static char CanvasWndClassName[] = "TiMidity Canvas";static LRESULT CALLBACK CanvasWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);static void CanvasPaintDo(void);#define IDM_CANVAS_SLEEP 2321#define IDM_CANVAS_MAP 2322#define IDM_CANVAS_KEYBOARD 2323#define IDM_CANVAS_REDRAW 2324#define IDM_CANVAS_MAP16 2325#define IDM_CANVAS_MAP32 2326#define IDM_CANVAS_KEYBOARD_A 2327#define IDM_CANVAS_KEYBOARD_B 2328#define IDM_CANVAS_KEYBOARD_C 2329#define IDM_CANVAS_GSLCD 2330static void InitCanvasWnd(HWND hwnd){ WNDCLASS wndclass ; hCanvasWnd = 0; wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS | CS_CLASSDC; wndclass.lpfnWndProc = CanvasWndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInst ; wndclass.hIcon = NULL; wndclass.hCursor = LoadCursor(0,IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH)(COLOR_SCROLLBAR + 1); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = CanvasWndClassName; RegisterClass(&wndclass); hCanvasWnd = CreateWindowEx(0,CanvasWndClassName,0,WS_CHILD,CW_USEDEFAULT, 0,CANVAS_XMAX,CANVAS_YMAX,GetDlgItem(hwnd,IDC_RECT_CANVAS),0,hInst,0); CanvasInit(hCanvasWnd); CanvasReset(); CanvasClear(); CanvasReadPanelInfo(1); CanvasUpdate(1); CanvasPaintAll(); ShowWindow(hCanvasWnd,SW_SHOW); UpdateWindow(hCanvasWnd);}static LRESULT CALLBACKCanvasWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam){ switch (uMess) { case WM_CREATE: Canvas.hPopupMenuKeyboard = CreatePopupMenu(); AppendMenu(Canvas.hPopupMenuKeyboard,MF_STRING,IDM_CANVAS_KEYBOARD_A,"A Part"); AppendMenu(Canvas.hPopupMenuKeyboard,MF_STRING,IDM_CANVAS_KEYBOARD_B,"B Part"); Canvas.hPopupMenu = CreatePopupMenu(); AppendMenu(Canvas.hPopupMenu,MF_STRING,IDM_CANVAS_GSLCD,"LCD Mode"); AppendMenu(Canvas.hPopupMenu,MF_STRING,IDM_CANVAS_MAP16,"Map16 Mode"); AppendMenu(Canvas.hPopupMenu,MF_STRING,IDM_CANVAS_MAP32,"Map32 Mode"); // AppendMenu(Canvas.hPopupMenu,MF_STRING,IDM_CANVAS_KEYBOARD,"Keyboard Mode"); AppendMenu(Canvas.hPopupMenu,MF_POPUP,(UINT)Canvas.hPopupMenuKeyboard,"Keyboard Mode"); AppendMenu(Canvas.hPopupMenu,MF_STRING,IDM_CANVAS_SLEEP,"Sleep Mode"); AppendMenu(Canvas.hPopupMenu,MF_SEPARATOR,0,0); AppendMenu(Canvas.hPopupMenu,MF_STRING,IDM_CANVAS_REDRAW,"Redraw"); break; case WM_DESTROY: DestroyMenu ( Canvas.hPopupMenuKeyboard ); Canvas.hPopupMenuKeyboard = NULL; break; case WM_PAINT: CanvasPaintDo(); return 0; case WM_LBUTTONDBLCLK: w32g_send_rc(RC_EXT_MODE_CHANGE, 0); break; case WM_RBUTTONDOWN: { RECT rc; GetWindowRect(Canvas.hwnd,(RECT *)&rc); SetForegroundWindow ( Canvas.hwnd );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -