--- np2/win9x/dialog/d_mpu98.cpp 2003/10/31 03:40:10 1.4 +++ np2/win9x/dialog/d_mpu98.cpp 2003/11/21 06:51:14 1.6 @@ -6,8 +6,8 @@ #include "sysmng.h" #include "dialog.h" #include "dialogs.h" -#include "bit2res.h" #include "pccore.h" +#include "dipswbmp.h" #ifdef __cplusplus @@ -67,26 +67,6 @@ static void setmpujmp(HWND hWnd, BYTE va } } -static void setmpuiodip(BYTE *image, int px, int py, int align, BYTE v) { - - int i, j, y; - - px *= 9; - px++; - py *= 9; - for (i=0; i<4; i++, px+=9, v<<=1) { - y = py + ((v&0x80)?5:9); - for (j=0; j<3; j++) { - dlgs_linex(image, px, y+j, 7, align, 2); - } - } -} - -static void setmpuintdip(BYTE *image, int px, int py, int align, BYTE v) { - - dlgs_setjumpery(image, px + 3 - (mpu & 3), py, align); -} - // ---- @@ -172,11 +152,13 @@ static void mpucmddipsw(HWND hWnd) { RECT rect1; RECT rect2; POINT p; + BOOL redraw; BYTE bit; GetWindowRect(GetDlgItem(hWnd, IDC_MPUDIP), &rect1); GetClientRect(GetDlgItem(hWnd, IDC_MPUDIP), &rect2); GetCursorPos(&p); + redraw = FALSE; p.x += rect2.left - rect1.left; p.y += rect2.top - rect1.top; p.x /= 9; @@ -188,7 +170,7 @@ static void mpucmddipsw(HWND hWnd) { bit = 0x80 >> (p.x - 2); mpu ^= bit; setmpuiopara(hWnd, IDC_MPUIO, mpu); - InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP), NULL, TRUE); + redraw = TRUE; } else if ((p.x >= 9) && (p.x < 13)) { bit = (BYTE)(12 - p.x); @@ -196,38 +178,12 @@ static void mpucmddipsw(HWND hWnd) { mpu &= ~0x3; mpu |= bit; setmpuintpara(hWnd, IDC_MPUINT, mpu); - InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP), NULL, TRUE); + redraw = TRUE; } } -} - -static void mpudrawdipsw(HWND hWnd, HDC hdc) { - - BITMAPINFO *bmi; - HBITMAP hbmp; - BYTE *image; - int align; - BYTE *imgbtm; - HDC hmdc; - - bmi = (BITMAPINFO *)_MALLOC(bit2res_getsize(&mpudip), "bitmap"); - if (bmi == NULL) { - return; + if (redraw) { + InvalidateRect(GetDlgItem(hWnd, IDC_MPUDIP), NULL, TRUE); } - bit2res_sethead(bmi, &mpudip); - hbmp = CreateDIBSection(hdc, bmi, DIB_RGB_COLORS, - (void **)&image, NULL, 0); - bit2res_setdata(image, &mpudip); - align = ((mpudip.x + 7) / 2) & ~3; - imgbtm = image + align * (mpudip.y - 1); - setmpuiodip(imgbtm, 2, 1, align, mpu); - setmpuintdip(imgbtm, 9, 1, align, mpu); - hmdc = CreateCompatibleDC(hdc); - SelectObject(hmdc, hbmp); - BitBlt(hdc, 0, 0, mpudip.x, mpudip.y, hmdc, 0, 0, SRCCOPY); - DeleteDC(hmdc); - DeleteObject(hbmp); - _MFREE(bmi); } LRESULT CALLBACK MidiDialogProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { @@ -275,7 +231,8 @@ LRESULT CALLBACK MidiDialogProc(HWND hWn case WM_DRAWITEM: if (LOWORD(wp) == IDC_MPUDIP) { - mpudrawdipsw(hWnd, ((LPDRAWITEMSTRUCT)lp)->hDC); + dlgs_drawbmp(((LPDRAWITEMSTRUCT)lp)->hDC, + dipswbmp_getmpu(mpu)); } return(FALSE);