📄 w32g_subwin.c
字号:
} DestroyMenu(ListWndInfo.hPopupMenu); ListWndInfo.hPopupMenu = NULL; INISaveListWnd(); break; /* 儅僂僗擖椡偑僉儍僾僠儍偝傟偰偄側偄偨傔偺張棟 */ case WM_SETCURSOR: switch(HIWORD(lParam)){ case WM_RBUTTONDOWN: if(LOWORD(lParam)!=HTCAPTION){ // 僞僀僩儖僶乕偵側偄偲偒 POINT point; int res; GetCursorPos(&point); SetForegroundWindow ( hwnd ); res = TrackPopupMenu(ListWndInfo.hPopupMenu,TPM_TOPALIGN|TPM_LEFTALIGN, point.x,point.y,0,hwnd,NULL); PostMessage ( hwnd, WM_NULL, 0, 0 ); return TRUE; } break; default: break; } break; case WM_CHOOSEFONT_DIAG: { char fontName[64]; int fontHeight; int fontWidth; strcpy(fontName,ListWndInfo.fontName); fontHeight = ListWndInfo.fontHeight; fontWidth = ListWndInfo.fontWidth; if(DlgChooseFont(hwnd,fontName,&fontHeight,&fontWidth)==0){ ListWndSetFontListBox(fontName,fontWidth,fontHeight); } } break; case WM_LIST_SEARCH_DIAG: ShowListSearch(); break; case WM_COMMAND: switch (HIWORD(wParam)) { case IDCLOSE: ShowWindow(hwnd, SW_HIDE); MainWndUpdateListButton(); break; case LBN_DBLCLK: SendMessage(hwnd,WM_COMMAND,(WPARAM)IDM_LISTWND_PLAY,0); return FALSE; case LBN_SELCHANGE: { int idListBox = (int) LOWORD(wParam); HWND hwndListBox = (HWND) lParam; int selected, nfiles, cursel; w32g_get_playlist_index(&selected,&nfiles,&cursel); SetNumListWnd(cursel,nfiles); return FALSE; } default: break; } switch (LOWORD(wParam)) { case IDC_BUTTON_CLEAR: if(MessageBox(hListWnd,"Clear playlist?","Playlist", MB_YESNO)==IDYES) w32g_send_rc(RC_EXT_CLEAR_PLAYLIST, 0); return FALSE; case IDC_BUTTON_REFINE: if(MessageBox(hListWnd, "Remove unsupported file types from the playlist?", "Playlist",MB_YESNO) == IDYES) w32g_send_rc(RC_EXT_REFINE_PLAYLIST, 0); return FALSE; case IDC_BUTTON_UNIQ: if(MessageBox(hListWnd, "Remove the same files from the playlist and make files of the playlist unique?", "Playlist",MB_YESNO)==IDYES) w32g_send_rc(RC_EXT_UNIQ_PLAYLIST, 0); return FALSE; case IDM_LISTWND_REMOVE: w32g_send_rc(RC_EXT_DELETE_PLAYLIST, 0); break; case IDC_BUTTON_DOC: { int cursel; w32g_get_playlist_index(NULL, NULL, &cursel); w32g_send_rc(RC_EXT_OPEN_DOC, cursel); } break; case IDM_LISTWND_PLAY: { int new_cursel = SendDlgItemMessage(hwnd,IDC_LISTBOX_PLAYLIST,LB_GETCURSEL,0,0); int selected, nfiles, cursel; w32g_get_playlist_index(&selected, &nfiles, &cursel); if ( nfiles <= new_cursel ) new_cursel = nfiles - 1; if ( new_cursel >= 0 ) w32g_send_rc(RC_EXT_JUMP_FILE, new_cursel ); } return FALSE; case IDM_LISTWND_CHOOSEFONT: { SendMessage(hwnd,WM_CHOOSEFONT_DIAG,0,0); } return FALSE; case IDM_LISTWND_CURRENT: { int selected, nfiles, cursel; w32g_get_playlist_index(&selected, &nfiles, &cursel); SendDlgItemMessage(hwnd,IDC_LISTBOX_PLAYLIST, LB_SETCURSEL,(WPARAM)selected,0); SetNumListWnd(selected,nfiles); } return FALSE; case IDM_LISTWND_SEARCH: { SendMessage(hwnd,WM_LIST_SEARCH_DIAG,0,0); } return FALSE; default: break; } break; case WM_VKEYTOITEM: { UINT vkey = (UINT)LOWORD(wParam); int nCaretPos = (int)HIWORD(wParam); switch(vkey){ case VK_SPACE: case VK_RETURN: w32g_send_rc(RC_EXT_JUMP_FILE, nCaretPos); return -2; case 0x50: // VK_P SendMessage(hMainWnd,WM_COMMAND,MAKEWPARAM(IDM_PREV,0),0); return -2; case 0x4e: // VK_N SendMessage(hMainWnd,WM_COMMAND,MAKEWPARAM(IDM_NEXT,0),0); return -2; case 0x45: // VK_E SendMessage(hMainWnd,WM_COMMAND,MAKEWPARAM(IDM_STOP,0),0); return -2; case 0x53: // VK_S SendMessage(hMainWnd,WM_COMMAND,MAKEWPARAM(IDM_PAUSE,0),0); return -2; case VK_ESCAPE: SendMessage(hListWnd,WM_COMMAND,MAKEWPARAM(0,IDCLOSE),0); return -2; case 0x51: // VK_Q if(MessageBox(hListWnd,"Quit TiMidity?","TiMidity",MB_ICONQUESTION|MB_YESNO)==IDYES) SendMessage(hMainWnd,WM_CLOSE,0,0); return -2; case VK_BACK: w32g_send_rc(RC_EXT_DELETE_PLAYLIST, -1); return -2; case 0x44: // VK_D w32g_send_rc(RC_EXT_DELETE_PLAYLIST, 0); return -2; case VK_DELETE: w32g_send_rc(RC_EXT_ROTATE_PLAYLIST, -1); return -2; case VK_INSERT: w32g_send_rc(RC_EXT_ROTATE_PLAYLIST, 1); return -2; case 0x46: // VK_F return -2; case 0x42: // VK_B return -2; case 0x4D: // VK_M SendMessage(hListWnd,WM_COMMAND,MAKEWPARAM(IDC_BUTTON_REFINE,0),0); return -2; case 0x43: // VK_C SendMessage(hListWnd,WM_COMMAND,MAKEWPARAM(IDC_BUTTON_CLEAR,0),0); return -2; case 0x55: // VK_U SendMessage(hListWnd,WM_COMMAND,MAKEWPARAM(IDC_BUTTON_UNIQ,0),0); return -2; case 0x56: // VK_V SendMessage(hListWnd,WM_COMMAND,MAKEWPARAM(IDC_BUTTON_DOC,0),0); return -2; case 0x57: // VK_W SendMessage(hMainWnd,WM_COMMAND,MAKEWPARAM(IDM_WRD,0),0); return -2; case VK_F1: case 0x48: // VK_H if ( PlayerLanguage == LANGUAGE_JAPANESE ){ MessageBox(hListWnd, "僉乕僐儅儞僪\n" "儕僗僩僂僀儞僪僂僐儅儞僪\n" " ESC: 僿儖僾傪暵偠傞 H: 僿儖僾傪弌偡\n" " V: 僪僉儏儊儞僩傪尒傞 W: WRD 僂僀儞僪僂傪奐偔\n" "僾儗僀儎乕僐儅儞僪\n" " SPACE/ENTER: 墘憈奐巒 E: 掆巭 S: 堦帪掆巭\n" " P: 慜偺嬋 N: 師偺嬋\n" "僾儗僀儕僗僩憖嶌僐儅儞僪\n" " M: MIDI僼傽僀儖埲奜傪嶍彍 U: 廳暋僼傽僀儖傪嶍彍\n" " C: 僾儗僀儕僗僩偺僋儕傾\n" " D: 僇乕僜儖偺嬋傪嶍彍 BS: 僇乕僜儖偺慜偺嬋傪嶍彍\n" " INS: 僇乕僜儖偺嬋傪儕僗僩偺嵟屻偵堏偡 (Push)\n" " DEL: 儕僗僩偺嵟屻偺嬋傪僇乕僜儖偺慜偵憓擖 (Pop)\n" "TiMidity 僐儅儞僪\n" " Q: 廔椆\n" ,"僿儖僾", MB_OK); } else { MessageBox(hListWnd, "Usage of key.\n" "List window command.\n" " ESC: Close Help H: Help\n" " V: View Document W: Open WRD window\n" "Player command.\n" " SPACE/ENTER: PLAY E: Stop S: Pause\n" " P: Prev N: Next\n" "Playlist command.\n" " M: Refine playlist U: Uniq playlist\n" " C: Clear playlist\n" " D: Remove playlist BS: Remove previous playlist\n" " INS: Push Playlist DEL: Pop Playlist\n" "TiMidity command.\n" " Q: Quit\n" ,"Help", MB_OK); } return -2; default: break; } return -1; } case WM_SIZE: switch(wParam){ case SIZE_MAXIMIZED: case SIZE_RESTORED: { // 側傫偐堄枴側偔柺搢(^^;; int x,y,cx,cy; int maxHeight = 0; int center, idControl; HWND hwndChild; RECT rcParent, rcChild, rcRest; int nWidth = LOWORD(lParam); int nHeight = HIWORD(lParam); GetWindowRect(hwnd,&rcParent); cx = rcParent.right-rcParent.left; cy = rcParent.bottom-rcParent.top; if(cx < 380) MoveWindow(hwnd,rcParent.left,rcParent.top,380,cy,TRUE); if(cy < 200) MoveWindow(hwnd,rcParent.left,rcParent.top,cx,200,TRUE); GetClientRect(hwnd,&rcParent); rcRest.left = rcParent.left; rcRest.right = rcParent.right; // IDC_EDIT_NUM idControl = IDC_EDIT_NUM; hwndChild = GetDlgItem(hwnd,idControl); GetWindowRect(hwndChild,&rcChild); cx = rcChild.right-rcChild.left; cy = rcChild.bottom-rcChild.top; x = rcParent.left; y = rcParent.bottom - cy; MoveWindow(hwndChild,x,y,cx,cy,TRUE); if(cy>maxHeight) maxHeight = cy; rcRest.left += cx; // IDC_BUTTON_DOC idControl = IDC_BUTTON_DOC; hwndChild = GetDlgItem(hwnd,idControl); GetWindowRect(hwndChild,&rcChild); cx = rcChild.right-rcChild.left; cy = rcChild.bottom-rcChild.top; x = rcRest.left + 10; y = rcParent.bottom - cy; MoveWindow(hwndChild,x,y,cx,cy,TRUE); if(cy>maxHeight) maxHeight = cy; rcRest.left += cx; // IDC_BUTTON_CLEAR idControl = IDC_BUTTON_CLEAR; hwndChild = GetDlgItem(hwnd,idControl); GetWindowRect(hwndChild,&rcChild); cx = rcChild.right-rcChild.left; cy = rcChild.bottom-rcChild.top; x = rcParent.right - cx - 5; y = rcParent.bottom - cy ; MoveWindow(hwndChild,x,y,cx,cy,TRUE); if(cy>maxHeight) maxHeight = cy; rcRest.right -= cx + 5; // IDC_BUTTON_UNIQ center = rcRest.left + (int)((rcRest.right - rcRest.left)*0.52); idControl = IDC_BUTTON_UNIQ; hwndChild = GetDlgItem(hwnd,idControl); GetWindowRect(hwndChild,&rcChild); cx = rcChild.right-rcChild.left; cy = rcChild.bottom-rcChild.top; x = center - cx; y = rcParent.bottom - cy; MoveWindow(hwndChild,x,y,cx,cy,TRUE); if(cy>maxHeight) maxHeight = cy; // IDC_BUTTON_REFINE idControl = IDC_BUTTON_REFINE; hwndChild = GetDlgItem(hwnd,idControl); GetWindowRect(hwndChild,&rcChild); cx = rcChild.right-rcChild.left; cy = rcChild.bottom-rcChild.top; x = center + 3; y = rcParent.bottom - cy; MoveWindow(hwndChild,x,y,cx,cy,TRUE); if(cy>maxHeight) maxHeight = cy; // IDC_LISTBOX_PLAYLIST idControl = IDC_LISTBOX_PLAYLIST; hwndChild = GetDlgItem(hwnd,idControl); cx = rcParent.right - rcParent.left; cy = rcParent.bottom - rcParent.top - maxHeight - 3; x = rcParent.left; y = rcParent.top; MoveWindow(hwndChild,x,y,cx,cy,TRUE); InvalidateRect(hwnd,&rcParent,FALSE); UpdateWindow(hwnd); GetWindowRect(hwnd,&rcParent); ListWndInfo.Width = rcParent.right - rcParent.left; ListWndInfo.Height = rcParent.bottom - rcParent.top; break; } case SIZE_MINIMIZED: case SIZE_MAXHIDE: case SIZE_MAXSHOW: default: break; } break; case WM_MOVE:// ListWndInfo.PosX = (int) LOWORD(lParam);// ListWndInfo.PosY = (int) HIWORD(lParam); { RECT rc; GetWindowRect(hwnd,&rc); ListWndInfo.PosX = rc.left; ListWndInfo.PosY = rc.top; } break; // See PreDispatchMessage() in w32g2_main.c case WM_SYSKEYDOWN: case WM_KEYDOWN: { int nVirtKey = (int)wParam; switch(nVirtKey){ case VK_ESCAPE: SendMessage(hwnd,WM_CLOSE,0,0); break; } } break; case WM_CLOSE: ShowSubWindow(hListWnd,0);// ShowWindow(hListWnd, SW_HIDE); MainWndUpdateListButton(); break; case WM_SHOWWINDOW: { BOOL fShow = (BOOL)wParam; if ( fShow ) { if ( ListSearchWndShow ) { ShowListSearch(); } else { HideListSearch(); } } else { if ( IsWindowVisible ( hListSearchWnd ) ) ListSearchWndShow = TRUE; else ListSearchWndShow = FALSE; HideListSearch(); } } break; case WM_DROPFILES: SendMessage(hMainWnd,WM_DROPFILES,wParam,lParam); return 0; default: return FALSE; } return FALSE;}static int ListWndInfoReset(HWND hwnd){ memset(&ListWndInfo,0,sizeof(LISTWNDINFO)); ListWndInfo.PosX = - 1; ListWndInfo.PosY = - 1; ListWndInfo.Height = 400; ListWndInfo.Width = 400; ListWndInfo.hPopupMenu = NULL; ListWndInfo.hwnd = hwnd; if ( hwnd != NULL ) ListWndInfo.hwndListBox = GetDlgItem(hwnd,IDC_LISTBOX_PLAYLIST); strcpy(ListWndInfo.fontNameEN,"Times New Roman"); strcpy(ListWndInfo.fontNameJA,"俵俽 柧挬"); ListWndInfo.fontHeight = 12; ListWndInfo.fontWidth = 6; ListWndInfo.fontFlags = FONT_FLAGS_FIXED; switch(PlayerLanguage){ case LANGUAGE_ENGLISH: ListWndInfo.fontName = ListWndInfo.fontNameEN; break; default: case LANGUAGE_JAPANESE: ListWndInfo.fontName = ListWndInfo.fontNameJA; break; } return 0;}static int ListWndInfoApply(void){ RECT rc; HFONT hFontPre = NULL; DWORD fdwPitch = (ListWndInfo.fontFlags&FONT_FLAGS_FIXED)?FIXED_PITCH:VARIABLE_PITCH; DWORD fdwItalic = (ListWndInfo.fontFlags&FONT_FLAGS_ITALIC)?TRUE:FALSE; HFONT hFont = CreateFont(ListWndInfo.fontHeight,ListWndInfo.fontWidth,0,0,FW_DONTCARE,fdwItalic,FALSE,FALSE, DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, fdwPitch | FF_DONTCARE,ListWndInfo.fontName); if(hFont != NULL){ hFontPre = ListWndInfo.hFontListBox; ListWndInfo.hFontListBox = hFont; SendMessage(ListWndInfo.hwndListBox,WM_SETFONT,(WPARAM)ListWndInfo.hFontListBox,(LPARAM)MAKELPARAM(TRUE,0)); } GetWindowRect(ListWndInfo.hwnd,&rc); MoveWindow(ListWndInfo.hwnd,rc.left,rc.top,ListWndInfo.Width,ListWndInfo.Height,TRUE);// InvalidateRect(hwnd,&rc,FALSE);// UpdateWindow(hwnd); if(hFontPre!=NULL) CloseHandle(hFontPre); INISaveListWnd(); return 0;}static int ListWndSetFontListBox(char *fontName, int fontWidth, int fontHeight){ strcpy(ListWndInfo.fontName,fontName); ListWndInfo.fontWidth = fontWidth; ListWndInfo.fontHeight = fontHeight; ListWndInfoApply(); return 0;}void SetNumListWnd(int cursel, int nfiles){ char buff[64]; sprintf(buff,"%04d/%04d",cursel+1,nfiles); SetDlgItemText(hListWnd,IDC_EDIT_NUM,buff);}#if 0// ***************************************************************************// Tracer WindowBOOL CALLBACK TracerWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);void InitTracerWnd(HWND hParentWnd){ if (hTracerWnd != NULL) { DestroyWindow(hTracerWnd); hTracerWnd = NULL; } hTracerWnd = CreateDialog (hInst,MAKEINTRESOURCE(IDD_DIALOG_TRACER),hParentWnd,TracerWndProc);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -