有滚动条的ListView控件movewindow出现的问题。

whiteeyes 2002-12-13 12:04:45
有滚动条的ListView控件,初始在客户端的某一部分,我用movewindow想让他到客户端的另一部分,结果是铺满了整个客户端,why??

我怀疑是滚动条的缘故,请问怎么解决?
...全文
70 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
whiteeyes 2002-12-14
兄弟,真是太感谢你了!
回复
whiteeyes 2002-12-14
谢谢!呵呵!
回复
hnyyy 2002-12-13
rect.InflateRect(-20,-20);

改成
rect.DeflateRect(20,20);
rect.NormalizeRect();

试试。


回复
whiteeyes 2002-12-13
哦,我的是一个以listctrl为父类的子类sortListctrl.

程序初始化时即调用Onsize事件:
void CHisPacketView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
//CFormView::ShowScrollBar(SB_VERT,FALSE);
//CFormView::ShowScrollBar(SB_HORZ,FALSE);

if (GetSafeHwnd())
{
if (m_HisSortListCtrl.GetSafeHwnd())
{
CRect rect;
GetClientRect(&rect);
rect.InflateRect(-20,-20);
m_HisSortListCtrl.MoveWindow(&rect);
}
}
}

运行好好的。

执行一些操作,主要是对listCtrl进行AddItem操作后,再Onsize,就变成上面说的了。

这个是该子类的函数
int CSortListCtrl::AddItem( LPCTSTR pszText, ... )
{
const int iIndex = InsertItem( GetItemCount(), pszText );

LPTSTR* arrpsz = new LPTSTR[ m_iNumColumns ];
arrpsz[ 0 ] = new TCHAR[ lstrlen( pszText ) + 1 ];
(void)lstrcpy( arrpsz[ 0 ], pszText );

va_list list;
va_start( list, pszText );

for( int iColumn = 1; iColumn < m_iNumColumns; iColumn++ )
{
pszText = va_arg( list, LPCTSTR );
ASSERT_VALID_STRING( pszText );
VERIFY( CListCtrl::SetItem( iIndex, iColumn, LVIF_TEXT, pszText, 0, 0, 0, 0 ) );

arrpsz[ iColumn ] = new TCHAR[ lstrlen( pszText ) + 1 ];
(void)lstrcpy( arrpsz[ iColumn ], pszText );
}

va_end( list );

VERIFY( SetTextArray( iIndex, arrpsz ) );

return iIndex;
}
回复
hnyyy 2002-12-13
不够详细,是说ListCtrl吗?
应该是m_ListCtrl.MoveWindow( rect );中的rect不对。

我的ListCtrl有滚动条时,使用MoveWindow不见有问题。
回复
hnyyy 2002-12-13
朋友,我想我还是够义气吧?
帮你找出来了,不过还存在的其它问题你别问我了,自己找吧!

BOOL CRightPaneFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
m_pCapSplitterView = new CCapSplitterView;
((CView*) m_pCapSplitterView)->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_CapPacketView, pContext);
SetActiveView(m_pCapSplitterView);

m_nCurrentViewID = VIEW_CapPacketView;

m_pCapSplitterView->ShowWindow(SW_SHOW);
m_pCapSplitterView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_nCurrentViewID = VIEW_CapPacketView;

m_pSplitterView = new CSplitterView;
((CView*)m_pSplitterView)->Create(NULL, NULL, 0L, CFrameWnd::rectDefault, this, VIEW_SPLITTER, pContext);
m_pSplitterView->ShowWindow(SW_HIDE);
m_pSplitterView->SetDlgCtrlID(VIEW_SPLITTER);


RecalcLayout();

return TRUE;
}

void CRightPaneFrame::SwitchToView(UINT nView)
{
CView* pOldActiveView = NULL;
if(m_nCurrentViewID == VIEW_CapPacketView)
pOldActiveView = (CView*) m_pCapSplitterView;
else
pOldActiveView = (CView*) m_pSplitterView;


CView* pNewActiveView = NULL;

switch (nView)
{
case VIEW_CapPacketView:
pNewActiveView = (CView*) m_pCapSplitterView;
break;
case VIEW_SPLITTER:
pNewActiveView = (CView*) m_pSplitterView;
break;
}

if (pNewActiveView)
{
// don't switch when views are the same
if (pOldActiveView == pNewActiveView) return;

SetActiveView(pNewActiveView);
pNewActiveView->ShowWindow(SW_SHOW);
pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
pOldActiveView->ShowWindow(SW_HIDE);
pOldActiveView->SetDlgCtrlID(m_nCurrentViewID);
m_nCurrentViewID = nView;

RecalcLayout();
}
}
回复
whiteeyes 2002-12-13
我看看,不会是这个原因吧?

你多运行几次,呵呵.

我这边也改一下.
回复
hnyyy 2002-12-13
还是不行,总之不是那个ListCtrl的原因是肯定的。
回复
hnyyy 2002-12-13
上面只是将你的代码简单改了一下,试了没问题。你自己再把代码仔细改改了。
回复
hnyyy 2002-12-13
经查,你的代码应该这样:


void CCapSplitterView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CRect r;
GetClientRect(r);
cx = r.Width();
cy = r.Height();
m_wndSplitter.MoveWindow(-2,-2,cx+4,cy+4);
m_wndSplitter.SetRowInfo(0, cy-(cy/4), 0);
m_wndSplitter.SetRowInfo(1, cy/4, 20);
m_wndSplitter.RecalcLayout();
/*
m_wndSplitter.MoveWindow(-2,-2,cx+4,cy+4);
m_wndSplitter.SetRowInfo(0, cy-(cy/4), 0);
m_wndSplitter.SetRowInfo(1, cy/4, 20);
m_wndSplitter.RecalcLayout();
*/
}
回复
whiteeyes 2002-12-13
还是不行!楼上,你可以把邮箱地址短消息给我吗?这个问题困饶我好久了,我把程序给你发去你帮我看看,
回复
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2002-12-13 12:04
社区公告
暂无公告