wxClientDC dc(tmpTmpstaticBitmap);
wxPen pen(*wxBLACK, 1, wxDOT);
dc.SetPen(pen);
//以反逻辑函数绘制
dc.SetLogicalFunction(wxINVERT);
dc.DrawRectangle(tmpRect);//第一次绘制
dc.DrawRectangle(tmpRect);//第二次绘制的时候擦除
dc.SetLogicalFunction(wxCOPY);//恢复正常绘制的方法
鼠标拖动绘制矩形的方法:
1、鼠标在指定的区域中按下左键,记录下当前鼠标按下的位置;
2、捕捉鼠标移动的事件,只有当鼠标按下左键时并且Dragging时,如果上次有绘制的矩形先擦除,然后绘制当前要绘制的矩形,记录当前绘制的矩形的位置;
3、当鼠标左键弹起的时候,重新绘制擦除刚才的矩形,然后用实体矩形重新绘制
void StudyFrame::OnAllStaticBitmapLeftDown( wxMouseEvent& event )
{
if (tmpAllFlag == true) {
startPointOnAllStaticBitmap = event.GetPosition();
tmpAllIsLeftDown = true;
}
}
void StudyFrame::OnAllStaticBitmapLeftUp( wxMouseEvent& event )
{
wxPoint pt(0, 0);
if (tmpAllFlag == true && pt != oldEndPointOnAllStaticBitmap) {
wxClientDC dc(tmpAllStaticBitmap);
wxPen pen(*wxBLACK, 1, wxDOT);
dc.SetPen(pen);
//以反逻辑函数绘制
dc.SetLogicalFunction(wxINVERT);
wxPoint pt(0,0);
if (pt != oldEndPointOnAllStaticBitmap) {//擦除上次绘制的矩形
DrawRectangleLine(dc, startPointOnAllStaticBitmap, oldEndPointOnAllStaticBitmap);
}
dc.SetLogicalFunction(wxCOPY);//恢复正常绘制的方法
wxRect rect(startPointOnAllStaticBitmap, oldEndPointOnAllStaticBitmap);
wxPen newPen(*wxRED, 3, wxSOLID);
dc.SetPen(newPen);
wxBrush brush(wxColour(0, 0, 0), wxTRANSPARENT);
dc.SetBrush(brush);
dc.DrawRectangle(rect);
}
tmpAllFlag = false;
tmpAllIsLeftDown = false;
}
void StudyFrame::OnAllStaticBitmapMotion( wxMouseEvent& event )
{
if(event.Dragging() && tmpAllIsLeftDown){
wxPoint currentPoint(event.GetPosition());
wxClientDC dc(tmpAllStaticBitmap);
wxPen pen(*wxBLACK, 1, wxDOT);
dc.SetPen(pen);
//以反逻辑函数绘制
dc.SetLogicalFunction(wxINVERT);
wxPoint pt(0,0);
if (pt != oldEndPointOnAllStaticBitmap) {//擦除上次绘制的矩形
DrawRectangleLine(dc, startPointOnAllStaticBitmap, oldEndPointOnAllStaticBitmap);
}
DrawRectangleLine(dc, startPointOnAllStaticBitmap, currentPoint);
dc.SetLogicalFunction(wxCOPY);//恢复正常绘制的方法
oldEndPointOnAllStaticBitmap = currentPoint;
}
}