wxWidgets中不断重绘矩形的方法

来源:互联网 发布:java 包命名特殊符合 编辑:程序博客网 时间:2024/04/30 06:14
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; }}


原创粉丝点击