BOOL GetScrollInfoEx(HWND hWnd, int iSBar, LPSCROLLINFO lpsi) /* jmt: iSBar not used */ { PMWSCROLLBARINFO pSBar; HWND pWin; pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin)) ) return FALSE; if( lpsi->fMask & SIF_RANGE ) { lpsi->nMin = pSBar->minPos; lpsi->nMax = pSBar->maxPos; } if( lpsi->fMask & SIF_POS ) { lpsi->nPos = pSBar->curPos; } if( lpsi->fMask & SIF_PAGE ) lpsi->nPage = pSBar->pageStep; return TRUE; }
BOOL SetScrollRangeEx (HWND hWnd, int iSBar, int iMinPos, int iMaxPos) /* jmt: iSBar not used */ { PMWSCROLLBARINFO pSBar; HWND pWin; RECT rcBar; DWORD dwStyle; /* jmt:2k0820 */ pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin)) ) return FALSE; pSBar->minPos = (iMinPos < iMaxPos)?iMinPos:iMaxPos; pSBar->maxPos = (iMinPos > iMaxPos)?iMinPos:iMaxPos; /* validate parameters. */ if (pSBar->curPos < pSBar->minPos) pSBar->curPos = pSBar->minPos; if (pSBar->pageStep <= 0) pSBar->pageStep = 0; else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1)) pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1; { int max = pSBar->maxPos; max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; if (pSBar->curPos > max) pSBar->curPos = max; } dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */ if (dwStyle == SBS_VERT) { wndGetVScrollBarRect (pWin, &rcBar); rcBar.left --; rcBar.right --; } else { wndGetHScrollBarRect (pWin, &rcBar); rcBar.top --; rcBar.bottom --; } wndScrollBarPos (pWin, dwStyle == SBS_HORZ, &rcBar); #if 0 SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); #else MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */ #endif return TRUE; }
BOOL ShowScrollBar (HWND hWnd, int iSBar, BOOL bShow) { PMWSCROLLBARINFO pSBar; HWND pWin; BOOL bPrevState; RECT rcBar; pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) return FALSE; bPrevState = !(pSBar->status & SBS_HIDE); if (bShow && !bPrevState) pSBar->status &= ~SBS_HIDE; else if (!bShow && bPrevState) pSBar->status |= SBS_HIDE; else return FALSE; #if 0//fix: no WM_CHANGESIZE SendMessage (hWnd, WM_CHANGESIZE, 0, 0); #endif if (iSBar == SB_VERT) wndGetVScrollBarRect (pWin, &rcBar); else wndGetHScrollBarRect (pWin, &rcBar); { RECT rcWin, rcClient; memcpy (&rcWin, &pWin->winrect.left, sizeof (RECT)); rcClient.left = 0; rcClient.top = 0; rcClient.right = pWin->clirect.right - pWin->clirect.left; rcClient.bottom = pWin->clirect.bottom - pWin->clirect.top; #if 0//fix: no WM_SIZECHANGED SendMessage/*SendAsyncMessage*/ (hWnd, WM_SIZECHANGED, (WPARAM)&rcWin, (LPARAM)&rcClient); #endif } if (bShow) { SendMessage (hWnd, WM_NCPAINT, 0, 0); } else { rcBar.left -= pWin->clirect.left; rcBar.top -= pWin->clirect.top; rcBar.right -= pWin->clirect.left; rcBar.bottom -= pWin->clirect.top; SendMessage (hWnd, WM_NCPAINT, 0, 0); InvalidateRect (hWnd, &rcBar, TRUE); } return TRUE; }
BOOL SetScrollRange (HWND hWnd, int iSBar, int iMinPos, int iMaxPos) { PMWSCROLLBARINFO pSBar; HWND pWin; RECT rcBar; pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) return FALSE; pSBar->minPos = (iMinPos < iMaxPos)?iMinPos:iMaxPos; pSBar->maxPos = (iMinPos > iMaxPos)?iMinPos:iMaxPos; // validate parameters. if (pSBar->curPos < pSBar->minPos) pSBar->curPos = pSBar->minPos; if (pSBar->pageStep <= 0) pSBar->pageStep = 0; else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1)) pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1; { int max = pSBar->maxPos; max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; if (pSBar->curPos > max) pSBar->curPos = max; } if (iSBar == SB_VERT) { wndGetVScrollBarRect (pWin, &rcBar); rcBar.left --; rcBar.right --; } else { wndGetHScrollBarRect (pWin, &rcBar); rcBar.top --; rcBar.bottom --; } wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar); #if 0 SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); #else MwPaintNCScrollbars(hWnd,NULL);//a must #endif return TRUE; }
BOOL GetScrollPosEx (HWND hWnd, int iSBar, int* pPos) /* jmt: iSBar not used */ { PMWSCROLLBARINFO pSBar; HWND pWin; pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin)) ) return FALSE; *pPos = pSBar->curPos; return TRUE; }
BOOL GetScrollPos (HWND hWnd, int iSBar, int* pPos) { PMWSCROLLBARINFO pSBar; HWND pWin; pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) return FALSE; *pPos = pSBar->curPos; return TRUE; }
BOOL GetScrollRangeEx (HWND hWnd, int iSBar, int* pMinPos, int* pMaxPos) /* jmt: iSBar not used */ { PMWSCROLLBARINFO pSBar; HWND pWin; pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin)) ) return FALSE; *pMinPos = pSBar->minPos; *pMaxPos = pSBar->maxPos; return TRUE; }
BOOL SetScrollPos (HWND hWnd, int iSBar, int iNewPos)//ok { PMWSCROLLBARINFO pSBar; HWND pWin; RECT rcBar; pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) return FALSE; if (iNewPos < pSBar->minPos) pSBar->curPos = pSBar->minPos; else pSBar->curPos = iNewPos; { int max = pSBar->maxPos; max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; if (pSBar->curPos > max) pSBar->curPos = max; } if (iSBar == SB_VERT) { wndGetVScrollBarRect (pWin, &rcBar); rcBar.left --; rcBar.right --; } else { wndGetHScrollBarRect (pWin, &rcBar); rcBar.top --; rcBar.bottom --; } wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar); #if 0 SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); #else MwPaintNCScrollbars(hWnd,NULL);//a must #endif return TRUE; }
BOOL EnableScrollBarEx (HWND hWnd, int iSBar, BOOL bEnable) /* jmt: iSBar not used */ { PMWSCROLLBARINFO pSBar; HWND pWin; BOOL bPrevState; RECT rcBar; DWORD dwStyle; /* jmt:2k0820 */ pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin)) ) return FALSE; bPrevState = !(pSBar->status & SBS_DISABLED); if (bEnable && !bPrevState) pSBar->status &= ~SBS_DISABLED; else if (!bEnable && bPrevState) pSBar->status |= SBS_DISABLED; else return FALSE; dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */ if (dwStyle == SBS_VERT) { wndGetVScrollBarRect (pWin, &rcBar); rcBar.left --; rcBar.right --; } else { wndGetHScrollBarRect (pWin, &rcBar); rcBar.top --; rcBar.bottom --; } #if 0 SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); #else MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */ #endif return TRUE; }
BOOL EnableScrollBar (HWND hWnd, int iSBar, BOOL bEnable)//ok { PMWSCROLLBARINFO pSBar; HWND pWin; BOOL bPrevState; RECT rcBar; pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) )//ok return FALSE; bPrevState = !(pSBar->status & SBS_DISABLED); if (bEnable && !bPrevState) pSBar->status &= ~SBS_DISABLED; else if (!bEnable && bPrevState) pSBar->status |= SBS_DISABLED; else return FALSE; if (iSBar == SB_VERT) { wndGetVScrollBarRect (pWin, &rcBar); rcBar.left --; rcBar.right --; } else { wndGetHScrollBarRect (pWin, &rcBar); rcBar.top --; rcBar.bottom --; } #if 0 SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); #else MwPaintNCScrollbars(hWnd,NULL);//a must #endif return TRUE; }
BOOL ShowScrollBarEx (HWND hWnd, int iSBar, BOOL bShow) /* jmt: iSBar not used */ { PMWSCROLLBARINFO pSBar; HWND pWin; BOOL bPrevState; RECT rcBar; DWORD dwStyle; /* jmt:2k0820 */ pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin)) ) return FALSE; bPrevState = !(pSBar->status & SBS_HIDE); if (bShow && !bPrevState) pSBar->status &= ~SBS_HIDE; else if (!bShow && bPrevState) pSBar->status |= SBS_HIDE; else return FALSE; #if 0 /* fix: no WM_CHANGESIZE */ SendMessage (hWnd, WM_CHANGESIZE, 0, 0); #endif dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */ if (dwStyle == SBS_VERT) wndGetVScrollBarRect (pWin, &rcBar); else wndGetHScrollBarRect (pWin, &rcBar); { RECT rcWin, rcClient; memcpy (&rcWin, &pWin->winrect.left, sizeof (RECT)); rcClient.left = 0; rcClient.top = 0; rcClient.right = pWin->clirect.right - pWin->clirect.left; rcClient.bottom = pWin->clirect.bottom - pWin->clirect.top; #if 0 /* fix: no WM_SIZECHANGED */ SendMessage (hWnd, WM_SIZECHANGED, (WPARAM)&rcWin, (LPARAM)&rcClient); #endif } if (bShow) { SendMessage (hWnd, WM_NCPAINT, 0, 0); } else { rcBar.left -= pWin->clirect.left; rcBar.top -= pWin->clirect.top; rcBar.right -= pWin->clirect.left; rcBar.bottom -= pWin->clirect.top; SendMessage (hWnd, WM_NCPAINT, 0, 0); InvalidateRect (hWnd, &rcBar, TRUE); } return TRUE; }
BOOL SetScrollInfoEx (HWND hWnd, int iSBar, LPCSCROLLINFO lpsi, BOOL fRedraw) /* jmt: iSBar not used */ { PMWSCROLLBARINFO pSBar; HWND pWin; RECT rcBar; DWORD dwStyle; /* jmt:2k0820 */ pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin)) ) return FALSE; if( lpsi->fMask & SIF_RANGE ) { pSBar->minPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMin:lpsi->nMax; pSBar->maxPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMax:lpsi->nMin; } if( lpsi->fMask & SIF_POS ) pSBar->curPos = lpsi->nPos; if( lpsi->fMask & SIF_PAGE ) pSBar->pageStep = lpsi->nPage; /* validate parameters. */ if (pSBar->curPos < pSBar->minPos) pSBar->curPos = pSBar->minPos; if (pSBar->pageStep <= 0) pSBar->pageStep = 0; else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1)) pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1; { int max = pSBar->maxPos; max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; if (pSBar->curPos > max) pSBar->curPos = max; } dwStyle = (GetWindowStyle (hWnd) & SBS_TYPEMASK); /* jmt: 2k0820 */ if(fRedraw) { if (dwStyle == SBS_VERT) { wndGetVScrollBarRect (pWin, &rcBar); rcBar.left --; rcBar.right --; } else { wndGetHScrollBarRect (pWin, &rcBar); rcBar.top --; rcBar.bottom --; } wndScrollBarPos (pWin, dwStyle == SBS_HORZ, &rcBar); #if 0 SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); #else MwPaintScrollbars(hWnd,NULL,dwStyle); /* a must */ #endif } return TRUE; }
BOOL SetScrollInfo (HWND hWnd, int iSBar, LPCSCROLLINFO lpsi, BOOL fRedraw)//ok { PMWSCROLLBARINFO pSBar; HWND pWin; RECT rcBar; pWin = (HWND)hWnd; if ( !(pSBar = wndGetScrollBar (pWin, iSBar)) ) return FALSE; if( lpsi->fMask & SIF_RANGE ) { pSBar->minPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMin:lpsi->nMax; pSBar->maxPos = (lpsi->nMin < lpsi->nMax)?lpsi->nMax:lpsi->nMin; } if( lpsi->fMask & SIF_POS ) pSBar->curPos = lpsi->nPos; if( lpsi->fMask & SIF_PAGE ) pSBar->pageStep = lpsi->nPage; // validate parameters. if (pSBar->curPos < pSBar->minPos) pSBar->curPos = pSBar->minPos; if (pSBar->pageStep <= 0) pSBar->pageStep = 0; else if (pSBar->pageStep > (pSBar->maxPos - pSBar->minPos + 1)) pSBar->pageStep = pSBar->maxPos - pSBar->minPos + 1; { int max = pSBar->maxPos; max -= ((pSBar->pageStep - 1) > 0)?(pSBar->pageStep - 1):0; if (pSBar->curPos > max) pSBar->curPos = max; } if(fRedraw) { if (iSBar == SB_VERT) { wndGetVScrollBarRect (pWin, &rcBar); rcBar.left --; rcBar.right --; } else { wndGetHScrollBarRect (pWin, &rcBar); rcBar.top --; rcBar.bottom --; } wndScrollBarPos (pWin, iSBar == SB_HORZ, &rcBar); #if 0 SendMessage (hWnd, WM_NCPAINT, 0, (LPARAM)(&rcBar)); #else MwPaintNCScrollbars(hWnd,NULL);//a must #endif } return TRUE; }