我需要在面板上顯示圖像。我得到了這個工作。圖像可以是任何類型,並且必須支持縮放功能。我能夠使用wxDC :: SetUserScale()來實現它。但是這個縮放是參考中心點。我的問題是我如何添加縮放功能,可以放大圖像面板中的任何位置,而不僅僅是中心。Wxwidget:添加具有縮放功能的圖像
她是我到目前爲止的代碼:
wxImagePanel::wxImagePanel(wxFrame* parent, wxImage img) :
wxPanel(parent)
{
image = img.Copy();
w = -1;
h = -1;
_factor = 0.25;
}
void wxImagePanel::paintEvent(wxPaintEvent & evt)
{
wxPaintDC dc(this);
render(dc);
}
void wxImagePanel::paintNow()
{
wxClientDC dc(this);
render(dc);
}
void wxImagePanel::render(wxDC& dc)
{
int neww, newh;
dc.GetSize(&neww, &newh);
dc.Clear();
dc.SetUserScale(_factor, _factor);
dc.DrawBitmap(image, 0, 0);
Update();
}
void wxImagePanel::OnSize(wxSizeEvent& event)
{
Update();
Refresh();
event.Skip();
}
void wxImagePanel::_onZoom(wxMouseEvent &event)
{
_xOffset /= _factor;
_yOffset /= _factor;
if (event.GetWheelRotation() > 0){
if (_factor >= 1.f){
_factor += 0.5f;
}
else{
_factor *= 2.f;
}
}
else{
if (_factor > 1.f){
_factor -= 0.5f;
}
else{
_factor /= 2.f;
}
}
_xOffset *= _factor;
_yOffset *= _factor;
if (_xOffset > image.GetWidth()*_factor - GetSize().GetWidth()){
_xOffset = image.GetWidth()*_factor - GetSize().GetWidth();
}
if (_yOffset > image.GetHeight()*_factor - GetSize().GetHeight()){
_yOffset = image.GetHeight()*_factor - GetSize().GetHeight();
}
paintNow();
}
請任何幫助 –