|
|
| version 1.4, 2003/10/29 14:02:35 | version 1.6, 2003/10/30 09:08:50 |
|---|---|
| Line 9 | Line 9 |
| #include "toolwin.h" | #include "toolwin.h" |
| #include "ini.h" | #include "ini.h" |
| #include "dialog.h" | #include "dialog.h" |
| #include "dialogs.h" | |
| #include "pccore.h" | #include "pccore.h" |
| #include "diskdrv.h" | #include "diskdrv.h" |
| #ifdef STRICT | |
| #define SCPROC WNDPROC | |
| #else | |
| #define SCPROC FARPROC | |
| #endif | |
| enum { | enum { |
| IDC_TOOLHDDACC = 0, | IDC_TOOLHDDACC = 0, |
| IDC_TOOLFDD1ACC, | IDC_TOOLFDD1ACC, |
| Line 32 enum { | Line 26 enum { |
| IDC_TOOLFDD2EJECT, | IDC_TOOLFDD2EJECT, |
| IDC_MAXITEMS, | IDC_MAXITEMS, |
| IDC_BASE = 3000 | IDC_BASE = 3000, |
| IDC_SKINDEF = 3100, | |
| IDC_SKINSEL = 3101, | |
| IDC_TOOLCLOSE = 3102 | |
| }; | }; |
| typedef struct { | typedef struct { |
| Line 55 const char *text; | Line 53 const char *text; |
| } SUBITEM; | } SUBITEM; |
| typedef struct { | typedef struct { |
| HWND hwnd; | HWND hwnd; |
| HBITMAP hbmp; | HBITMAP hbmp; |
| BYTE fddaccess[2]; | BYTE fddaccess[2]; |
| BYTE hddaccess; | BYTE hddaccess; |
| BYTE _padding; | BYTE _padding; |
| int winflg; | int winflg; |
| int wingx; | int wingx; |
| int wingy; | int wingy; |
| int wintx; | int wintx; |
| int winty; | int winty; |
| int parentcn; | UINT parentcn; |
| int parentx; | int parentx; |
| int parenty; | int parenty; |
| HFONT hfont; | HFONT hfont; |
| HDC hdcfont; | HDC hdcfont; |
| HBRUSH access[2]; | HBRUSH access[2]; |
| HWND sub[IDC_MAXITEMS]; | HWND sub[IDC_MAXITEMS]; |
| SCPROC subproc[IDC_MAXITEMS]; | SUBCLASSPROC subproc[IDC_MAXITEMS]; |
| } TOOLWIN; | } TOOLWIN; |
| Line 100 static const DISKACC diskacc[3] = { | Line 98 static const DISKACC diskacc[3] = { |
| // ---- | // ---- |
| static void skinsetdef(void) { | static HBITMAP skinload(const char *path) { |
| char fname[MAX_PATH]; | |
| HBITMAP ret; | |
| ZeroMemory(&toolskin, sizeof(toolskin)); | ZeroMemory(&toolskin, sizeof(toolskin)); |
| toolskin.fontsize = 12; | toolskin.fontsize = 12; |
| Line 108 static void skinsetdef(void) { | Line 109 static void skinsetdef(void) { |
| toolskin.color1 = 0x600000; | toolskin.color1 = 0x600000; |
| toolskin.color2 = 0xff0000; | toolskin.color2 = 0xff0000; |
| CopyMemory(subitem, defsubitem, sizeof(defsubitem)); | CopyMemory(subitem, defsubitem, sizeof(defsubitem)); |
| } | |
| static HBITMAP skinload(const char *path) { | |
| char fname[MAX_PATH]; | |
| if (path) { | if (path) { |
| ini_read(path, skintitle, skinini, sizeof(skinini)/sizeof(INITBL)); | ini_read(path, skintitle, skinini, sizeof(skinini)/sizeof(INITBL)); |
| Line 121 static HBITMAP skinload(const char *path | Line 117 static HBITMAP skinload(const char *path |
| milstr_ncpy(fname, path, sizeof(fname)); | milstr_ncpy(fname, path, sizeof(fname)); |
| file_cutname(fname); | file_cutname(fname); |
| file_catname(fname, toolskin.main, sizeof(fname)); | file_catname(fname, toolskin.main, sizeof(fname)); |
| return((HBITMAP)LoadImage(hInst, fname, IMAGE_BITMAP, | ret = (HBITMAP)LoadImage(hInst, fname, IMAGE_BITMAP, |
| 0, 0, LR_LOADFROMFILE)); | 0, 0, LR_LOADFROMFILE); |
| } | if (ret != NULL) { |
| else { | return(ret); |
| return(LoadBitmap(hInst, "NP2TOOL")); | } |
| } | } |
| return(LoadBitmap(hInst, "NP2TOOL")); | |
| } | } |
| Line 180 static void calctextsize(char *path, int | Line 177 static void calctextsize(char *path, int |
| milstr_ncat(path, work, leng); | milstr_ncat(path, work, leng); |
| } | } |
| static void setlist(UINT drv) { | static void setlist(HWND hwnd, const TOOLFDD *fdd, UINT sel) { |
| HWND hwnd; | |
| RECT rc; | RECT rc; |
| int width; | int width; |
| TOOLFDD *fdd; | |
| char *p; | |
| UINT i; | |
| char basedir[MAX_PATH]; | char basedir[MAX_PATH]; |
| UINT i; | |
| const char *p; | |
| char dir[MAX_PATH]; | char dir[MAX_PATH]; |
| char *q; | const char *q; |
| if (drv >= FDDLIST_DRV) { | SendMessage(hwnd, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0); |
| return; | |
| } | |
| hwnd = toolwin.sub[fddlist[drv]]; | |
| GetClientRect(hwnd, &rc); | GetClientRect(hwnd, &rc); |
| width = rc.right - rc.left - 6; // border size? | width = rc.right - rc.left - 6; // border size? |
| SendMessage(hwnd, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0); | |
| fdd = np2tool.fdd + drv; | |
| p = fdd->name[0]; | |
| basedir[0] = '\0'; | basedir[0] = '\0'; |
| if (fdd->insert) { | if (sel < fdd->cnt) { |
| milstr_ncpy(basedir, p, sizeof(basedir)); | milstr_ncpy(basedir, fdd->name[fdd->pos[sel]], sizeof(basedir)); |
| file_cutname(basedir); | file_cutname(basedir); |
| } | } |
| for (i=0; i<FDDLIST_MAX; i++) { | for (i=0; i<fdd->cnt; i++) { |
| if (p[0] == '\0') { | p = fdd->name[fdd->pos[i]]; |
| break; | |
| } | |
| milstr_ncpy(dir, p, sizeof(dir)); | milstr_ncpy(dir, p, sizeof(dir)); |
| file_cutname(dir); | file_cutname(dir); |
| if (!file_cmpname(basedir, dir)) { | if (!file_cmpname(basedir, dir)) { |
| q = file_getname(p); | q = file_getname((char *)p); |
| } | } |
| else { | else { |
| calctextsize(dir, sizeof(dir), p, width); | calctextsize(dir, sizeof(dir), p, width); |
| Line 222 static void setlist(UINT drv) { | Line 209 static void setlist(UINT drv) { |
| SendMessage(hwnd, CB_INSERTSTRING, (WPARAM)i, (LPARAM)q); | SendMessage(hwnd, CB_INSERTSTRING, (WPARAM)i, (LPARAM)q); |
| p += sizeof(fdd->name[0]); | p += sizeof(fdd->name[0]); |
| } | } |
| if (fdd->insert) { | if (sel < fdd->cnt) { |
| SendMessage(hwnd, CB_SETCURSEL, (WPARAM)0, (LPARAM)0); | SendMessage(hwnd, CB_SETCURSEL, (WPARAM)sel, (LPARAM)0); |
| } | } |
| } | } |
| static void sellist(UINT drv) { | static void sellist(UINT drv) { |
| HWND hwnd; | HWND hwnd; |
| TOOLFDD *fdd; | |
| UINT sel; | UINT sel; |
| char path[MAX_PATH]; | |
| if (drv >= FDDLIST_DRV) { | if (drv >= FDDLIST_DRV) { |
| return; | return; |
| } | } |
| hwnd = toolwin.sub[fddlist[drv]]; | hwnd = toolwin.sub[fddlist[drv]]; |
| fdd = np2tool.fdd + drv; | |
| sel = (UINT)SendMessage(hwnd, CB_GETCURSEL, 0, 0); | sel = (UINT)SendMessage(hwnd, CB_GETCURSEL, 0, 0); |
| if (sel < FDDLIST_MAX) { | if (sel < fdd->cnt) { |
| milstr_ncpy(path, np2tool.fdd[drv].name[sel], sizeof(path)); | diskdrv_setfdd(drv, fdd->name[fdd->pos[sel]], 0); |
| diskdrv_setfdd(drv, path, 0); | fdd->insert = 1; |
| toolwin_setfdd(drv, path); | setlist(hwnd, fdd, sel); |
| } | } |
| } | } |
| static void remakefddlist(UINT drv) { | |
| TOOLFDD *fdd; | |
| char *p; | |
| UINT cnt; | |
| char *q; | |
| char *fname[FDDLIST_MAX]; | |
| UINT i; | |
| UINT j; | |
| UINT sel; | |
| if (drv >= FDDLIST_DRV) { | |
| return; | |
| } | |
| fdd = np2tool.fdd + drv; | |
| p = fdd->name[0]; | |
| for (cnt=0; cnt<FDDLIST_MAX; cnt++) { | |
| if (p[0] == '\0') { | |
| break; | |
| } | |
| q = file_getname(p); | |
| fname[cnt] = q; | |
| for (i=0; i<cnt; i++) { | |
| if (file_cmpname(q, fname[fdd->pos[i]]) < 0) { | |
| break; | |
| } | |
| } | |
| for (j=cnt; j>i; j--) { | |
| fdd->pos[j] = fdd->pos[j-1]; | |
| } | |
| fdd->pos[i] = cnt; | |
| p += sizeof(fdd->name[0]); | |
| } | |
| fdd->cnt = cnt; | |
| sel = (UINT)-1; | |
| if (fdd->insert) { | |
| for (i=0; i<cnt; i++) { | |
| if (fdd->pos[i] == 0) { | |
| sel = i; | |
| break; | |
| } | |
| } | |
| } | |
| setlist(toolwin.sub[fddlist[drv]], fdd, sel); | |
| } | |
| static void accdraw(HWND hWnd, BYTE count) { | static void accdraw(HWND hWnd, BYTE count) { |
| HDC hdc; | HDC hdc; |
| Line 331 static LRESULT CALLBACK twsub(HWND hWnd, | Line 365 static LRESULT CALLBACK twsub(HWND hWnd, |
| return(CallWindowProc(toolwin.subproc[idc], hWnd, msg, wp, lp)); | return(CallWindowProc(toolwin.subproc[idc], hWnd, msg, wp, lp)); |
| } | } |
| static void toolwincreate(HWND hWnd, LPARAM lp) { | static void toolwincreate(HWND hWnd) { |
| HDC hdc; | HDC hdc; |
| HINSTANCE hinstance; | |
| const SUBITEM *p; | const SUBITEM *p; |
| UINT i; | UINT i; |
| HWND sub; | HWND sub; |
| Line 350 const SUBITEM *p; | Line 383 const SUBITEM *p; |
| toolwin.access[0] = CreateSolidBrush(0x000060); | toolwin.access[0] = CreateSolidBrush(0x000060); |
| toolwin.access[1] = CreateSolidBrush(0x0000ff); | toolwin.access[1] = CreateSolidBrush(0x0000ff); |
| hinstance = ((LPCREATESTRUCT)lp)->hInstance; | |
| p = subitem; | p = subitem; |
| for (i=0; i<IDC_MAXITEMS; i++) { | for (i=0; i<IDC_MAXITEMS; i++) { |
| sub = CreateWindow(p->cname, p->text, | sub = CreateWindow(p->cname, p->text, |
| WS_CHILD | p->style, p->posx, p->posy, p->width, p->height, | WS_CHILD | p->style, p->posx, p->posy, p->width, p->height, |
| hWnd, (HMENU)(i + IDC_BASE), hinstance, NULL); | hWnd, (HMENU)(i + IDC_BASE), hInst, NULL); |
| toolwin.sub[i] = sub; | toolwin.sub[i] = sub; |
| toolwin.subproc[i] = (SCPROC)GetWindowLong(sub, GWL_WNDPROC); | toolwin.subproc[i] = (SUBCLASSPROC)GetWindowLong(sub, GWL_WNDPROC); |
| SetWindowLong(sub, GWL_WNDPROC, (LONG)twsub); | SetWindowLong(sub, GWL_WNDPROC, (LONG)twsub); |
| SendMessage(sub, WM_SETFONT, (WPARAM)toolwin.hfont, | SendMessage(sub, WM_SETFONT, (WPARAM)toolwin.hfont, |
| MAKELPARAM(TRUE, 0)); | MAKELPARAM(TRUE, 0)); |
| Line 365 const SUBITEM *p; | Line 397 const SUBITEM *p; |
| } | } |
| for (i=0; i<FDDLIST_DRV; i++) { | for (i=0; i<FDDLIST_DRV; i++) { |
| DragAcceptFiles(toolwin.sub[fddlist[i]], TRUE); | DragAcceptFiles(toolwin.sub[fddlist[i]], TRUE); |
| setlist((BYTE)i); | remakefddlist((BYTE)i); |
| } | } |
| } | } |
| Line 373 static void toolwindestroy(void) { | Line 405 static void toolwindestroy(void) { |
| UINT i; | UINT i; |
| for (i=0; i<IDC_MAXITEMS; i++) { | if (toolwin.hbmp) { |
| DestroyWindow(toolwin.sub[i]); | for (i=0; i<IDC_MAXITEMS; i++) { |
| DestroyWindow(toolwin.sub[i]); | |
| } | |
| DeleteObject(toolwin.access[0]); | |
| DeleteObject(toolwin.access[1]); | |
| DeleteObject(toolwin.hdcfont); | |
| DeleteObject(toolwin.hfont); | |
| DeleteObject(toolwin.hbmp); | |
| toolwin.hbmp = NULL; | |
| } | } |
| DeleteObject(toolwin.access[0]); | |
| DeleteObject(toolwin.access[1]); | |
| DeleteObject(toolwin.hdcfont); | |
| DeleteObject(toolwin.hfont); | |
| DeleteObject(toolwin.hbmp); | |
| } | } |
| static void toolwinpaint(HWND hWnd) { | static void toolwinpaint(HWND hWnd) { |
| HDC hdc; | HDC hdc; |
| PAINTSTRUCT ps; | PAINTSTRUCT ps; |
| HINSTANCE hinst; | |
| BITMAP bmp; | BITMAP bmp; |
| HDC hmdc; | HDC hmdc; |
| hdc = BeginPaint(hWnd, &ps); | hdc = BeginPaint(hWnd, &ps); |
| hinst = (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE); | if (toolwin.hbmp) { |
| GetObject(toolwin.hbmp, sizeof(BITMAP), &bmp); | GetObject(toolwin.hbmp, sizeof(BITMAP), &bmp); |
| hmdc = CreateCompatibleDC(hdc); | hmdc = CreateCompatibleDC(hdc); |
| SelectObject(hmdc, toolwin.hbmp); | SelectObject(hmdc, toolwin.hbmp); |
| BitBlt(hdc, 0, 0, bmp.bmWidth, bmp.bmHeight, hmdc, 0, 0, SRCCOPY); | BitBlt(hdc, 0, 0, bmp.bmWidth, bmp.bmHeight, hmdc, 0, 0, SRCCOPY); |
| DeleteDC(hmdc); | DeleteDC(hmdc); |
| } | |
| EndPaint(hWnd, &ps); | EndPaint(hWnd, &ps); |
| } | } |
| static void changeskin(HWND hWnd) { | |
| HBITMAP hbmp; | |
| BITMAP bmp; | |
| toolwin_movingstart(); | |
| toolwindestroy(); | |
| hbmp = skinload(np2tool.skin); | |
| if (hbmp == NULL) { | |
| SendMessage(hWnd, WM_CLOSE, 0, 0); | |
| return; | |
| } | |
| GetObject(hbmp, sizeof(BITMAP), &bmp); | |
| toolwin.hbmp = hbmp; | |
| MoveWindow(hWnd, np2tool.posx, np2tool.posy, | |
| bmp.bmWidth, bmp.bmHeight, TRUE); | |
| toolwincreate(hWnd); | |
| toolwin_movingend(); | |
| } | |
| // ---- moving | // ---- moving |
| Line 437 static void movingproc(RECT *rect) { | Line 492 static void movingproc(RECT *rect) { |
| return; | return; |
| } | } |
| changes = FALSE; | if (toolwin.winflg & 0x03) { |
| do { | toolwin.wingx += rect->left - toolwin.wintx; |
| if (toolwin.winflg & 1) { | rect->left = toolwin.wintx; |
| toolwin.wingx += rect->left - toolwin.wintx; | if ((toolwin.wingx >= SNAPDOTREL) || (toolwin.wingx <= -SNAPDOTREL)) { |
| rect->left = toolwin.wintx; | toolwin.winflg &= ~0x03; |
| rect->left += toolwin.wingx; | |
| toolwin.wingx = 0; | |
| } | } |
| else { | rect->right = rect->left + winlx; |
| d = SNAPDOTPULL; | } |
| if (toolwin.winflg & 0x0c) { | |
| toolwin.wingy += rect->top - toolwin.winty; | |
| rect->top = toolwin.winty; | |
| if ((toolwin.wingy >= SNAPDOTREL) || (toolwin.wingy <= -SNAPDOTREL)) { | |
| toolwin.winflg &= ~0x0c; | |
| rect->top += toolwin.wingy; | |
| toolwin.wingy = 0; | |
| } | |
| rect->bottom = rect->top + winly; | |
| } | |
| connectx = ((rect->right >= mainrc.left) && (rect->left <= mainrc.right)); | |
| connecty = ((rect->bottom >= mainrc.top) && (rect->top <= mainrc.bottom)); | |
| if ((!connectx) || (!connecty)) { | |
| if (toolwin.winflg & 0x01) { | |
| toolwin.winflg &= ~0x01; | |
| rect->left += toolwin.wingx; | |
| rect->right = rect->left + winlx; | |
| toolwin.wingx = 0; | |
| } | |
| if (toolwin.winflg & 0x04) { | |
| toolwin.winflg &= ~0x04; | |
| rect->top += toolwin.wingy; | |
| rect->bottom = rect->top + winly; | |
| toolwin.wingy = 0; | |
| } | |
| } | |
| do { | |
| changes = FALSE; | |
| if ((!(toolwin.winflg & 0x01)) && | |
| (rect->bottom >= mainrc.top) && (rect->top <= mainrc.bottom)) { | |
| do { | do { |
| connecty = ((rect->bottom >= mainrc.top) && | d = rect->left - mainrc.right; |
| (rect->top <= mainrc.bottom)); | if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { |
| if (connecty) { | break; |
| d = rect->left - mainrc.right; | } |
| d = rect->right - mainrc.left; | |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | |
| break; | |
| } | |
| if ((rect->bottom == mainrc.top) || | |
| (rect->top == mainrc.bottom)) { | |
| d = rect->left - mainrc.left; | |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { |
| break; | break; |
| } | } |
| d = rect->right - mainrc.left; | d = rect->right - mainrc.right; |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { |
| break; | break; |
| } | } |
| if ((rect->bottom == mainrc.top) || | |
| (rect->top == mainrc.bottom)) { | |
| d = rect->left - mainrc.left; | |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | |
| break; | |
| } | |
| d = rect->right - mainrc.right; | |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | |
| break; | |
| } | |
| } | |
| } | } |
| } while(0); | |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | |
| toolwin.winflg |= 0x01; | |
| rect->left -= d; | |
| rect->right = rect->left + winlx; | |
| toolwin.wingx = d; | |
| toolwin.wintx = rect->left; | |
| changes = TRUE; | |
| } | |
| } | |
| if (!(toolwin.winflg & 0x03)) { | |
| do { | |
| d = rect->left - workrc.left; | d = rect->left - workrc.left; |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { |
| break; | break; |
| Line 479 static void movingproc(RECT *rect) { | Line 576 static void movingproc(RECT *rect) { |
| } | } |
| } while(0); | } while(0); |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { |
| toolwin.winflg |= 1; | toolwin.winflg |= 0x02; |
| rect->left -= d; | rect->left -= d; |
| rect->right = rect->left + winlx; | |
| toolwin.wingx = d; | toolwin.wingx = d; |
| toolwin.wintx = rect->left; | toolwin.wintx = rect->left; |
| changes = TRUE; | |
| } | } |
| } | } |
| if ((toolwin.wingx >= SNAPDOTREL) || (toolwin.wingx <= -SNAPDOTREL)) { | |
| toolwin.winflg &= ~1; | |
| rect->left += toolwin.wingx; | |
| toolwin.wingx = 0; | |
| } | |
| rect->right = rect->left + winlx; | |
| if (changes) { | if ((!(toolwin.winflg & 0x04)) && |
| break; | (rect->right >= mainrc.left) && (rect->left <= mainrc.right)) { |
| } | |
| if (toolwin.winflg & 2) { | |
| toolwin.wingy += rect->top - toolwin.winty; | |
| rect->top = toolwin.winty; | |
| } | |
| else { | |
| d = SNAPDOTPULL; | |
| do { | do { |
| connectx = ((rect->right >= mainrc.left) && | d = rect->top - mainrc.bottom; |
| (rect->left <= mainrc.right)); | if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { |
| if (connectx) { | break; |
| d = rect->top - mainrc.bottom; | } |
| d = rect->bottom - mainrc.top; | |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | |
| break; | |
| } | |
| if ((rect->right == mainrc.left) || | |
| (rect->left == mainrc.right)) { | |
| d = rect->top - mainrc.top; | |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { |
| break; | break; |
| } | } |
| d = rect->bottom - mainrc.top; | d = rect->bottom - mainrc.bottom; |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { |
| break; | break; |
| } | } |
| if ((rect->right == mainrc.left) || | |
| (rect->left == mainrc.right)) { | |
| d = rect->top - mainrc.top; | |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | |
| break; | |
| } | |
| d = rect->bottom - mainrc.bottom; | |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | |
| break; | |
| } | |
| } | |
| } | } |
| } while(0); | |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | |
| toolwin.winflg |= 0x04; | |
| rect->top -= d; | |
| rect->bottom = rect->top + winly; | |
| toolwin.wingy = d; | |
| toolwin.winty = rect->top; | |
| changes = TRUE; | |
| } | |
| } | |
| if (!(toolwin.winflg & 0x0c)) { | |
| do { | |
| d = rect->top - workrc.top; | d = rect->top - workrc.top; |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { |
| break; | break; |
| Line 536 static void movingproc(RECT *rect) { | Line 629 static void movingproc(RECT *rect) { |
| } | } |
| } while(0); | } while(0); |
| if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { | if ((d < SNAPDOTPULL) && (d > -SNAPDOTPULL)) { |
| toolwin.winflg |= 2; | toolwin.winflg |= 0x08; |
| rect->top -= d; | rect->top -= d; |
| rect->bottom = rect->top + winly; | |
| toolwin.wingy = d; | toolwin.wingy = d; |
| toolwin.winty = rect->top; | toolwin.winty = rect->top; |
| changes = TRUE; | changes = TRUE; |
| } | } |
| } | } |
| if ((toolwin.wingy >= SNAPDOTREL) || (toolwin.wingy <= -SNAPDOTREL)) { | |
| toolwin.winflg &= ~2; | |
| rect->top += toolwin.wingy; | |
| toolwin.wingy = 0; | |
| changes = TRUE; | |
| } | |
| rect->bottom = rect->top + winly; | |
| } while(changes); | } while(changes); |
| connectx = ((rect->right >= mainrc.left) && (rect->left <= mainrc.right)); | |
| connecty = ((rect->bottom >= mainrc.top) && (rect->top <= mainrc.bottom)); | |
| if ((toolwin.winflg & 3) && ((!connectx) || (!connecty))) { | |
| toolwin.winflg &= ~3; | |
| rect->left += toolwin.wingx; | |
| rect->top += toolwin.wingy; | |
| rect->right = rect->left + winlx; | |
| rect->bottom = rect->top + winly; | |
| toolwin.wingx = 0; | |
| toolwin.wingy = 0; | |
| } | |
| } | } |
| // ---- | // ---- |
| static void open_popup(HWND hWnd, LPARAM lp) { | |
| HMENU hMenu; | |
| POINT pt; | |
| hMenu = CreatePopupMenu(); | |
| AppendMenu(hMenu, MF_STRING, IDC_SKINDEF, str_skindef); | |
| AppendMenu(hMenu, MF_STRING, IDC_SKINSEL, str_skinsel); | |
| AppendMenu(hMenu, MF_SEPARATOR, 0, NULL); | |
| AppendMenu(hMenu, MF_STRING, IDC_TOOLCLOSE, str_toolclose); | |
| pt.x = LOWORD(lp); | |
| pt.y = HIWORD(lp); | |
| ClientToScreen(hWnd, &pt); | |
| TrackPopupMenu(hMenu, TPM_LEFTALIGN, pt.x, pt.y, 0, hWnd, NULL); | |
| DestroyMenu(hMenu); | |
| } | |
| static LRESULT CALLBACK twproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { | static LRESULT CALLBACK twproc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { |
| BOOL r; | |
| switch(msg) { | switch(msg) { |
| case WM_CREATE: | case WM_CREATE: |
| SetWindowLong(hWnd, GWL_STYLE, | SetWindowLong(hWnd, GWL_STYLE, |
| GetWindowLong(hWnd, GWL_STYLE) & (~WS_CAPTION)); | GetWindowLong(hWnd, GWL_STYLE) & (~WS_CAPTION)); |
| SetWindowPos(hWnd, 0, 0, 0, 0, 0, | SetWindowPos(hWnd, 0, 0, 0, 0, 0, |
| SWP_DRAWFRAME | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER); | SWP_DRAWFRAME | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER); |
| toolwincreate(hWnd, lp); | toolwincreate(hWnd); |
| break; | |
| case WM_SYSCOMMAND: | |
| switch(wp) { | |
| case IDC_SKINDEF: | |
| np2tool.skin[0] = '\0'; | |
| changeskin(hWnd); | |
| sysmng_update(SYS_UPDATEOSCFG); | |
| break; | |
| case IDC_SKINSEL: | |
| soundmng_stop(); | |
| r = dlgs_selectfile(hWnd, &skinui, np2tool.skin, | |
| sizeof(np2tool.skin), NULL); | |
| soundmng_play(); | |
| if (r) { | |
| changeskin(hWnd); | |
| sysmng_update(SYS_UPDATEOSCFG); | |
| } | |
| break; | |
| default: | |
| return(DefWindowProc(hWnd, msg, wp, lp)); | |
| } | |
| break; | break; |
| case WM_COMMAND: | case WM_COMMAND: |
| Line 614 static LRESULT CALLBACK twproc(HWND hWnd | Line 732 static LRESULT CALLBACK twproc(HWND hWnd |
| diskdrv_setfdd(1, NULL, 0); | diskdrv_setfdd(1, NULL, 0); |
| toolwin_setfdd(1, NULL); | toolwin_setfdd(1, NULL); |
| break; | break; |
| case IDC_SKINDEF: | |
| case IDC_SKINSEL: | |
| SendMessage(hWnd, WM_SYSCOMMAND, wp, lp); | |
| break; | |
| case IDC_TOOLCLOSE: | |
| SendMessage(hWnd, WM_CLOSE, 0, 0); | |
| break; | |
| } | } |
| break; | break; |
| Line 668 static LRESULT CALLBACK twproc(HWND hWnd | Line 795 static LRESULT CALLBACK twproc(HWND hWnd |
| SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0L); | SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0L); |
| break; | break; |
| case WM_RBUTTONDOWN: | |
| open_popup(hWnd, lp); | |
| break; | |
| default: | default: |
| return(DefWindowProc(hWnd, msg, wp, lp)); | return(DefWindowProc(hWnd, msg, wp, lp)); |
| } | } |
| Line 693 BOOL toolwin_initapp(HINSTANCE hInstance | Line 824 BOOL toolwin_initapp(HINSTANCE hInstance |
| void toolwin_open(void) { | void toolwin_open(void) { |
| char path[MAX_PATH]; | |
| HBITMAP hbmp; | HBITMAP hbmp; |
| BITMAP bmp; | BITMAP bmp; |
| HWND hWnd; | HWND hWnd; |
| HMENU hMenu; | |
| if (toolwin.hwnd) { | if (toolwin.hwnd) { |
| return; | return; |
| } | } |
| ZeroMemory(&toolwin, sizeof(toolwin)); | ZeroMemory(&toolwin, sizeof(toolwin)); |
| skinsetdef(); | hbmp = skinload(np2tool.skin); |
| milstr_ncpy(path, modulefile, sizeof(path)); | |
| file_cutname(path); | |
| file_catname(path, np2skin, sizeof(path)); | |
| hbmp = skinload(path); | |
| if (hbmp == NULL) { | if (hbmp == NULL) { |
| goto twope_err1; | goto twope_err1; |
| } | } |
| GetObject(hbmp, sizeof(BITMAP), &bmp); | GetObject(hbmp, sizeof(BITMAP), &bmp); |
| toolwin.hbmp = hbmp; | toolwin.hbmp = hbmp; |
| hWnd = CreateWindowEx(0, np2toolclass, np2tooltitle, WS_SYSMENU, | hWnd = CreateWindow(np2toolclass, np2tooltitle, WS_SYSMENU, |
| np2tool.posx, np2tool.posy, | np2tool.posx, np2tool.posy, |
| bmp.bmWidth, bmp.bmHeight, | bmp.bmWidth, bmp.bmHeight, |
| NULL, NULL, hInst, NULL); | NULL, NULL, hInst, NULL); |
| Line 722 void toolwin_open(void) { | Line 849 void toolwin_open(void) { |
| } | } |
| UpdateWindow(hWnd); | UpdateWindow(hWnd); |
| ShowWindow(hWnd, SW_SHOW); | ShowWindow(hWnd, SW_SHOW); |
| hMenu = GetSystemMenu(hWnd, FALSE); | |
| InsertMenu(hMenu, 0, MF_BYPOSITION | MF_STRING, IDC_SKINDEF, str_skindef); | |
| InsertMenu(hMenu, 1, MF_BYPOSITION | MF_STRING, IDC_SKINSEL, str_skinsel); | |
| InsertMenu(hMenu, 2, MF_BYPOSITION | MF_SEPARATOR, 0, NULL); | |
| SetForegroundWindow(hWndMain); | |
| return; | return; |
| twope_err2: | twope_err2: |
| Line 740 void toolwin_close(void) { | Line 873 void toolwin_close(void) { |
| } | } |
| } | } |
| #if 1 | |
| void toolwin_movingstart(void) { | |
| RECT mainrc; | |
| RECT toolrc; | |
| UINT connect; | |
| if (toolwin.hwnd == NULL) { | |
| return; | |
| } | |
| GetWindowRect(hWndMain, &mainrc); | |
| GetWindowRect(toolwin.hwnd, &toolrc); | |
| connect = 0; | |
| if ((toolrc.bottom >= mainrc.top) && (toolrc.top <= mainrc.bottom)) { | |
| if (toolrc.right == mainrc.left) { | |
| connect += 0x01; | |
| } | |
| else if (toolrc.left == mainrc.right) { | |
| connect += 0x02; | |
| } | |
| else if (toolrc.left == mainrc.left) { | |
| connect += 0x03; | |
| } | |
| else if (toolrc.right == mainrc.right) { | |
| connect += 0x04; | |
| } | |
| } | |
| if ((toolrc.right >= mainrc.left) && (toolrc.left <= mainrc.right)) { | |
| if (toolrc.bottom == mainrc.top) { | |
| connect += 1 << 4; | |
| } | |
| else if (toolrc.top == mainrc.bottom) { | |
| connect += 2 << 4; | |
| } | |
| else if (toolrc.top == mainrc.top) { | |
| connect += 3 << 4; | |
| } | |
| else if (toolrc.bottom == mainrc.bottom) { | |
| connect += 4 << 4; | |
| } | |
| } | |
| toolwin.parentcn = connect; | |
| toolwin.parentx = mainrc.left; | |
| toolwin.parenty = mainrc.top; | |
| } | |
| void toolwin_movingend(void) { | |
| UINT connect; | |
| RECT mainrc; | |
| RECT toolrc; | |
| int cx; | |
| int cy; | |
| connect = toolwin.parentcn; | |
| toolwin.parentcn = 0; | |
| if ((toolwin.hwnd == NULL) || (!connect)) { | |
| return; | |
| } | |
| GetWindowRect(hWndMain, &mainrc); | |
| GetWindowRect(toolwin.hwnd, &toolrc); | |
| cx = toolrc.right - toolrc.left; | |
| cy = toolrc.bottom - toolrc.top; | |
| toolrc.left += mainrc.left - toolwin.parentx; | |
| toolrc.top += mainrc.top - toolwin.parenty; | |
| switch(connect & 0x0f) { | |
| case 1: | |
| toolrc.left = mainrc.left - cx; | |
| break; | |
| case 2: | |
| toolrc.left = mainrc.right; | |
| break; | |
| case 3: | |
| toolrc.left = mainrc.left; | |
| break; | |
| case 4: | |
| toolrc.left = mainrc.right - cx; | |
| break; | |
| } | |
| switch((connect >> 4) & 0x0f) { | |
| case 1: | |
| toolrc.top = mainrc.top - cy; | |
| break; | |
| case 2: | |
| toolrc.top = mainrc.bottom; | |
| break; | |
| case 3: | |
| toolrc.top = mainrc.top; | |
| break; | |
| case 4: | |
| toolrc.top = mainrc.bottom - cy; | |
| break; | |
| } | |
| MoveWindow(toolwin.hwnd, toolrc.left, toolrc.top, cx, cy, TRUE); | |
| } | |
| #else | |
| void toolwin_movingstart(void) { | void toolwin_movingstart(void) { |
| RECT mainrc; | RECT mainrc; |
| Line 778 void toolwin_movingend(void) { | Line 1013 void toolwin_movingend(void) { |
| } | } |
| toolwin.parentcn = 0; | toolwin.parentcn = 0; |
| } | } |
| #endif | |
| void toolwin_setfdd(BYTE drv, const char *name) { | void toolwin_setfdd(BYTE drv, const char *name) { |
| Line 813 void toolwin_setfdd(BYTE drv, const char | Line 1049 void toolwin_setfdd(BYTE drv, const char |
| } | } |
| sysmng_update(SYS_UPDATEOSCFG); | sysmng_update(SYS_UPDATEOSCFG); |
| if (toolwin.hwnd != NULL) { | if (toolwin.hwnd != NULL) { |
| setlist(drv); | remakefddlist(drv); |
| SetForegroundWindow(hWndMain); | SetForegroundWindow(hWndMain); |
| } | } |
| } | } |
| static void setdiskacc(UINT num, BYTE count) { | static void setdiskacc(UINT num, BYTE count) { |
| const DISKACC *acc; | const DISKACC *acc; |
| Line 887 static const char ini_title[] = "NP2 too | Line 1122 static const char ini_title[] = "NP2 too |
| static const INITBL iniitem[] = { | static const INITBL iniitem[] = { |
| {"WindposX", INITYPE_SINT32, &np2tool.posx, 0}, | {"WindposX", INITYPE_SINT32, &np2tool.posx, 0}, |
| {"WindposY", INITYPE_SINT32, &np2tool.posy, 0}, | {"WindposY", INITYPE_SINT32, &np2tool.posy, 0}, |
| {"SkinFile", INITYPE_STR, np2tool.skin, MAX_PATH}, | |
| {"FD1NAME0", INITYPE_STR, np2tool.fdd[0].name[0], MAX_PATH}, | {"FD1NAME0", INITYPE_STR, np2tool.fdd[0].name[0], MAX_PATH}, |
| {"FD1NAME1", INITYPE_STR, np2tool.fdd[0].name[1], MAX_PATH}, | {"FD1NAME1", INITYPE_STR, np2tool.fdd[0].name[1], MAX_PATH}, |
| {"FD1NAME2", INITYPE_STR, np2tool.fdd[0].name[2], MAX_PATH}, | {"FD1NAME2", INITYPE_STR, np2tool.fdd[0].name[2], MAX_PATH}, |