📄 w32g_subwin.c
字号:
}}#define BUFFER_SIZE (1024*64)static void DocWndSetText(char *text, int text_size){ char buffer[BUFFER_SIZE]; int buffer_size = BUFFER_SIZE; if(!IsWindow(hDocWnd) || !DocWndFlag) return; if(DocWndInfoLock()==FALSE) return;// Edit_SetText(GetDlgItem(hDocWnd,IDC_EDIT),text); DocWndConvertText(text,text_size,buffer,buffer_size); Edit_SetText(GetDlgItem(hDocWnd,IDC_EDIT),buffer); DocWndInfoUnLock();}static void DocWndSetInfo(char *info, char *filename){ int buffer_size = BUFFER_SIZE; if(!IsWindow(hDocWnd) || !DocWndFlag) return; if(DocWndInfoLock()==FALSE) return; Edit_SetText(GetDlgItem(hDocWnd,IDC_EDIT_INFO),info); Edit_SetText(GetDlgItem(hDocWnd,IDC_EDIT_FILENAME),filename); DocWndInfoUnLock();}// *.doc *.txt *.hed archive#*.doc archive#*.txt archive#*.hed static void DocWndInfoInit(void){// DocWndInfo.hMutex = NULL;// DocWndInfo.hMutex = CreateMutex(NULL,TRUE,NULL); DocWndInfo.DocFileCur = 0; DocWndInfo.DocFileMax = 0; DocWndInfo.Text = NULL; DocWndInfo.TextSize = 0; EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_PREV),FALSE); EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_NEXT),FALSE);// if(DocWndInfo.hMutex!=NULL)// DocWndInfoUnLock();}// Success -> TRUE Failure -> FALSE static int DocWndInfoLock(void){#if 0 DWORD dwRes; if(DocWndInfo.hMutex==NULL) return FALSE; dwRes = WaitForSingleObject(DocWndInfo.hMutex,10000); if(dwRes==WAIT_OBJECT_0 || dwRes==WAIT_ABANDONED) return TRUE; else return FALSE;#else return TRUE;#endif}static void DocWndInfoUnLock(void){// ReleaseMutex(DocWndInfo.hMutex);}void DocWndInfoReset(void){ if(DocWndInfoLock()==FALSE) return; DocWndInfo.DocFileCur = 0; DocWndInfo.DocFileMax = 0; if(DocWndInfo.Text!=NULL){ free(DocWndInfo.Text); DocWndInfo.Text = NULL; } DocWndInfo.TextSize = 0; DocWndSetInfo("",""); DocWndSetText("",0);// end: DocWndInfoUnLock();}void DocWndAddDocFile(char *filename){ struct timidity_file *tf = open_file(filename,0,0);#ifdef W32GUI_DEBUGPrintfDebugWnd("DocWndAddDocFile <- [%s]\n",filename);#endif if(tf==NULL) return; close_file(tf); if(DocWndInfoLock()==FALSE) return; if(DocWndInfo.DocFileMax>=DOCWND_DOCFILEMAX-1) goto end; DocWndInfo.DocFileMax++; strncpy(DocWndInfo.DocFile[DocWndInfo.DocFileMax-1],filename,MAXPATH); DocWndInfo.DocFile[DocWndInfo.DocFileMax-1][MAXPATH-1] = '\0'; if(DocWndInfo.DocFileCur==1) EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_PREV),FALSE); else EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_PREV),TRUE); if(DocWndInfo.DocFileCur==DocWndInfo.DocFileMax) EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_NEXT),FALSE); else EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_NEXT),TRUE);#ifdef W32GUI_DEBUGPrintfDebugWnd("DocWndAddDocFile -> (%d)[%s]\n",DocWndInfo.DocFileMax-1,DocWndInfo.DocFile[DocWndInfo.DocFileMax-1]);#endifend: DocWndInfoUnLock();}void DocWndSetMidifile(char *filename){ char buffer[MAXPATH+10]; char *p; if(DocWndInfoLock()==FALSE) return; strncpy(buffer,filename,MAXPATH-1); buffer[MAXPATH-1] = '\0'; p = strrchr(buffer,'.'); if(p==NULL) goto end; *p = '\0'; strcat(buffer,".txt"); DocWndAddDocFile(buffer); *p = '\0'; strcat(buffer,".doc"); DocWndAddDocFile(buffer); *p = '\0'; strcat(buffer,".hed"); DocWndAddDocFile(buffer); p = strrchr(buffer,'#'); if(p==NULL) goto end; *p = '\0'; strcat(buffer,"readme.txt"); DocWndAddDocFile(buffer); *p = '\0'; strcat(buffer,"readme.1st"); DocWndAddDocFile(buffer); *p = '\0'; strcat(buffer,"壧帉.txt"); DocWndAddDocFile(buffer);end: DocWndInfoUnLock();}#define DOCWNDDOCSIZEMAX (64*1024)void DocWndReadDoc(int num){ struct timidity_file *tf; if(DocWndInfoLock()==FALSE) return; if(num<1) num = 1; if(num>DocWndInfo.DocFileMax) num = DocWndInfo.DocFileMax; if(num==DocWndInfo.DocFileCur) goto end; DocWndInfo.DocFileCur = num; tf = open_file(DocWndInfo.DocFile[DocWndInfo.DocFileCur-1],1,10); if(tf==NULL) goto end; if(DocWndInfo.Text!=NULL){ free(DocWndInfo.Text); DocWndInfo.Text = NULL; } DocWndInfo.Text = (char *)safe_malloc(sizeof(char)*DOCWNDDOCSIZEMAX); DocWndInfo.Text[0] = '\0'; DocWndInfo.TextSize = tf_read(DocWndInfo.Text,1,DOCWNDDOCSIZEMAX-1,tf); DocWndInfo.Text[DocWndInfo.TextSize] = '\0'; close_file(tf); { char info[1024]; char *filename; char *p1, *p2, *p3; p1 = DocWndInfo.DocFile[DocWndInfo.DocFileCur-1]; p2 = pathsep_strrchr(p1); p3 = strrchr(p1,'#'); if(p3!=NULL){ sprintf(info,"(%02d/%02d) %s",DocWndInfo.DocFileCur,DocWndInfo.DocFileMax,p3+1); filename = p2 + 1; } else if(p2!=NULL){ sprintf(info,"(%02d/%02d) %s",DocWndInfo.DocFileCur,DocWndInfo.DocFileMax,p2+1); filename = p2 + 1; } else { sprintf(info,"(%02d/%02d) %s",DocWndInfo.DocFileCur,DocWndInfo.DocFileMax,p1+1); filename = p1; } DocWndSetInfo(info,filename); } DocWndSetText(DocWndInfo.Text,DocWndInfo.TextSize);end: if(DocWndInfo.DocFileCur==1) EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_PREV),FALSE); else EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_PREV),TRUE); if(DocWndInfo.DocFileCur==DocWndInfo.DocFileMax) EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_NEXT),FALSE); else EnableWindow(GetDlgItem(hDocWnd,IDC_BUTTON_NEXT),TRUE); DocWndInfoUnLock();}void DocWndReadDocNext(void){ int num; if(DocWndInfoLock()==FALSE) return; num = DocWndInfo.DocFileCur + 1; if(num>DocWndInfo.DocFileMax) num = DocWndInfo.DocFileMax; DocWndReadDoc(num); DocWndInfoUnLock();}void DocWndReadDocPrev(void){ int num; if(DocWndInfoLock()==FALSE) return; num = DocWndInfo.DocFileCur - 1; if(num<1) num = 1; DocWndReadDoc(num); DocWndInfoUnLock();}void PutsDocWnd(char *str){ HWND hwnd; if(!IsWindow(hDocWnd) || !DocWndFlag) return; hwnd = GetDlgItem(hDocWnd,IDC_EDIT); PutsEditCtlWnd(hwnd,str);}void PrintfDocWnd(char *fmt, ...){ HWND hwnd; va_list ap; if(!IsWindow(hDocWnd) || !DocWndFlag) return; hwnd = GetDlgItem(hDocWnd,IDC_EDIT); va_start(ap, fmt); VprintfEditCtlWnd(hwnd,fmt,ap); va_end(ap);}void ClearDocWnd(void){ HWND hwnd; if(!IsWindow(hDocWnd)) return; hwnd = GetDlgItem(hDocWnd,IDC_EDIT); ClearEditCtlWnd(hwnd);}//****************************************************************************// List Search Dialog#define ListSearchStringMax 256static char ListSearchString[ListSearchStringMax];BOOL CALLBACK ListSearchWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);void InitListSearchWnd(HWND hParentWnd){ strcpy(ListSearchString,""); if (hListSearchWnd != NULL) { DestroyWindow(hListSearchWnd); hListSearchWnd = NULL; } switch(PlayerLanguage){ case LANGUAGE_JAPANESE: hListSearchWnd = CreateDialog (hInst,MAKEINTRESOURCE(IDD_DIALOG_ONE_LINE),hParentWnd,ListSearchWndProc); break; default: case LANGUAGE_ENGLISH: hListSearchWnd = CreateDialog (hInst,MAKEINTRESOURCE(IDD_DIALOG_ONE_LINE_EN),hParentWnd,ListSearchWndProc); break; } ShowWindow(hListSearchWnd,SW_HIDE); UpdateWindow(hListSearchWnd);}#define ListSearchStringBuffSize 1024*2BOOL CALLBACKListSearchWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam){ switch (uMess){ case WM_INITDIALOG: switch(PlayerLanguage){ case LANGUAGE_JAPANESE: SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)"僾儗僀儕僗僩偺専嶕"); SendMessage(GetDlgItem(hwnd,IDC_STATIC_HEAD),WM_SETTEXT,0,(LPARAM)"専嶕僉乕儚乕僪傪擖傟偰偔偩偝偄丅"); SendMessage(GetDlgItem(hwnd,IDC_STATIC_TAIL),WM_SETTEXT,0,(LPARAM)""); SendMessage(GetDlgItem(hwnd,IDC_BUTTON_1),WM_SETTEXT,0,(LPARAM)"専嶕"); SendMessage(GetDlgItem(hwnd,IDC_BUTTON_2),WM_SETTEXT,0,(LPARAM)"師傪専嶕"); SendMessage(GetDlgItem(hwnd,IDC_BUTTON_3),WM_SETTEXT,0,(LPARAM)"暵偠傞"); break; default: case LANGUAGE_ENGLISH: SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)"Playlist Search"); SendMessage(GetDlgItem(hwnd,IDC_STATIC_HEAD),WM_SETTEXT,0,(LPARAM)"Enter search keyword."); SendMessage(GetDlgItem(hwnd,IDC_STATIC_TAIL),WM_SETTEXT,0,(LPARAM)""); SendMessage(GetDlgItem(hwnd,IDC_BUTTON_1),WM_SETTEXT,0,(LPARAM)"SEACH"); SendMessage(GetDlgItem(hwnd,IDC_BUTTON_2),WM_SETTEXT,0,(LPARAM)"NEXT SEARCH"); SendMessage(GetDlgItem(hwnd,IDC_BUTTON_3),WM_SETTEXT,0,(LPARAM)"CLOSE"); break; } return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDCLOSE: ShowWindow(hwnd, SW_HIDE); break; case IDC_BUTTON_1: case IDC_BUTTON_2: { int selected, nfiles, cursel; SendDlgItemMessage(hwnd,IDC_EDIT_ONE_LINE, WM_GETTEXT,(WPARAM)250,(LPARAM)ListSearchString); w32g_get_playlist_index(&selected, &nfiles, &cursel); if ( LOWORD(wParam) == IDC_BUTTON_2 ) cursel++; if ( strlen ( ListSearchString ) > 0 ) { char buff[ListSearchStringBuffSize]; for ( ; cursel < nfiles; cursel ++ ) { int result = SendDlgItemMessage(hListWnd,IDC_LISTBOX_PLAYLIST, LB_GETTEXTLEN,(WPARAM)cursel, 0 ); if ( result < ListSearchStringBuffSize ) { result = SendDlgItemMessage(hListWnd,IDC_LISTBOX_PLAYLIST, LB_GETTEXT,(WPARAM)cursel,(LPARAM)buff); if ( result == LB_ERR ) { cursel = LB_ERR; break; } if ( strstr ( buff, ListSearchString ) != NULL ) { break; } } else if ( result == LB_ERR ) { cursel = LB_ERR; break; } } if ( cursel >= nfiles ) { cursel = LB_ERR; } } else { cursel = LB_ERR; } if ( cursel != LB_ERR ) { SendDlgItemMessage(hListWnd,IDC_LISTBOX_PLAYLIST, LB_SETCURSEL,(WPARAM)cursel,0); SetNumListWnd(cursel,nfiles); if ( LOWORD(wParam) == IDC_BUTTON_1 ) HideListSearch(); } } break; case IDC_BUTTON_3: HideListSearch(); break; default: return FALSE; } break; case WM_CLOSE: ShowWindow(hListSearchWnd, SW_HIDE); break; default: return FALSE; } return FALSE;}void ShowListSearch(void){ ShowWindow(hListSearchWnd, SW_SHOW);}void HideListSearch(void){ ShowWindow(hListSearchWnd, SW_HIDE);}//****************************************************************************// SoundSpec WindowBOOL CALLBACK SoundSpecWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam);void InitSoundSpecWnd(HWND hParentWnd){ if (hSoundSpecWnd != NULL) { DestroyWindow(hSoundSpecWnd); hSoundSpecWnd = NULL; } hSoundSpecWnd = CreateDialog (hInst,MAKEINTRESOURCE(IDD_DIALOG_SOUNDSPEC),hParentWnd,SoundSpecWndProc); ShowWindow(hSoundSpecWnd,SW_HIDE); UpdateWindow(hSoundSpecWnd);}BOOL CALLBACKSoundSpecWndProc(HWND hwnd, UINT uMess, WPARAM wParam, LPARAM lParam){ switch (uMess){ case WM_INITDIALOG: return FALSE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDCLOSE: ShowWindow(hwnd, SW_HIDE); MainWndUpdateSoundSpecButton(); break; default: return FALSE; } case WM_SIZE: return FALSE; case WM_CLOSE: ShowWindow(hSoundSpecWnd, SW_HIDE); MainWndUpdateSoundSpecButton(); break; default: return FALSE; } return FALSE;}void w32g_open_doc(int close_if_no_doc){ if(close_if_no_doc==1 && DocWndInfo.DocFileMax <= 0) ShowSubWindow(hDocWnd, 0); else { DocWndReadDoc(1); if(close_if_no_doc!=2) ShowSubWindow(hDocWnd, 1); }}void w32g_setup_doc(int idx){ char *filename; DocWndInfoReset(); if((filename = w32g_get_playlist(idx)) == NULL) return; DocWndSetMidifile(filename);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -