0

当拆分器在 WTL 中移动时,我需要使两个窗格无效。目前其中一个在分离器移动时失效,另一个在分离器移动停止时失效。如何处理分离器移动?

4

1 回答 1

1

您通常不需要显式无效,因为拆分器会移动子窗口并且它们会收到常规消息,例如WM_SIZE导致 UI 更新。问题本身表明子窗口有问题。

您当然可以覆盖拆分器UpdateWindow以处理拆分器重新定位的结束,但您通常不需要这样做。SetWindowPos拆分器本身在其帮助器方法中应用到窗格本身无效UpdateSplitterLayout,您可以使用调试器单步执行该方法以确保此代码正在执行。

LRESULT OnMouseMove(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    // [...]
            if(m_bFullDrag)
            {
                if(pT->SetSplitterPos(xyNewSplitPos, true))
                    pT->UpdateWindow();

bool SetSplitterPos(int xyPos = -1, bool bUpdate = true)
{
    // [...]
        UpdateSplitterLayout();

void UpdateSplitterLayout()
{
    // [...]
        for(int nPane = 0; nPane < m_nPanesCount; nPane++)
        {
            // [...]
                    ::SetWindowPos(m_hWndPane[nPane], NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);

您可能希望确保m_bFullDrag设置为TRUE在移动过程中强制重绘。

于 2013-09-07T20:40:39.070 回答