当拆分器在 WTL 中移动时,我需要使两个窗格无效。目前其中一个在分离器移动时失效,另一个在分离器移动停止时失效。如何处理分离器移动?
问问题
135 次
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 回答