在CScrollView中的按钮不随滚动条一起走怎么办?

OnDraw 2003-10-08 11:53:07
窗口继承CScrollView,窗口中有一个位图按钮,但是按钮不随滚动条一起移动,怎么才能让这个按钮随着滚动条的移动而移入或移出屏幕?

void CPkgameView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();

CSize sizeTotal(2000,3000);
CSize sizePage(sizeTotal.cx/2,sizeTotal.cy/2);
CSize sizeLine(sizeTotal.cx/50,sizeTotal.cy/50);
SetScrollSizes(MM_TEXT,sizeTotal,sizePage,sizeLine);
}

void CPkgameView::OnDraw(CDC* pDC)
{
CPkgameDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here

mybmpbutton[0].MoveWindow(50,50,32,32,TRUE);//位图按钮

}
...全文
92 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
OnDraw 2003-10-08
  • 打赏
  • 举报
回复
to: wangjinwang(王进)

我的意思是移动滚动条后这个位图按钮应该从屏幕消失(跑到当前视口之外了),而不是要按钮一直在屏幕上
孤必有邻 2003-10-08
  • 打赏
  • 举报
回复
可以用函数GetScrollPosition解决,试试下面
void CPkgameView::OnDraw(CDC* pDC)
{
CPkgameDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CPoint ScrollPoint = GetScrollPosition();
mybmpbutton[0].MoveWindow(ScrollPoint.x+50,ScrollPoint.y+50,32,32,TRUE);//位图按钮

}
OnDraw 2003-10-08
  • 打赏
  • 举报
回复
to: mct1025(macuntao) ( )

我的意思是移动滚动条后这个位图按钮应该从屏幕消失(跑到当前视口之外了),而不是要按钮一直在屏幕上

wuxfBrave 2003-10-08
  • 打赏
  • 举报
回复
mybmpbutton[0].MoveWindow(50,50,32,32,TRUE);//位图按
坐标计算有问题,而且不要放在OnDraw中,最好响应消息WM_SCROLL,在其中进行处理
mct1025 2003-10-08
  • 打赏
  • 举报
回复
mybmpbutton[0].MoveWindow(50,50,32,32,TRUE);//位图按钮
改为
CPoint p;
p = this->GetScrollPosition();
mybmpbutton[0].MoveWindow(p.x+50,p.y+50,32,32,TRUE);
Paris_Luo 2003-10-08
  • 打赏
  • 举报
回复
试试SetWindowPos
wuxfBrave 2003-10-08
  • 打赏
  • 举报
回复
CSize sizeTotal(2000,3000);
CSize sizePage(sizeTotal.cx/2,sizeTotal.cy/2);
CSize sizeLine(sizeTotal.cx/50,sizeTotal.cy/50);

SetScrollSizes(MM_TEXT,sizeTotal,sizePage,sizeLine);

TCHAR szCaption[255];
CRect rc(1, 1, 50, 50);
for (int i = 0; i < 30; i++)
{
rc.OffsetRect(50, 50);
if (rc.right > 1900)
{
rc.right = 50;
rc.left = 1;
}

CButton *pButton = new CButton;
wsprintf(szCaption, _T("Button %d"), i);
pButton->Create(szCaption, WS_CHILD|WS_VISIBLE, rc, this, i);
m_listBtns.AddTail(pButton);
}

我试了一下,不用添加其他的代码,就可以实现你说的功能啊
mct1025 2003-10-08
  • 打赏
  • 举报
回复
用CFormView试试
OnDraw 2003-10-08
  • 打赏
  • 举报
回复
to: mct1025(macuntao)

老兄,感谢你的回复,你的方法我想了一下觉得应该是可行的,但是我的窗口大概要处理200个左右的按钮,这些按钮都在不同的位置,如果每个都计算太麻烦了,真的没有更加简单的方法了吗?盼复!
mct1025 2003-10-08
  • 打赏
  • 举报
回复
sorry,理解错误

试试这种处理办法
CPoint p;
p = this->GetScrollPosition();
if ((p.x > 50)||(p.y > 50))
m_pWnd->ShowWindow(SW_HIDE);
else
{
m_pWnd->ShowWindow(SW_RESTORE);
m_pWnd->MoveWindow(50,50,32,32,TRUE);
}

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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