示例#1
0
文件: pager.c 项目: howard5888/wineT
static void
PAGER_Scroll(PAGER_INFO* infoPtr, INT dir)
{
    NMPGSCROLL nmpgScroll;
    RECT rcWnd;

    if (infoPtr->hwndChild)
    {
        ZeroMemory (&nmpgScroll, sizeof (NMPGSCROLL));
        nmpgScroll.hdr.hwndFrom = infoPtr->hwndSelf;
        nmpgScroll.hdr.idFrom   = GetWindowLongPtrW (infoPtr->hwndSelf, GWLP_ID);
        nmpgScroll.hdr.code = PGN_SCROLL;

        GetWindowRect(infoPtr->hwndSelf, &rcWnd);
        GetClientRect(infoPtr->hwndSelf, &nmpgScroll.rcParent);
        nmpgScroll.iXpos = nmpgScroll.iYpos = 0;
        nmpgScroll.iDir = dir;

        if (infoPtr->dwStyle & PGS_HORZ)
        {
            nmpgScroll.iScroll = rcWnd.right - rcWnd.left;
            nmpgScroll.iXpos = infoPtr->nPos;
        }
        else
        {
            nmpgScroll.iScroll = rcWnd.bottom - rcWnd.top;
            nmpgScroll.iYpos = infoPtr->nPos;
        }
        nmpgScroll.iScroll -= 2*infoPtr->nButtonSize;

        SendMessageW (infoPtr->hwndNotify, WM_NOTIFY,
                      (WPARAM)nmpgScroll.hdr.idFrom, (LPARAM)&nmpgScroll);

        TRACE("[%p] PGN_SCROLL returns iScroll=%d\n", infoPtr->hwndSelf, nmpgScroll.iScroll);

        if (nmpgScroll.iScroll > 0)
        {
            infoPtr->direction = dir;

            if (dir == PGF_SCROLLLEFT || dir == PGF_SCROLLUP)
                PAGER_SetPos(infoPtr, infoPtr->nPos - nmpgScroll.iScroll, TRUE);
            else
                PAGER_SetPos(infoPtr, infoPtr->nPos + nmpgScroll.iScroll, TRUE);
        }
        else
            infoPtr->direction = -1;
    }
}
示例#2
0
文件: pager.c 项目: howard5888/wineT
static LRESULT
PAGER_RecalcSize(PAGER_INFO *infoPtr)
{
    TRACE("[%p]\n", infoPtr->hwndSelf);

    if (infoPtr->hwndChild)
    {
        INT scrollRange = PAGER_GetScrollRange(infoPtr);

        if (scrollRange <= 0)
        {
            infoPtr->nPos = -1;
            PAGER_SetPos(infoPtr, 0, FALSE);
        }
        else
            PAGER_PositionChildWnd(infoPtr);
    }

    return 1;
}
示例#3
0
文件: pager.c 项目: AmesianX/wine
static LRESULT
PAGER_SetChild (PAGER_INFO* infoPtr, HWND hwndChild)
{
    infoPtr->hwndChild = IsWindow (hwndChild) ? hwndChild : 0;

    if (infoPtr->hwndChild)
    {
        TRACE("[%p] hwndChild=%p\n", infoPtr->hwndSelf, infoPtr->hwndChild);

        SetWindowPos(infoPtr->hwndSelf, 0, 0, 0, 0, 0,
                     SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);

        /* position child within the page scroller */
        SetWindowPos(infoPtr->hwndChild, HWND_TOP,
                     0,0,0,0,
                     SWP_SHOWWINDOW | SWP_NOSIZE);  /* native is 0 */

        infoPtr->nPos = -1;
        PAGER_SetPos(infoPtr, 0, FALSE);
    }

    return 0;
}
示例#4
0
文件: pager.c 项目: howard5888/wineT
static LRESULT
PAGER_SetChild (PAGER_INFO* infoPtr, HWND hwndChild)
{
    INT hw;

    infoPtr->hwndChild = IsWindow (hwndChild) ? hwndChild : 0;

    if (infoPtr->hwndChild)
    {
        TRACE("[%p] hwndChild=%p\n", infoPtr->hwndSelf, infoPtr->hwndChild);

        if (infoPtr->dwStyle & PGS_HORZ) {
            hw = PAGER_SetFixedHeight(infoPtr);
            /* adjust non-scrollable dimension to fit the child */
            SetWindowPos(infoPtr->hwndSelf, 0, 0, 0, hw, infoPtr->nHeight,
                         SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER |
                         SWP_NOSIZE | SWP_NOACTIVATE);
        }
        else {
            hw = PAGER_SetFixedWidth(infoPtr);
            /* adjust non-scrollable dimension to fit the child */
            SetWindowPos(infoPtr->hwndSelf, 0, 0, 0, infoPtr->nWidth, hw,
                         SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOZORDER |
                         SWP_NOSIZE | SWP_NOACTIVATE);
        }

        /* position child within the page scroller */
        SetWindowPos(infoPtr->hwndChild, HWND_TOP,
                     0,0,0,0,
                     SWP_SHOWWINDOW | SWP_NOSIZE);  /* native is 0 */

        infoPtr->nPos = -1;
        PAGER_SetPos(infoPtr, 0, FALSE);
    }

    return 0;
}
示例#5
0
文件: pager.c 项目: howard5888/wineT
static LRESULT WINAPI
PAGER_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    PAGER_INFO *infoPtr = (PAGER_INFO *)GetWindowLongPtrW(hwnd, 0);

    if (!infoPtr && (uMsg != WM_CREATE))
        return DefWindowProcW (hwnd, uMsg, wParam, lParam);

    switch (uMsg)
    {
    case EM_FMTLINES:
        return PAGER_FmtLines(infoPtr);

    case PGM_FORWARDMOUSE:
        return PAGER_ForwardMouse (infoPtr, (BOOL)wParam);

    case PGM_GETBKCOLOR:
        return PAGER_GetBkColor(infoPtr);

    case PGM_GETBORDER:
        return PAGER_GetBorder(infoPtr);

    case PGM_GETBUTTONSIZE:
        return PAGER_GetButtonSize(infoPtr);

    case PGM_GETPOS:
        return PAGER_GetPos(infoPtr);

    case PGM_GETBUTTONSTATE:
        return PAGER_GetButtonState (infoPtr, (INT)lParam);

    /*      case PGM_GETDROPTARGET: */

    case PGM_RECALCSIZE:
        return PAGER_RecalcSize(infoPtr);

    case PGM_SETBKCOLOR:
        return PAGER_SetBkColor (infoPtr, (COLORREF)lParam);

    case PGM_SETBORDER:
        return PAGER_SetBorder (infoPtr, (INT)lParam);

    case PGM_SETBUTTONSIZE:
        return PAGER_SetButtonSize (infoPtr, (INT)lParam);

    case PGM_SETCHILD:
        return PAGER_SetChild (infoPtr, (HWND)lParam);

    case PGM_SETPOS:
        return PAGER_SetPos(infoPtr, (INT)lParam, FALSE);

    case WM_CREATE:
        return PAGER_Create (hwnd, (LPCREATESTRUCTW)lParam);

    case WM_DESTROY:
        return PAGER_Destroy (infoPtr);

    case WM_SIZE:
        return PAGER_Size (infoPtr, (INT)wParam, (short)LOWORD(lParam), (short)HIWORD(lParam));

    case WM_NCPAINT:
        return PAGER_NCPaint (infoPtr, (HRGN)wParam);

    case WM_WINDOWPOSCHANGING:
        return PAGER_WindowPosChanging (infoPtr, (WINDOWPOS*)lParam);

    case WM_STYLECHANGED:
        return PAGER_StyleChanged(infoPtr, wParam, (LPSTYLESTRUCT)lParam);

    case WM_NCCALCSIZE:
        return PAGER_NCCalcSize (infoPtr, wParam, (LPRECT)lParam);

    case WM_NCHITTEST:
        return PAGER_NCHitTest (infoPtr, (short)LOWORD(lParam), (short)HIWORD(lParam));

    case WM_MOUSEMOVE:
        if (infoPtr->bForward && infoPtr->hwndChild)
            PostMessageW(infoPtr->hwndChild, WM_MOUSEMOVE, wParam, lParam);
        return PAGER_MouseMove (infoPtr, (INT)wParam, (short)LOWORD(lParam), (short)HIWORD(lParam));

    case WM_LBUTTONDOWN:
        return PAGER_LButtonDown (infoPtr, (INT)wParam, (short)LOWORD(lParam), (short)HIWORD(lParam));

    case WM_LBUTTONUP:
        return PAGER_LButtonUp (infoPtr, (INT)wParam, (short)LOWORD(lParam), (short)HIWORD(lParam));

    case WM_ERASEBKGND:
        return PAGER_EraseBackground (infoPtr, (HDC)wParam);

    case WM_TIMER:
        return PAGER_Timer (infoPtr, (INT)wParam);

    case WM_NOTIFY:
    case WM_COMMAND:
        return SendMessageW (infoPtr->hwndNotify, uMsg, wParam, lParam);

    default:
        return DefWindowProcW (hwnd, uMsg, wParam, lParam);
    }
}