X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/954b8ae60391d18b87a604e7919c87c0c6ae208b..a1c3cdc4a2c4cc2b15d7fdf60c1be228f9fbc520:/docs/latex/wx/paintevt.tex diff --git a/docs/latex/wx/paintevt.tex b/docs/latex/wx/paintevt.tex index e7b0551f45..b2f9598bd4 100644 --- a/docs/latex/wx/paintevt.tex +++ b/docs/latex/wx/paintevt.tex @@ -2,6 +2,11 @@ A paint event is sent when a window's contents needs to be repainted. +Please notice that in general it is impossible to change the drawing of a +standard control (such as \helpref{wxButton}{wxbutton}) and so you shouldn't +attempt to handle paint events for them as even if it might work on some +platforms, this is inherently not portable and won't work everywhere. + \wxheading{Derived from} \helpref{wxEvent}{wxevent}\\ @@ -23,11 +28,72 @@ 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}}} -\membersection{wxPaintEvent::wxPaintEvent} +\membersection{wxPaintEvent::wxPaintEvent}\label{wxpainteventctor} \func{}{wxPaintEvent}{\param{int }{id = 0}}