社区
界面
帖子详情
有滚动条的ListView控件movewindow出现的问题。
whiteeyes
2002-12-13 12:04:45
有滚动条的ListView控件,初始在客户端的某一部分,我用movewindow想让他到客户端的另一部分,结果是铺满了整个客户端,why??
我怀疑是滚动条的缘故,请问怎么解决?
...全文
127
11
打赏
收藏
有滚动条的ListView控件movewindow出现的问题。
有滚动条的ListView控件,初始在客户端的某一部分,我用movewindow想让他到客户端的另一部分,结果是铺满了整个客户端,why?? 我怀疑是滚动条的缘故,请问怎么解决?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
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
打赏
举报
回复
还是不行!楼上,你可以把邮箱地址短消息给我吗?这个问题困饶我好久了,我把程序给你发去你帮我看看,
[WTL/Win32]_[初级]_[如何设置
ListView
的列宽不
出现
水平
滚动条
]
1. 开发`WTL/Win32`的程序时,经常会用到表格
控件
`C
ListView
Ctrl`。这个
控件
需要设置列的宽度,当用完`100%`的宽度来平均分配给列宽时,一加载数据多,就会
出现
垂直
滚动条
后,水平
滚动条
也会同时
出现
的
问题
。怎么设置才能让水平
滚动条
不
出现
?
Win32 SDK Gui编程系列之--
滚动条
(ScrollBar)
nPage的值不能完全确定。即使是垂直滚动,如果画面的高度不是行的整数倍的话,也会
出现
零头,但是水平滚动这个零头的比例比较大,所以很显眼。但是,如图所示,下旋钮的值不是11(siv.nMax),而是7。经过试错的结果,发现水平滚动时,nMax不是列数,而是相当于全列宽度的像素数,nPage可以显示在画面上的像素数就可以了。生成窗口时,在样式中添加WS_VSCROLL|WS_HSCROLL的话,如下图所示,画面的底部和右端会显示
滚动条
。因为画面上显示的是5行,所以
滚动条
的旋钮(拇指)的宽度是整体的5/12。
Window
s编程入门-窗口
控件
-资源操作
window
控件
:
控件
是常见的窗口上的交互元素例如:一个按钮,一个复选框,一个列表框等。当
控件
的特定功能被触发后,会主动发送消息通知父窗口,父窗口可以通过发送消息给
控件
控制
控件
的行为。
控件
的本质是一个窗口
window
s窗口从其特点是主要分为两大类WC_
LISTVIEW
列表框
控件
WC_TREEVIEW 树
控件
WC_TABCONTROL Tab
控件
控件
的响应子
控件
通知父窗口一些事件,例如子
控件
被点击,需要通过以下两类消息标准
控件
的消息:WM_COMMAND。
MFC---List Control的用法总结
List Control是MFC中经常用到的
控件
,但是可惜该
控件
并不支持键盘输入、添加各种
控件
(Button、ComboBox...)等功能,说白了基本功能就是一个用于显示数据的表格性质
控件
。那么,对于键盘输入的支持以及
控件
的添加等功能具体如何实现,在下文中一一详述。一、基本的使用1.初始化风格对于style的(报表风格、单选模式等)设置;对于ExtendedStyle(网格添加、item前添...
在VC++6.0下构建可直接编辑的列表
控件
类
在VC++6.0下构建可直接编辑的列表
控件
类 刘 娅摘要 MFC中的CListCtrl类用于封装列表
控件
的各种操作,但CListCtrl类不支持直接编辑。本文介绍在VC++6.0中以CListCtrl类为基类构建可直接编辑的列表
控件
类的方法,并提供一个可运行的实例。关键词 CListCtr
界面
15,980
社区成员
115,867
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章