📄 w32g_i.c
字号:
static void InitMainWnd(HWND hParentWnd){ HICON hIcon = LoadImage(hInst, MAKEINTRESOURCE(IDI_ICON_TIMIDITY), IMAGE_ICON, 16, 16, 0); if ( hMainWnd != NULL ) { DestroyWindow ( hMainWnd ); hMainWnd = NULL; } INILoadMainWnd(); if (PlayerLanguage == LANGUAGE_JAPANESE) hMainWnd = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG_MAIN),hParentWnd,MainProc); else hMainWnd = CreateDialog(hInst,MAKEINTRESOURCE(IDD_DIALOG_MAIN_EN),hParentWnd,MainProc); InitOutputMenu(hMainWnd); if (hIcon!=NULL) SendMessage(hMainWnd,WM_SETICON,FALSE,(LPARAM)hIcon); { // Set the title of the main window again. char buffer[256]; SendMessage( hMainWnd, WM_GETTEXT, (WPARAM)255, (LPARAM)buffer); SendMessage( hMainWnd, WM_SETTEXT, (WPARAM)0, (LPARAM)buffer); } MainWndInfoApply();}static int MainWndInfoReset(HWND hwnd){ memset(&MainWndInfo,0,sizeof(MAINWNDINFO)); MainWndInfo.PosX = - 1; MainWndInfo.PosY = - 1; return 0;}static int MainWndInfoApply(void){ return 0;}void MainCmdProc(HWND hwnd, int wId, HWND hwndCtl, UINT wNotifyCode);void MainWndSetPauseButton(int flag);void MainWndSetPlayButton(int flag);void MainWndToggleConsoleButton(void);void MainWndUpdateConsoleButton(void);void MainWndToggleTracerButton(void);void MainWndUpdateTracerButton(void);void MainWndToggleListButton(void);void MainWndUpdateListButton(void);void MainWndToggleDocButton(void);void MainWndUpdateDocButton(void);void MainWndToggleWrdButton(void);void MainWndUpdateWrdButton(void);void MainWndToggleSoundSpecButton(void);void MainWndUpdateSoundSpecButton(void);void ShowSubWindow(HWND hwnd,int showflag);void ToggleSubWindow(HWND hwnd);static void VersionWnd(HWND hParentWnd);static void TiMidityWnd(HWND hParentWnd);static void SupplementWnd(HWND hParentWnd);static void InitCanvasWnd(HWND hwnd);static void CanvasInit(HWND hwnd);static void InitPanelWnd(HWND hwnd);static void MPanelInit(HWND hwnd);static void InitMainToolbar(HWND hwnd);static void InitSubWndToolbar(HWND hwnd);static UINT PlayerForwardAndBackwardEventID = 0;static void CALLBACK PlayerForward(UINT IDEvent, UINT uReserved, DWORD dwUser, DWORD dwReserved1, DWORD dwReserved2){ w32g_send_rc(RC_FORWARD, play_mode->rate);}static void CALLBACK PlayerBackward(UINT IDEvent, UINT uReserved, DWORD dwUser, DWORD dwReserved1, DWORD dwReserved2){ w32g_send_rc(RC_BACK, play_mode->rate);}extern void ShowPrefWnd ( void );extern void HidePrefWnd ( void );extern BOOL IsVisiblePrefWnd ( void );BOOL CALLBACKMainProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam){ static BOOL PrefWndShow; // PrintfDebugWnd("MainProc: Mess%lx WPARAM%lx LPARAM%lx\n",uMess,wParam,lParam); switch (uMess) { case WM_INITDIALOG: PrefWndShow = FALSE; update_subwindow(); MainWndUpdateConsoleButton(); MainWndUpdateTracerButton(); MainWndUpdateListButton(); MainWndUpdateDocButton(); MainWndUpdateWrdButton(); MainWndUpdateSoundSpecButton(); InitPanelWnd(hwnd); InitCanvasWnd(hwnd); InitMainToolbar(hwnd); InitSubWndToolbar(hwnd); { HMENU hMenu = GetSystemMenu(hwnd, FALSE);#if 1 RemoveMenu(hMenu,SC_MAXIMIZE,MF_BYCOMMAND); RemoveMenu(hMenu,SC_SIZE,MF_BYCOMMAND);#else EnableMenuItem(hMenu, SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(hMenu, SC_SIZE, MF_BYCOMMAND | MF_GRAYED);#endif EnableMenuItem(hMenu, SC_MOVE, MF_BYCOMMAND | MF_GRAYED); InsertMenu(hMenu, 0, MF_BYPOSITION | MF_SEPARATOR, 0, 0); InsertMenu(hMenu, 0, MF_BYPOSITION, SC_SCREENSAVE, "Screen Saver"); InsertMenu(hMenu, 0, MF_BYPOSITION | MF_SEPARATOR, 0, 0); InsertMenu(hMenu, 0, MF_BYPOSITION | MF_STRING, IDM_STOP, "Stop"); InsertMenu(hMenu, 0, MF_BYPOSITION | MF_STRING, IDM_PAUSE, "Pause"); InsertMenu(hMenu, 0, MF_BYPOSITION | MF_STRING, IDM_PREV, "Prev"); InsertMenu(hMenu, 0, MF_BYPOSITION | MF_STRING, IDM_NEXT, "Next"); InsertMenu(hMenu, 0, MF_BYPOSITION | MF_STRING, IDM_PLAY, "Play"); DrawMenuBar(hwnd); } { RECT d_rc, w_rc; GetClientRect ( GetDesktopWindow (), &d_rc ); GetWindowRect ( hwnd, &w_rc ); d_rc.right -= w_rc.right - w_rc.left; d_rc.bottom -= w_rc.bottom - w_rc.top; if ( MainWndInfo.PosX < d_rc.left ) MainWndInfo.PosX = d_rc.left; if ( MainWndInfo.PosX > d_rc.right ) MainWndInfo.PosX = d_rc.right; if ( MainWndInfo.PosY < d_rc.top ) MainWndInfo.PosY = d_rc.top; if ( MainWndInfo.PosY > d_rc.bottom ) MainWndInfo.PosY = d_rc.bottom; SetWindowPosSize(GetDesktopWindow(),hwnd,MainWndInfo.PosX, MainWndInfo.PosY ); } return FALSE; HANDLE_MSG(hwnd,WM_COMMAND,MainCmdProc); case WM_DESTROY: if(save_playlist_once_before_exit_flag) { save_playlist_once_before_exit_flag = 0; w32gSaveDefaultPlaylist(); } INISaveMainWnd(); PostQuitMessage(0); break; case WM_CLOSE: if(save_playlist_once_before_exit_flag) { save_playlist_once_before_exit_flag = 0; w32gSaveDefaultPlaylist(); } DestroyWindow(hwnd); break; case WM_SIZE: if(wParam == SIZE_MINIMIZED){ if ( IsVisiblePrefWnd () ) PrefWndShow = TRUE; else PrefWndShow = FALSE; HidePrefWnd (); update_subwindow(); OnHide(); } else if ( wParam == SIZE_RESTORED ) { if ( PrefWndShow ) { ShowPrefWnd (); } } return FALSE; case WM_MOVE: if ( ! IsIconic(hwnd) ) { RECT rc; GetWindowRect(hwnd,&rc); MainWndInfo.PosX = rc.left; MainWndInfo.PosY = rc.top; } break; case WM_QUERYOPEN: OnShow(); return FALSE; case WM_DROPFILES: w32g_send_rc(RC_EXT_DROP, (int32)wParam); return FALSE; case WM_HSCROLL: { int nScrollCode = (int)LOWORD(wParam); int nPos = (int) HIWORD(wParam); HWND bar = (HWND)lParam; if(bar != hMainWndScrollbarProgressWnd) break; switch(nScrollCode) { case SB_THUMBTRACK: case SB_THUMBPOSITION: progress_jump = nPos; break; case SB_LINELEFT: progress_jump = GetScrollPos(bar, SB_CTL) - 1; if(progress_jump < 0) progress_jump = 0; break; case SB_PAGELEFT: progress_jump = GetScrollPos(bar, SB_CTL) - 10; if(progress_jump < 0) progress_jump = 0; break; case SB_LINERIGHT: progress_jump = GetScrollPos(bar, SB_CTL) + 1; break; case SB_PAGERIGHT: progress_jump = GetScrollPos(bar, SB_CTL) + 10; break; case SB_ENDSCROLL: if(progress_jump != -1) { w32g_send_rc(RC_JUMP, progress_jump * play_mode->rate); SetScrollPos(hMainWndScrollbarProgressWnd, SB_CTL, progress_jump, TRUE); progress_jump = -1; } break; } break; } break; case WM_VSCROLL: { int nScrollCode = (int) LOWORD(wParam); int nPos = (int) HIWORD(wParam); HWND bar = (HWND) lParam; static int pos = -1; if(bar != hMainWndScrollbarVolumeWnd) break; switch(nScrollCode) { case SB_THUMBTRACK: case SB_THUMBPOSITION: pos = nPos; break; case SB_LINEUP: case SB_PAGEUP: pos = GetScrollPos(bar, SB_CTL) - 5; if(pos < 0) pos = 0; break; case SB_LINEDOWN: case SB_PAGEDOWN: pos = GetScrollPos(bar, SB_CTL) + 5; if(pos > W32G_VOLUME_MAX) pos = W32G_VOLUME_MAX; break; case SB_ENDSCROLL: if(pos != -1) { w32g_send_rc(RC_CHANGE_VOLUME, (W32G_VOLUME_MAX - pos) - amplification); SetScrollPos(bar, SB_CTL, pos, TRUE); pos = -1; } break; } } break; case WM_SYSCOMMAND: switch(wParam){ case IDM_STOP: case IDM_PAUSE: case IDM_PREV: case IDM_PLAY: case IDM_NEXT: case IDM_FOREWARD: case IDM_BACKWARD: SendMessage(hwnd,WM_COMMAND,wParam,(LPARAM)NULL); break; default: break; } return FALSE; case WM_NOTIFY: switch(wParam) { case IDC_TOOLBARWINDOW_MAIN:{ LPTBNOTIFY TbNotify = (LPTBNOTIFY)lParam; switch(TbNotify->iItem){ case IDM_BACKWARD: if(TbNotify->hdr.code==TBN_BEGINDRAG){#ifdef W32GUI_DEBUG //PrintfDebugWnd("IDM_BACKWARD: BUTTON ON\n");#endif PlayerBackward(0,0,0,0,0); PlayerForwardAndBackwardEventID = timeSetEvent(100, 100, PlayerBackward, 0, TIME_PERIODIC); } if(PlayerForwardAndBackwardEventID != 0) if(TbNotify->hdr.code==TBN_ENDDRAG){#ifdef W32GUI_DEBUG //PrintfDebugWnd("IDM_BACKWARD: BUTTON OFF\n");#endif timeKillEvent(PlayerForwardAndBackwardEventID); PlayerForwardAndBackwardEventID = 0; } break; case IDM_FOREWARD: if(TbNotify->hdr.code ==TBN_BEGINDRAG && PlayerForwardAndBackwardEventID == 0){#ifdef W32GUI_DEBUG //PrintfDebugWnd("IDM_FOREWARD: BUTTON ON\n");#endif PlayerForward(0,0,0,0,0); PlayerForwardAndBackwardEventID = timeSetEvent(100,300,PlayerForward,0,TIME_PERIODIC); } else if((TbNotify->hdr.code == TBN_ENDDRAG || TbNotify->hdr.code == NM_CLICK || TbNotify->hdr.code == NM_RCLICK) && PlayerForwardAndBackwardEventID != 0) {#ifdef W32GUI_DEBUG //PrintfDebugWnd("IDM_FOREWARD: BUTTON OFF\n");#endif timeKillEvent(PlayerForwardAndBackwardEventID); PlayerForwardAndBackwardEventID = 0; } break; default: break; } } break; /* end of case IDC_TOOLBARWINDOW_MAIN */ default: break; } return FALSE; case WM_SHOWWINDOW: { BOOL fShow = (BOOL)wParam; if ( fShow ) { if ( PrefWndShow ) { ShowPrefWnd (); } else { HidePrefWnd (); } } else { if ( IsVisiblePrefWnd () ) PrefWndShow = TRUE; else PrefWndShow = FALSE; HidePrefWnd (); } break; } break; default: if (uMess == RegisterWindowMessage("TaskbarCreated")) { ShowWindow(hMainWnd, SW_HIDE); ShowWindow(hMainWnd, SW_SHOWNOACTIVATE); return 0; } return FALSE; } return FALSE;}void MainCmdProc(HWND hwnd, int wId, HWND hwndCtl, UINT wNotifyCode){ // PrintfDebugWnd("WM_COMMAND: ID%lx HWND%lx CODE%lx\n",wId,hwndCtl,wNotifyCode); switch(wId) { case IDM_STOP: w32g_send_rc(RC_STOP, 0); break; case IDM_PAUSE: SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_MAIN, TB_CHECKBUTTON, IDM_PAUSE, (LPARAM)MAKELONG(!play_pause_flag, 0)); w32g_send_rc(RC_TOGGLE_PAUSE, 0); break; case IDM_PREV: w32g_send_rc(RC_REALLY_PREVIOUS, 0); break; case IDM_BACKWARD: /* Do nothing here. See WM_NOTIFY in MainProc() */ break; case IDM_PLAY: if(play_pause_flag) { SendDlgItemMessage(hMainWnd, IDC_TOOLBARWINDOW_MAIN, TB_CHECKBUTTON, IDM_PAUSE, (LPARAM)MAKELONG(FALSE, 0)); w32g_send_rc(RC_TOGGLE_PAUSE, 0); } if(!w32g_play_active) w32g_send_rc(RC_LOAD_FILE, 0); break; case IDM_FOREWARD: /* Do nothing here. See WM_NOTIFY in MainProc() */ break; case IDM_NEXT: w32g_send_rc(RC_NEXT, 0); break; case IDM_CONSOLE: case IDM_MWCONSOLE: ToggleSubWindow(hConsoleWnd); break; case IDM_TRACER: case IDM_MWTRACER: ToggleSubWindow(hTracerWnd);// MainWndUpdateTracerButton();// MessageBox(hwnd, "Not Supported.","Warning!",MB_OK); break; case IDM_LIST: case IDM_MWPLAYLIST: ToggleSubWindow(hListWnd); if(IsWindowVisible(hListWnd)) w32g_send_rc(RC_EXT_UPDATE_PLAYLIST, 0); break; case IDM_DOC: case IDM_MWDOCUMENT: ToggleSubWindow(hDocWnd);// if(IsWindowVisible(hDocWnd))// w32g_send_rc(RC_EXT_DOC, 0); break; case IDM_WRD: case IDM_MWWRDTRACER: ToggleSubWindow(hWrdWnd);// MainWndUpdateWrdButton();// MessageBox(hwnd, "Not Supported.","Warning!",MB_OK); break; case IDM_SOUNDSPEC: case IDM_MWSOUNDSPEC: MainWndUpdateSoundSpecButton(); MessageBox(hwnd, "Not Supported.","Warning!",MB_OK); break; case IDOK: break; case IDCANCEL: OnQuit(); break; case IDM_MFOPENFILE: DlgMidiFileOpen(hwnd); break; case IDM_MFOPENDIR: DlgDirOpen(hwnd); break; case IDM_MFLOADPLAYLIST: DlgPlaylistOpen(hwnd); break; case IDM_MFSAVEPLAYLISTAS: DlgPlaylistSave(hwnd); break; case IDM_MFEXIT: OnQuit(); break; case IDM_SETTING: PrefWndCreate(hMainWnd); break; case IDM_MCSAVEINIFILE: VOLATILE_TOUCH(PrefWndDoing); if(PrefWndDoing){ MessageBox(hMainWnd, "Can't Save Ini file while preference dialog.", "Warning", MB_OK); break; } SaveIniFile(sp_current, st_current); break; case IDM_MCLOADINIFILE: if(!w32g_has_ini_file) { MessageBox(hMainWnd, "Can't load Ini file.", "Warning", MB_OK); break; } VOLATILE_TOUCH(PrefWndDoing); if(PrefWndDoing){ MessageBox(hMainWnd, "Can't load Ini file while preference dialog.", "Warning", MB_OK);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -