<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><P>Hi all,</P>
<P>&nbsp;</P>
<P>I just started using wxWidgets with&nbsp;Cairo. My target platform right now is Win32. I'm pretty new to wxWidgets, Cairo, and GDI, and I'm madly trying to grok it all.</P>
<P>&nbsp;</P>
<P>I'm having trouble getting the following code to show anything, and I'm not sure what's wrong. It's supposed to create a Cairo surface based on the win32 surface, draw to it, and then bitblt it back to my window (a combination of gradients that cover the surface). Nothing shows up, though. This sample is based on the Docview wxWidgets sample, and the Gradient Cairo sample.</P>
<P>&nbsp;</P>
<P>I'm looking for pointers and perhaps any online resources that discuss using&nbsp;Cairo/Win32GDI/wxWidgets all at once (it doesn't seem to be a popular combination, most seem to be using GTK/Cairo).&nbsp;Also, what is the most efficient manner for drawing to GDI surfaces? In this case, I'm doing a bitblt of a buffer.. But is there a way to draw directly with double buffering?</P>
<P>&nbsp;</P>
<P>void MyView::OnDraw(wxDC *dc)<BR>{<BR>&nbsp;&nbsp;&nbsp; &nbsp;// wxFrame* m_frame<BR>&nbsp;&nbsp;&nbsp; &nbsp;HWND hWnd = (HWND)m_frame-&gt;GetHWND();</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;PAINTSTRUCT ps;<BR>&nbsp;&nbsp;&nbsp; &nbsp;HDC hDc = BeginPaint(hWnd, &amp;ps);<BR>&nbsp;&nbsp;&nbsp; &nbsp;RECT rc;<BR>&nbsp;&nbsp;&nbsp; &nbsp;BOOL succ = GetClientRect(hWnd, &amp;rc);</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;long width = rc.right - rc.left;<BR>&nbsp;&nbsp;&nbsp; &nbsp;long height = rc.bottom - rc.top;<BR>&nbsp;&nbsp;&nbsp; &nbsp;long x = rc.left;<BR>&nbsp;&nbsp;&nbsp; &nbsp;long y = rc.top;</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;HDC hBuffer = CreateCompatibleDC(hDc);<BR>&nbsp;&nbsp;&nbsp; &nbsp;HBITMAP hBitmap = CreateCompatibleBitmap(hDc,width,height);<BR>&nbsp;&nbsp;&nbsp; &nbsp;HGDIOBJ hOldBitmap = SelectObject(hBuffer, hBitmap);</P>
<P>&nbsp;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp; //cairo</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cairo_surface_t* surf = cairo_win32_surface_create(hBuffer);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_t* ctx = cairo_create(surf);</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;cairo_pattern_t *pat;</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;pat = cairo_pattern_create_linear (0.0, 0.0,&nbsp; 0.0, (double)height);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_pattern_add_color_stop_rgba (pat, 1, 0, 0, 0, 1);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, 1);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_rectangle (ctx, 0, 0, (double)width, (double)height);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_set_source (ctx, pat);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_fill (ctx);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_pattern_destroy (pat);</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;pat = cairo_pattern_create_radial (115.2, 102.4, 25.6,<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 102.4,&nbsp; 102.4, 128.0);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, 1);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_pattern_add_color_stop_rgba (pat, 1, 0, 0, 0, 1);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_set_source (ctx, pat);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_arc (ctx, 128.0, 128.0, 76.8, 0, 2 * M_PI);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_fill (ctx);<BR>&nbsp;&nbsp;&nbsp; &nbsp;cairo_pattern_destroy (pat);</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;cairo_surface_finish(surf);</P>
<P>&nbsp;</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BitBlt(hDc, 0, 0, width,&nbsp; height, hBuffer, x, y, SRCCOPY);</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;SelectObject( hBuffer, hOldBitmap );<BR>&nbsp;&nbsp;&nbsp; &nbsp;DeleteObject( hBitmap );<BR>&nbsp;&nbsp;&nbsp; &nbsp;DeleteDC( hBuffer );</P>
<P>&nbsp;&nbsp;&nbsp; &nbsp;EndPaint(hWnd, &amp;ps);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>}</P>
<P>&nbsp;</P>
<P>Any help is appreciated..!</P>
<P>&nbsp;</P>
<P>Thank you,<BR>Sean</P>
<DIV></DIV>
<DIV>&nbsp;</DIV></div></body></html>