Как прокручивать автоматически, когда я выбираю область на изображении в picturecontrol, которая является большой?
у меня есть элемент управления picture, в котором у меня есть как вертикальные, так и горизонтальные полосы прокрутки, так что когда я щелкаю и перетаскиваю область на изображении, так что если область выделения больше в picturecontrol, как она автоматически прокручивается в диалоговом окне mfc vc++
Что я уже пробовал:
m_ROIPicctrl.GetClientRect( &rectStaticClient ); rectStaticClient.NormalizeRect(); m_size.cx=rectStaticClient.Size().cx; m_size.cy=rectStaticClient.Size().cy; m_size.cx = rectStaticClient.Width(); // zero based m_size.cy = rectStaticClient.Height(); // zero based // Convert to screen coordinates using static as base, // then to DIALOG (instead of static) client coords // using dialog as base m_ROIPicctrl.ClientToScreen( &rectStaticClient ); ScreenToClient(&rectStaticClient); m_pt.x = rectStaticClient.left; m_pt.y = rectStaticClient.top; GetObject( m_hBmpNew , sizeof(BITMAP), &m_bmInfo ); VERIFY(m_hBmpOld = (HBITMAP)SelectObject(m_dcMem, m_hBmpNew ) ); CRect irectnew; GetDlgItem(IDC_STC_ROIPICCTRL)->GetClientRect(irectnew); GetDlgItem(IDC_STC_ROIPICCTRL)->GetWindowRect(irectnew); //m_nLastPicctlValue = m_recDispViewWnd.right ; ScreenToClient(irectnew); m_noffsetx= m_pt.x; m_noffsety=m_pt.y; m_vbar.MoveWindow(m_noffsetx+m_size.cx,m_noffsety,18,m_size.cy); m_hbar.MoveWindow(m_noffsetx,m_noffsety+m_size.cy,m_size.cx,18); horz.cbSize = sizeof(SCROLLINFO); horz.fMask = SIF_ALL; horz.nMin = 0; horz.nMax = m_bmInfo.bmWidth-m_size.cx; horz.nPage =0; horz.nPos = 0; horz.nTrackPos=0; if(m_bmInfo.bmWidth<=m_size.cx) { if((m_size.cx-m_bmInfo.bmWidth)==0) m_noffsetx= m_pt.x; else m_noffsetx= m_pt.x+((m_size.cx-m_bmInfo.bmWidth)/2); m_vbar.MoveWindow(m_noffsetx+m_bmInfo.bmWidth,m_noffsety,18,m_size.cy); m_hbar.ShowWindow(false); } else m_hbar.ShowWindow(true); m_hbar.SetScrollInfo(&horz); vert.cbSize = sizeof(SCROLLINFO); vert.fMask = SIF_ALL; vert.nMin = 0; vert.nMax = m_bmInfo.bmHeight-(m_size.cy); vert.nPage = 0; vert.nPos = 0; vert.nTrackPos=0; if(m_bmInfo.bmHeight<=m_size.cy) { if((m_size.cy-m_bmInfo.bmHeight)==0) m_noffsety= m_pt.y; else m_noffsety= m_pt.y+((m_size.cy-m_bmInfo.bmHeight)/2); m_hbar.MoveWindow(m_noffsetx,m_noffsety+m_bmInfo.bmHeight,m_size.cx,18); m_vbar.ShowWindow(false); //DispImage(m_iplSrc); } else m_vbar.ShowWindow(true); m_vbar.SetScrollInfo(&vert); //InvalidateRect(&rectStaticClient); //} } m_vbar.setscrollpos(m_noffsetx); m_hbar.setscrollpos(m_noffsety);
Richard MacCutchan
В чем проблема?
NANDA KUMAR
я хочу выбрать roi в picturecontrol и при перетаскивании интересующей области окно должно двигаться
Richard MacCutchan
Прокрутка-это просто перекраска содержимого окна в другое положение. Вы проверили методы элемента управления, чтобы увидеть, как он управляет прокруткой?