evc4 怎么在对话框滚动条滚动时图片也随着动?

jannet1122 2005-07-18 05:52:11
我的代码如下:
void CInforDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CVOImage image;

if (Htname == "新吉士酒楼")
{ image.Load (dc, L"\\新吉士.gif");
image.Draw (dc, 0, 0); }
else if (Htname == "席家花园酒家")
{ image.Load (dc, L"\\xi's garden.gif");
image.Draw (dc, 0, 0); }
else if (Htname == "narcissus酒吧")
{ image.Load (dc, L"\\浣溪沙酒吧.gif");
image.Draw (dc, 0, 0); }
else if (Htname == "MURAL Bar & Restaurant")
{ image.Load (dc, L"\\摩砚吧.gif");
image.Draw (dc, 0, 0); }
else if (Htname == "东湖宾馆")
{ image.Load (dc, L"\\donghu hotel.gif");
image.Draw (dc, 0, 0); }
else if (Htname == "衡山宾馆")
{ image.Load (dc, L"\\hengshan hotel.gif");
image.Draw (dc, 0, 0); }
}


void CInforDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
UpdateData(TRUE);
int minpos;
int maxpos;
int postmp1;
LPRECT rects=new RECT;
CRect rect;
CDC hdc,memDC;
//CDialog::GetWindowRect(rects);

// int len=((rects->bottom) - (rects->top));

CDialog::SetScrollRange(SB_VERT,0,330,true);
CDialog::GetScrollRange(SB_VERT,&minpos, &maxpos);
maxpos = CDialog::GetScrollLimit(SB_VERT);
//maxpos = pScrollBar->GetScrollLimit();




static int curpos = CDialog::GetScrollPos(SB_VERT);
//curaddlian=&curpos;
SCROLLINFO info;


switch (nSBCode)
{
case SB_TOP: // Scroll to far left.

curpos = minpos;

CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
break;

case SB_BOTTOM: // Scroll to far right.
curpos = maxpos;

CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
break;

case SB_ENDSCROLL: // End scroll.
break;

case SB_LINEUP: // Scroll left.
if (curpos > minpos)
{
curpos-=10;

CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
break;

case SB_LINEDOWN: // Scroll right.
//if(maxpos==101){AfxMessageBox(_T("i am here"));}
if (curpos < maxpos)
{
curpos+=10;
//AfxMessageBox(_T("ok here"));

CDialog::ScrollWindowEx(0,nPos-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
//AfxMessageBox(_T("linedown"));
break;

case SB_PAGEUP: // Scroll one page left.
// Get the page size.

//pScrollBar->GetScrollInfo(&info, SIF_ALL);
CDialog::GetScrollInfo(SB_VERT,&info, SIF_ALL);

if (curpos > minpos)
{
//curpos = max(minpos, curpos - (int) info.nPage);
curpos = max(minpos, curpos - 10);

CDialog::ScrollWindowEx(0,10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
break;

case SB_PAGEDOWN: // Scroll one page right.
//pScrollBar->GetScrollInfo(&info, SIF_ALL);
CDialog::GetScrollInfo(SB_VERT,&info, SIF_ALL);

if (curpos < maxpos)
{
curpos = min(maxpos, curpos + (int) info.nPage);

curpos = min(maxpos, curpos + 10);
CDialog::ScrollWindowEx(0,-10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
break;

case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
postmp1=nPos;
if(curpos<postmp1)
{

curpos = nPos; // of the scroll box at the end of the drag
// operation.

CDialog::ScrollWindowEx(0,-10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
if(curpos>postmp1)
{

curpos = nPos; // of the scroll box at the end of the drag
// operation.

CDialog::ScrollWindowEx(0,10,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
}
break;

case SB_THUMBTRACK: // Drag scroll box to specified position. nPos is
int postmp2=curpos;
curpos = nPos; // position that the scroll box has been dragged
// to.

CDialog::ScrollWindowEx(0,postmp2-curpos,NULL,NULL,NULL,NULL,SW_SCROLLCHILDREN);
CDialog::UpdateWindow();
CDialog::SetScrollPos(SB_VERT,curpos,true);
break;
}

UpdateData(FALSE);
Invalidate();
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

cvoimage类是一个支持jpg,gif等图片文件的类,draw函数如下:
BOOL CVOImage::Draw(HDC hdc, int x, int y, int cx, int cy)

{
BITMAP bmp;

g_bStretchBlt = !(cx == -1 && cy == -1);

GetObject(m_hbitmap, sizeof(BITMAP), &bmp);

if (g_bStretchBlt) // Stretch to fit
StretchBlt(hdc, x , y, cx, cy, m_hdc,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY );
else
BitBlt(hdc, x, y, bmp.bmWidth, bmp.bmHeight, m_hdc,0,0,SRCCOPY );

return TRUE;
}

现在我的滚动条是可以滚动的,但是图片是不动的,只是在不断的刷新,要怎么写才能让滚动条带动图片移动?
...全文
272 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alan S1 2005-08-03
  • 打赏
  • 举报
回复
帮忙顶啊
jannet1122 2005-07-23
  • 打赏
  • 举报
回复
有没有人来看看呀
帮着顶也给分阿
jannet1122 2005-07-19
  • 打赏
  • 举报
回复
还是不会
能不能给出具体的代码
jannet1122 2005-07-19
  • 打赏
  • 举报
回复
高手来看看啊
帮帮我啊~
nonocast 2005-07-18
  • 打赏
  • 举报
回复
计算坐标原点,然后bitblt改变src的起始坐标
AntonlioX 2005-07-18
  • 打赏
  • 举报
回复
up
flyelf 2005-07-18
  • 打赏
  • 举报
回复
图片的位置也要重新计算

15,978

社区成员

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

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