]> git.saurik.com Git - wxWidgets.git/blobdiff - docs/latex/wx/paintevt.tex
Applied patch [ 827011 ] Event-based processing of item tooltips in wxTreeCtrl
[wxWidgets.git] / docs / latex / wx / paintevt.tex
index e7b0551f45a769a92ccccc68220348962f9ded09..cae225e95e704615117cb069ad55a059b5fd96a5 100644 (file)
@@ -23,7 +23,68 @@ function that takes a wxPaintEvent argument.
 
 \wxheading{See also}
 
-\helpref{wxWindow::OnPaint}{wxwindowonpaint}, \helpref{Event handling overview}{eventhandlingoverview}
+%\helpref{wxWindow::OnPaint}{wxwindowonpaint}, 
+\helpref{Event handling overview}{eventhandlingoverview}
+
+\wxheading{Remarks}
+
+Note that In a paint event handler, the application must {\it always} create a \helpref{wxPaintDC}{wxpaintdc} object,
+even if you do not use it. Otherwise, under MS Windows, refreshing for this and other windows will go wrong.
+
+For example:
+
+\small{%
+\begin{verbatim}
+  void MyWindow::OnPaint(wxPaintEvent& event)
+  {
+      wxPaintDC dc(this);
+
+      DrawMyDocument(dc);
+  }
+\end{verbatim}
+}%
+
+You can optimize painting by retrieving the rectangles
+that have been damaged and only repainting these. The rectangles are in
+terms of the client area, and are unscrolled, so you will need to do
+some calculations using the current view position to obtain logical,
+scrolled units.
+
+Here is an example of using the \helpref{wxRegionIterator}{wxregioniterator} class:
+
+{\small%
+\begin{verbatim}
+// Called when window needs to be repainted.
+void MyWindow::OnPaint(wxPaintEvent& event)
+{
+  wxPaintDC dc(this);
+
+  // Find Out where the window is scrolled to
+  int vbX,vbY;                     // Top left corner of client
+  GetViewStart(&vbX,&vbY);
+
+  int vX,vY,vW,vH;                 // Dimensions of client area in pixels
+  wxRegionIterator upd(GetUpdateRegion()); // get the update rect list
+
+  while (upd)
+  {
+    vX = upd.GetX();
+    vY = upd.GetY();
+    vW = upd.GetW();
+    vH = upd.GetH();
+
+    // Alternatively we can do this:
+    // wxRect rect(upd.GetRect());
+
+    // Repaint this rectangle
+    ...some code...
+
+    upd ++ ;
+  }
+}
+\end{verbatim}
+}%
+
 
 \latexignore{\rtfignore{\wxheading{Members}}}