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

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

我怀疑是滚动条的缘故,请问怎么解决?
...全文
184 11 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
还是不行!楼上,你可以把邮箱地址短消息给我吗?这个问题困饶我好久了,我把程序给你发去你帮我看看,
代码转载自:https://pan.quark.cn/s/2af55a97eb0f **INA226测试程序参考** 在电子工程和嵌入式系统开发领域,INA226被认为是一款高精度且低功耗的电流与电源监控器,其应用范围广泛,涵盖电池管理系统、电源路径管理以及智能能源监测等多个方面。该芯片由德州仪器(Texas Instruments)负责生产,能够提供精确的电流和电压测量结果,并具备灵活的配置选择。 **INA226芯片功能详解** INA226的核心特性包括: 1. **双向电流测量**:能够测量流经设备的正向电流和反向电流。 2. **高压和低压测量**:支持高达60V的电压测量,同时可以测量从微安到安培范围内的电流。 3. **内置模拟电路**:集成了一个精密运算放大器、一个电流检测放大器以及一个高精度电压基准。 4. **I2C接口**:通过标准的I2C接口与微控制器进行通信,便于读取测量数据。 5. **多种配置模式**:允许选择不同的电流和电压范围,以适应不同应用场景的需求。 6. **低功耗**:在待机状态下,功耗非常低,适合用于电池供电的设备。 **平台IO与ESP8266开发环境** `PlatformIO`是一个开源的跨平台集成开发环境,专注于物联网(IoT)项目的开发。它整合了构建系统、库管理和设备支持,显著简化了嵌入式开发流程。`ESP8266`是由乐鑫科技推出的一款低成本且高性能的Wi-Fi微控制器,常用于智能家居和物联网领域。 在`PlatformIO`中配置和编写针对`ESP8266`的INA226测试程序,需要遵循以下步骤: 1. **安装PlatformIO**:在IDE(例如Visual Studio Code、Atom等...

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧