示例#1
0
INT_PTR TffdshowPageDec::msgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg) {
    case WM_COMMAND:
        switch (LOWORD(wParam)) {
        case IDC_CBX_PRESETS:
            if (HIWORD(wParam) == CBN_SELCHANGE) {
                char_t presetName[256], actPresetName[256];
                GetDlgItemText(m_hwnd, IDC_CBX_PRESETS, presetName, 255);
                deciD->getActivePresetName(actPresetName, 255);
                if (stricmp(presetName, actPresetName) != 0) {
                    selectPreset(presetName);
                }
                return TRUE;
            }
            break;
        }
        break;
    case WM_FFONNEWFILTERS: {
        for (ThtiPages::const_iterator hp = filterPages.begin(); hp != filterPages.end(); hp++)
            for (TconfPages::const_iterator i = (*hp)->begin(); i != (*hp)->end(); i++) {
                ((TconfPageDec*)(*i))->onNewFilter();
            }
        return TRUE;
    }
    case WM_NOTIFY: {
        NMHDR *nmhdr = LPNMHDR(lParam);
        if (nmhdr->hwndFrom == htv && nmhdr->idFrom == IDC_TV_TREE)
            switch (nmhdr->code) {
            case TVN_GETINFOTIP: {
                if (!cfgGet(IDFF_showHints)) {
                    return FALSE;
                }
                NMTVGETINFOTIP *nmtvit = LPNMTVGETINFOTIP(lParam);
                TconfPageBase *page = hti2page(nmtvit->hItem);
                char_t tipS[1024] = _l("");
                if (deciD->getFilterTipEx(page->filterID, page->filterPageID, tipS, 1023) != S_OK) {
                    page->getTip(tipS, 1023);
                }
                if (tipS[0] == '\0') {
                    return FALSE;
                }
                memset(nmtvit->pszText, 0, nmtvit->cchTextMax);
                ff_strncpy(nmtvit->pszText, tipS, nmtvit->cchTextMax - 1);
                return TRUE;
            }
            case NM_CUSTOMDRAW: {
                NMTVCUSTOMDRAW *tvcd = LPNMTVCUSTOMDRAW(lParam);
                int rcDy = tvcd->nmcd.rc.bottom - tvcd->nmcd.rc.top;
                if (tvcd->nmcd.dwDrawStage == CDDS_PREPAINT) {
                    setDlgResult(CDRF_NOTIFYITEMDRAW);
                    return TRUE;
                } else if (tvcd->nmcd.dwDrawStage == CDDS_ITEMPREPAINT) {
                    TconfPageBase *page = ((ThtiPage*)tvcd->nmcd.lItemlParam)->getPage();
                    if (page->getInter() == -1 && page->getOrder() == -1) {
                        return FALSE;
                    }
                    setDlgResult(CDRF_NOTIFYPOSTPAINT);
                    return TRUE;
                } else if (tvcd->nmcd.dwDrawStage == CDDS_ITEMPOSTPAINT) {
                    RECT &tr = tvcd->nmcd.rc;
                    if (tr.right > tr.left && tr.bottom > tr.top) {
                        RECT rr;
                        TreeView_GetItemRect(htv, HTREEITEM(tvcd->nmcd.dwItemSpec), &rr, true);
                        rr.left -= 24;
                        TconfPageBase *page = ((ThtiPage*)tvcd->nmcd.lItemlParam)->getPage();
                        if (page->getInter() != -1) {
                            ImageList_Draw(hil, page->getInter() ? ilChecked : ilClear, tvcd->nmcd.hdc, tr.left + 8 + rr.left, tr.top + (rcDy - 16) / 2, ILD_TRANSPARENT);
                        }
                        if (isIn(page->getOrder(), deciD->getMinOrder2(), deciD->getMaxOrder2()) && (tvcd->nmcd.uItemState & CDIS_SELECTED)) {
                            int img;
                            HTREEITEM hti = page->hti;
                            HTREEITEM htiPrev = TreeView_GetPrevVisible(htv, hti), htiNext = TreeView_GetNextVisible(htv, hti);
                            int order = page->getOrder(), orderPrev = hti2page(htiPrev)->getOrder(), orderNext = hti2page(htiNext)->getOrder();
                            if (order == deciD->getMinOrder2()) {
                                img = ilArrowD;
                            } else if (order == deciD->getMaxOrder2()) {
                                img = ilArrowU;
                            } else {
                                img = ilArrowUD;
                            }
                            ImageList_DrawEx(hil, img, tvcd->nmcd.hdc, tr.left + 2 + rr.left, tr.top + (rcDy - 16) / 2, 5, 16, CLR_DEFAULT, CLR_DEFAULT, ILD_TRANSPARENT);
                        }
                    }
                    return TRUE;
                }
                return FALSE;
            }
            case NM_CLICK: {
                POINT ps;
                GetCursorPos(&ps);
                ScreenToClient(htv, &ps);
                TVHITTESTINFO tvhti;
                tvhti.pt = ps;
                HTREEITEM hti = TreeView_HitTest(htv, &tvhti);
                if (!hti) {
                    return FALSE;
                }
                RECT rr;
                TreeView_GetItemRect(htv, hti, &rr, TRUE);
                RECT r;
                TreeView_GetItemRect(htv, hti, &r, FALSE);
                ps.x -= rr.left - 24;
                int iconTop = ((r.bottom - r.top) - 16) / 2;
                ps.y -= r.top;
                if (ps.x >= 8 && ps.x <= 16 + 8 && ps.y >= iconTop + 2 && ps.y <= iconTop + 13) {
                    if (invInter(hti2page(hti), &r)) {
                        return TRUE;
                    }
                } else if (ps.x >= 2 && ps.x <= 7 && TreeView_GetSelection(htv) == tvhti.hItem) {
                    int center = (r.bottom - r.top) / 2;
                    if (ps.y > center - 6 && ps.y < center - 1 && page->getOrder() > deciD->getMinOrder2()) {
                        swap(-1);
                        return TRUE;
                    } else if (ps.y > center + 1 && ps.y < center + 6 && page->getOrder() < deciD->getMaxOrder2()) {
                        swap(1);
                        return TRUE;
                    }
                }
                return FALSE;
            }
            case TVN_BEGINDRAG: {
                NMTREEVIEW *nmtv = LPNMTREEVIEW(lParam);
                dragpage = hti2page(nmtv->itemNew.hItem);
                int order = dragpage->getOrder();
                TreeView_SelectItem(htv, nmtv->itemNew.hItem);
                if (isIn(order, deciD->getMinOrder2(), deciD->getMaxOrder2())) {
                    SetCapture(m_hwnd);
                } else {
                    dragpage = NULL;
                }
                break;
            }
            }
        break;
    }
    case WM_MOUSEMOVE:
        if (dragpage) {
            TVHITTESTINFO tvhti;
            tvhti.pt.x = LOWORD(lParam) - tvx;
            tvhti.pt.y = HIWORD(lParam) - tvy;
            if (HTREEITEM htiTarget = TreeView_HitTest(htv, &tvhti)) {
                //TreeView_SelectDropTarget(htv,htiTarget);
                TconfPageBase *targetpage = hti2page(htiTarget);
                if (isIn(targetpage->getOrder(), deciD->getMinOrder2(), deciD->getMaxOrder2())) {
                    swap(dragpage, targetpage);
                }
            }
            return TRUE;
        }
        break;
    case WM_LBUTTONUP:
        if (dragpage) {
            dragpage = NULL;
            ReleaseCapture();
            return TRUE;
        }
        break;
    }
    return TffdshowPageBase::msgProc(uMsg, wParam, lParam);
}
示例#2
0
INT_PTR TffdshowPageBase::msgProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg) {
        case WM_DESTROY: {
            for (ThtiPages::const_iterator htiPage = htiPages.begin(); htiPage != htiPages.end(); htiPage++) {
                delete *htiPage;
            }
            htiPages.clear();
            page = NULL;
            if (arrowsFont) {
                DeleteObject(arrowsFont);
            }
            arrowsFont = NULL;
            if (hil) {
                ImageList_Destroy(hil);
            }
            hil = NULL;
            for (int i = 0; i < countof(bmp1); i++) {
                DeleteObject(bmp1[i]);
                DeleteObject(bmp2[i]);
            }
            break;
        }
        case WM_FFONCHANGE:
            DPRINTF(_l("onChangeParam"));
            if (wParam == IDFF_alwaysOnTop && IsWindow(dlg)) {
                SetWindowPos(dlg, lParam ? HWND_TOPMOST : HWND_TOP, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
            }
            if (wParam != 0) {
                setChange();
            }
            return TRUE;
        case WM_FFONFRAME: {
            MSG msg;
            if (PeekMessage(&msg, m_hwnd, WM_FFONFRAME, WM_FFONFRAME, PM_NOREMOVE)) {
                return TRUE;    // drop msg when next WM_FFONFRAME is already in the message queue.
            }
            for (ThtiPages::const_iterator hp = htiPages.begin(); hp != htiPages.end(); hp++)
                for (TconfPages::const_iterator i = (*hp)->begin(); i != (*hp)->end(); i++)
                    if ((*i)->m_hwnd) {
                        (*i)->onFrame();
                    }
            return TRUE;
        }
        case WM_COMMAND:
            switch (LOWORD(wParam)) {
                case IDC_BT_HELP:
                    if (HIWORD(wParam) == BN_CLICKED) {
                        onHelp();
                        return TRUE;
                    }
                    break;
            }
            break;
        case WM_CONTEXTMENU:
            if (translateTV()) {
                return TRUE;
            }
            break;
        case WM_NOTIFY: {
            NMHDR *nmhdr = LPNMHDR(lParam);
            if (nmhdr->hwndFrom == htv && nmhdr->idFrom == IDC_TV_TREE)
                switch (nmhdr->code) {
                    case TVN_SELCHANGED: {
                        NMTREEVIEW *nmtv = LPNMTREEVIEW(lParam);
                        if (nmtv->itemNew.hItem) {
                            selectPage(hti2page(nmtv->itemNew.hItem));
                            return TRUE;
                        }
                        break;
                    }
                    case TVN_ITEMEXPANDING: {
                        NMTREEVIEW *nmtv = LPNMTREEVIEW(lParam);
                        if (nmtv->action == TVE_COLLAPSE) {
                            setDlgResult(TRUE);
                        }
                        return TRUE;
                    }
                }
            break;
        }
    }
    return Twindow::msgProc(uMsg, wParam, lParam);
}