📄 w32g_i.c
字号:
y++; for(x=rc.right-2;x<=rc.right;x++) SetPixelV(Canvas.hmdc,x,y,colorFG); y++; for(x=rc.right-4;x<=rc.right;x++) SetPixelV(Canvas.hmdc,x,y,colorFG); } } } InvalidateRect(hCanvasWnd,(RECT *)&(Canvas.rcMapSub),FALSE); GDI_UNLOCK(); } } if(!Canvas.MapResidual && !flag) return; change_flag = 0;#ifndef MAPBAR_LIKE_TMIDI GDI_LOCK(); for(i=0;i<Canvas.MapCh;i++){ for(j=0;j<Canvas.MapBarMax;j++){ if(Canvas.MapMap[i][j]!=Canvas.MapMapOld[i][j] || flag){ int x,y; COLORREF color = CanvasColor(Canvas.MapMap[i][j]); rc.left = Canvas.rcMap.left + (Canvas.MapBarWidth + 1) * i; rc.right = rc.left -1 + Canvas.MapBarWidth; rc.top = Canvas.rcMap.top + (2 + 1) * j; rc.bottom = rc.top -1 + 2; for(x=rc.left;x<=rc.right;x++) for(y=rc.top;y<=rc.bottom;y++) SetPixelV(Canvas.hmdc,x,y,color); change_flag = 1; } } } GDI_UNLOCK();#else GDI_LOCK(); if(Canvas.MapMode==CMAP_MODE_16){ for(i=0;i<Canvas.MapCh;i++){ for(j=0;j<Canvas.MapBarMax;j++){ if(Canvas.MapMap[i][j]!=Canvas.MapMapOld[i][j] || flag){ int x,y; COLORREF color = CanvasColor(Canvas.MapMap[i][j]); rc.left = Canvas.rcMap.left + (Canvas.MapBarWidth + 1) * i; rc.right = rc.left -1 + Canvas.MapBarWidth; rc.top = Canvas.rcMap.top + (2 + 1) * j; rc.bottom = rc.top -1 + 2; for(x=rc.left;x<=rc.right;x++){ for(y=rc.top;y<=rc.bottom;y++) SetPixelV(Canvas.hmdc,x,y,color); } change_flag = 1; } } } } else { for(i=0;i<Canvas.MapCh;i++){ for(j=0;j<Canvas.MapBarMax;j++){ if(Canvas.MapMap[i][j]!=Canvas.MapMapOld[i][j] || flag){ int x,y; COLORREF color = CanvasColor(Canvas.MapMap[i][j]); if(i<=15){ rc.left = Canvas.rcMap.left + (Canvas.MapBarWidth + 1) * i; rc.right = rc.left -1 + Canvas.MapBarWidth; rc.top = -1 + Canvas.rcMap.top + (2 + 1) * j; rc.bottom = rc.top -1 + 2; } else { rc.left = Canvas.rcMap.left + (Canvas.MapBarWidth + 1) * (i-16); rc.right = rc.left -1 + Canvas.MapBarWidth; rc.top = -1 + Canvas.rcMap.top + (2 + 1) * j + Canvas.MapBarMax*(2+1) + 2 ; rc.bottom = rc.top -1 + 2; } for(x=rc.left;x<=rc.right;x++) for(y=rc.top;y<=rc.bottom;y++) SetPixelV(Canvas.hmdc,x,y,color); change_flag = 1; } } } } GDI_UNLOCK();#endif#ifdef CMAP_ALL_UPDATE if(change_flag) InvalidateRect(hCanvasWnd,NULL,FALSE);#else if(change_flag) InvalidateRect(hCanvasWnd,(RECT *)&(Canvas.rcMapMap),FALSE);#endif if(Canvas.UpdateAll) InvalidateRect(hCanvasWnd,NULL,FALSE); if(Canvas.MapResidual<0) Canvas.MapResidual = 0;}static void CanvasSleepClear(void){ RECT rc; HPEN hPen; HBRUSH hBrush; HGDIOBJ hgdiobj_hpen, hgdiobj_hbrush; GDI_LOCK(); // gdi_lock hPen = CreatePen(PS_SOLID,1,GetSysColor(COLOR_SCROLLBAR)); hBrush = CreateSolidBrush(GetSysColor(COLOR_SCROLLBAR)); hgdiobj_hpen = SelectObject(Canvas.hmdc, hPen); hgdiobj_hbrush = SelectObject(Canvas.hmdc, hBrush); GetClientRect(Canvas.hwnd, &rc); Rectangle(Canvas.hmdc,rc.left,rc.top,rc.right,rc.bottom); SelectObject(Canvas.hmdc, hgdiobj_hpen); DeleteObject(hPen); SelectObject(Canvas.hmdc, hgdiobj_hbrush); DeleteObject(hBrush); GDI_UNLOCK(); // gdi_lock InvalidateRect(hCanvasWnd, NULL, FALSE);}static void CanvasSleepReset(void){ Canvas.PaintDone = 0;}static void CanvasSleepReadPanelInfo(int flag){}static int CanvasSleepDone = 0;static void CanvasSleepUpdate(int flag){ HDC hdc; RECT rc; int x,y; CanvasSleepReset(); GDI_LOCK(); // gdi_lock hdc = CreateCompatibleDC(Canvas.hmdc); SelectObject(hdc,Canvas.hBitmapSleep); GetClientRect(Canvas.hwnd, &rc); x = (rc.right - rc.left - Canvas.rcSleep.right)/2; y = (rc.bottom - rc.top - Canvas.rcSleep.bottom)/2; if(x<0) x = 0; if(y<0) y = 0; BitBlt(Canvas.hmdc,x,y,Canvas.rcSleep.right,Canvas.rcSleep.bottom,hdc,0,0,SRCCOPY); DeleteDC(hdc); GDI_UNLOCK(); // gdi_lock}// Canvas GSLCDstatic void CanvasGSLCDReset(void){ int i, j; for(i = 0; i < 16; i++) { for(j = 0; j < 16; j++) { Canvas.GSLCD[i][j] = 0; Canvas.GSLCD_old[i][j] = 0; } } Canvas.PaintDone = 0;}static void CanvasGSLCDReadPanelInfo(int flag){ int i, j; if (!CanvasOK) {return;} if (!PInfoOK) {return;} if (Canvas.UpdateAll) {flag = 1;} if (!Panel->changed && !flag) {return;} for(i = 0; i < 16; i++) { for(j = 0; j < 16; j++) { Canvas.GSLCD_old[i][j] = Canvas.GSLCD[i][j]; Canvas.GSLCD[i][j] = Panel->GSLCD[i][j]; } }}#define CGSLCD_BG RGB(0x00,0xf0,0x00)#define CGSLCD_ON RGB(0x00,0x00,0x00)#define CGSLCD_OFF RGB(0x00,0xc0,0x00)static void CanvasGSLCDUpdate(int flag){ int i, j, x, y, changed = 0; COLORREF colorON = CGSLCD_ON, colorOFF = CGSLCD_OFF; HPEN hPen; HBRUSH hBrush; HGDIOBJ hgdiobj_hpen, hgdiobj_hbrush; if(!PInfoOK) {return;} if(Canvas.UpdateAll) {flag = 1;} if(!Panel->changed && !flag) {return;} GDI_LOCK(); // gdi_lock for (i = 0; i < 16; i++) { for (j = 0; j < 16; j++) { x = Canvas.rcGSLCD.left + i * 6; y = Canvas.rcGSLCD.top + j * 4; if (flag || Canvas.GSLCD[i][j] != Canvas.GSLCD_old[i][j]) { changed = 1; if (Canvas.GSLCD[i][j] == 1) { hPen = CreatePen(PS_SOLID, 1, colorON); hBrush = CreateSolidBrush(colorON); } else { hPen = CreatePen(PS_SOLID, 1, colorOFF); hBrush = CreateSolidBrush(colorOFF); } hgdiobj_hpen = SelectObject(Canvas.hmdc, hPen); hgdiobj_hbrush = SelectObject(Canvas.hmdc, hBrush); Rectangle(Canvas.hmdc, x, y, x + 5, y + 3); SelectObject(Canvas.hmdc, hgdiobj_hpen); DeleteObject(hPen); SelectObject(Canvas.hmdc, hgdiobj_hbrush); DeleteObject(hBrush); } } } if (changed) { GDI_UNLOCK(); InvalidateRect(Canvas.hwnd, (RECT *)&Canvas.rcGSLCD, FALSE); GDI_LOCK(); } GDI_UNLOCK(); // gdi_lock if(flag) {InvalidateRect(hCanvasWnd, NULL, FALSE);}}static void CanvasGSLCDClear(void){ HPEN hPen; HBRUSH hBrush; HGDIOBJ hgdiobj_hpen, hgdiobj_hbrush; COLORREF BGcolor; if(!CanvasOK) return; GDI_LOCK(); // gdi_lock BGcolor = RGB(0,0,0); hPen = CreatePen(PS_SOLID,1,BGcolor); hBrush = CreateSolidBrush(BGcolor); hgdiobj_hpen = SelectObject(Canvas.hmdc, hPen); hgdiobj_hbrush = SelectObject(Canvas.hmdc, hBrush); Rectangle(Canvas.hmdc, Canvas.rcMe.left,Canvas.rcMe.top,Canvas.rcMe.right,Canvas.rcMe.bottom); SelectObject(Canvas.hmdc, hgdiobj_hpen); DeleteObject(hPen); SelectObject(Canvas.hmdc, hgdiobj_hbrush); DeleteObject(hBrush); BGcolor = CGSLCD_BG; hPen = CreatePen(PS_SOLID,1,BGcolor); hBrush = CreateSolidBrush(BGcolor); hgdiobj_hpen = SelectObject(Canvas.hmdc, hPen); hgdiobj_hbrush = SelectObject(Canvas.hmdc, hBrush); Rectangle(Canvas.hmdc, Canvas.rcMe.left + 1,Canvas.rcMe.top + 1,Canvas.rcMe.right - 1,Canvas.rcMe.bottom - 1); SelectObject(Canvas.hmdc, hgdiobj_hpen); DeleteObject(hPen); SelectObject(Canvas.hmdc, hgdiobj_hbrush); DeleteObject(hBrush); GDI_UNLOCK(); // gdi_lock CanvasGSLCDReset(); CanvasGSLCDReadPanelInfo(1); CanvasGSLCDUpdate(1); InvalidateRect(hCanvasWnd, NULL, FALSE);}// Canvas Keyboardstatic void CanvasKeyboardReset(void){ int i,j; int ChFrom = (Canvas.CKPart - 1) * Canvas.CKCh; int ChTo = Canvas.CKPart * Canvas.CKCh - 1; for(i=ChFrom;i<=ChTo;i++){ for(j=0;j<4;j++){ Canvas.CKxnote[i][j] = 0; Canvas.CKxnote_old[i][j] = 0; } } Canvas.PaintDone = 0;}static void CanvasKeyboardReadPanelInfo(int flag){ int i,j; int ChFrom, ChTo; if(!CanvasOK) return; if(!PInfoOK) return; ChFrom = (Canvas.CKPart - 1) * Canvas.CKCh; ChTo = Canvas.CKPart * Canvas.CKCh - 1; if(Canvas.UpdateAll) flag = 1; if(!Panel->changed && !flag) return; for(i=ChFrom;i<=ChTo;i++) for(j=0;j<4;j++){ Canvas.CKxnote_old[i][j] = Canvas.CKxnote[i][j]; Canvas.CKxnote[i][j] = Panel->xnote[i][j]; }}#define CK_KEY_BLACK 1#define CK_KEY_WHITE 2#define CK_ON RGB(0xff,0x00,0x00)#define CK_OFF_WHITE RGB(0xff,0xff,0xff)#define CK_OFF_BLACK RGB(0x00,0x00,0x00)#define CK_DOFF_WHITE RGB(0xcc,0xcc,0xcc)#define CK_DOFF_BLACK RGB(0x00,0x00,0x00)static void CanvasKeyboardUpdate(int flag){ int j,k,l; int channel; int ChFrom, ChTo; if(!PInfoOK) return; if(Canvas.UpdateAll) flag = 1; if(!COMPARE_CHANNELMASK(Canvas.DrumChannel,drumchannels)) flag = 1; if(!Panel->changed && !flag) return; ChFrom = (Canvas.CKPart - 1) * Canvas.CKCh; ChTo = Canvas.CKPart * Canvas.CKCh - 1; GDI_LOCK(); // gdi_lock for(channel=ChFrom;channel<=ChTo;channel++){ int change_flag = 0; int drumflag = IS_SET_CHANNELMASK(drumchannels,channel); COLORREF colorON, colorOFF_WHITE, colorOFF_BLACK; if(drumflag){ colorON = CK_ON; colorOFF_WHITE = CK_DOFF_WHITE; colorOFF_BLACK = CK_OFF_BLACK; } else { colorON = CK_ON; colorOFF_WHITE = CK_OFF_WHITE; colorOFF_BLACK = CK_OFF_BLACK; } for(j=0;j<4;j++){ int32 xnote, xnote_diff; xnote = Canvas.CKxnote[channel][j]; xnote_diff = Canvas.CKxnote[channel][j] ^ Canvas.CKxnote_old[channel][j]; if(!flag && xnote_diff == 0) continue; for(k=0;k<32;k++){ int key = 0; int KeyOn = 0; int note = j*32+k; int reff = (int32)1 << k; int x,y; if(note < Canvas.CKNoteFrom || note > Canvas.CKNoteTo) continue; if(!flag && !(xnote_diff & reff)) continue; if(xnote & reff) KeyOn = 1; note = note % 12; if(note == 1 || note == 3 || note == 6 || note == 8 || note == 10) key = CK_KEY_BLACK; else key = CK_KEY_WHITE; x = Canvas.rcKeyboard.left + j * 32 + k - Canvas.CKNoteFrom; y = Canvas.rcKeyboard.top + (channel - ChFrom) * 4; switch(key){ case CK_KEY_BLACK: if(KeyOn){ for(l=0;l<2;l++) SetPixelV(Canvas.hmdc,x,y+l,colorON); SetPixelV(Canvas.hmdc,x,y+2,colorOFF_WHITE); } else { for(l=0;l<2;l++) SetPixelV(Canvas.hmdc,x,y+l,colorOFF_BLACK); SetPixelV(Canvas.hmdc,x,y+2,colorOFF_WHITE); } break; case CK_KEY_WHITE: if(KeyOn){ SetPixelV(Canvas.hmdc,x,y,colorOFF_WHITE); for(l=1;l<3;l++) SetPixelV(Canvas.hmdc,x,y+l,colorON); } else { SetPixelV(Canvas.hmdc,x,y,colorOFF_WHITE); for(l=1;l<3;l++) SetPixelV(Canvas.hmdc,x,y+l,colorOFF_WHITE); } break; default: break; } change_flag = 1; } } if(change_flag){ RECT rc; GDI_UNLOCK(); GetClientRect(Canvas.hwnd,&rc); rc.top = Canvas.rcKeyboard.top + (channel - ChFrom) * 4; rc.bottom = rc.top + 4; InvalidateRect(Canvas.hwnd, &rc, FALSE); GDI_LOCK(); } } GDI_UNLOCK(); // gdi_lock if(flag) InvalidateRect(hCanvasWnd, NULL, FALSE); Canvas.DrumChannel = drumchannels;}static void CanvasKeyboardClear(void){ int i; HPEN hPen; HBRUSH hBrush; HGDIOBJ hgdiobj_hpen, hgdiobj_hbrush; COLORREF FGcolor, BGcolor; HFONT hfont; HGDIOBJ hgdiobj; RECT rc; char buffer[16]; if(!CanvasOK) return; GDI_LOCK(); // gdi_lock#if 0 hPen = CreatePen(PS_SOLID,1,CanvasColor(CC_BACK)); hBrush = CreateSolidBrush(CanvasColor(CC_BACK));#else FGcolor = RGB(0xff,0xff,0xff); BGcolor = RGB(0x00,0x00,0x00); hPen = CreatePen(PS_SOLID,1,BGcolor); hBrush = CreateSolidBrush(BGcolor);#endif hgdiobj_hpen = SelectObject(Canvas.hmdc, hPen); hgdiobj_hbrush = SelectObject(Canvas.hmdc, hBrush); Rectangle(Canvas.hmdc, Canvas.rcMe.left,Canvas.rcMe.top,Canvas.rcMe.right,Canvas.rcMe.bottom); SelectObject(Canvas.hmdc, hgdiobj_hpen); DeleteObject(hPen); SelectObject(Canvas.hmdc, hgdiobj_hbrush); DeleteObject(hBrush); hfont = CreateFont(7,7,0,0,FW_DONTCARE,FALSE,FALSE,FALSE, DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,"Arial Bold"); hgdiobj = SelectObject(Canvas.hmdc,hfont); SetTextAlign(Canvas.hmdc, TA_LEFT | TA_TOP | TA_NOUPDATECP); rc.left = Canvas.rcMe.left+1 ; rc.top = Canvas.rcMe.bottom-7; rc.right = Canvas.rcMe.left+1 + 40; rc.bottom = Canvas.rcMe.bottom; SetTextColor(Canvas.hmdc,RGB(0xff,0xff,0xff)); SetBkColor(Canvas.hmdc,RGB(0x00,0x00,0x00)); strcpy(buffer," "); ExtTextOut(Canvas.hmdc,rc.left,rc.top,ETO_CLIPPED|ETO_OPAQUE,&rc, buffer,strlen(buffer),NULL); for(i=1;i<=3;i++){ if(i==Canvas.CKPart){ SetTextColor(Canvas.hmdc,RGB(0xff,0xff,0xff)); SetBkColor(Canvas.hmdc,RGB(0x00,0x00,0x00)); } else { SetTextColor(Canvas.hmdc,RGB(0x80,0x80,0x80)); SetBkColor(Canvas.hmdc,RGB(0x00,0x00,0x00)); } rc.left = Canvas.rcMe.left+1 + 0 + (i-1)*24; rc.top = Canvas.rcMe.bottom-7; rc.right = Canvas.rcMe.left+1 + 0 + (i)*24 - 1; rc.bottom = Canvas.rcMe.bottom; sprintf(buffer,"[%c]",i+'A'-1); ExtTextOut(Canvas.hmdc,rc.left,rc.top,ETO_CLIPPED|ETO_OPAQUE,&rc, buffer,strlen(buffer),NULL); } if((HGDIOBJ)hgdiobj!=(HGDIOBJ)NULL && (HGDIOBJ)hgdiobj!=(HGDIOBJ)GDI_ERROR) SelectObject(Canvas.hmdc,hgdiobj); DeleteObject(hfont); GDI_UNLOCK(); // gdi_lock CanvasKeyboardReset(); CanvasKeyboardReadPanelInfo(1); CanvasKeyboardUpdate(1); InvalidateRect(hCanvasWnd, NULL, FALSE);}// Canvas Allstatic void CanvasPain
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -