当分割器在WTL中移动时,我需要使两个窗格无效。目前其中一个在分离器移动时无效,而另一个在分离器移动停止时无效。 如何处理分离器移动?
答案 0 :(得分: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
,以便在移动过程中强制重新绘制。