<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:arial, helvetica, sans-serif;font-size:10pt"><DIV>Hakki,</DIV>
<DIV>&nbsp;</DIV>
<DIV>That worked perfectly -- I didn't realize I was making more work for myself than I realized. And I appreciate you making it more cross-platform.. Point noted. :)</DIV>
<DIV>&nbsp;</DIV>
<DIV>Sean<BR>&nbsp;</DIV>--
<DIV style="FONT-SIZE: 10pt; FONT-FAMILY: arial, helvetica, sans-serif"><BR><BR>
<DIV style="FONT-SIZE: 12pt; FONT-FAMILY: times new roman, new york, times, serif">----- Original Message ----<BR>From: Hakki Dogusan &lt;dogusanh@tr.net&gt;<BR>To: cairo@cairographics.org<BR>Sent: Saturday, January 26, 2008 1:48:35 PM<BR>Subject: Re: [cairo] Cairo + Win32 GDI + wxWidgets?<BR><BR>Hi,<BR><BR>(Code modified inline)<BR><BR>Sean Dunn yazmış:<BR>&gt; Hi all,<BR>&gt; <BR>&gt;&nbsp; <BR>&gt; <BR>&gt; I just started using wxWidgets with Cairo. My target platform right now <BR>&gt; is Win32. I'm pretty new to wxWidgets, Cairo, and GDI, and I'm madly <BR>&gt; trying to grok it all.<BR>&gt; <BR>&gt;&nbsp; <BR>&gt; <BR>&gt; I'm having trouble getting the following code to show anything, and I'm <BR>&gt; not sure what's wrong. It's supposed to create a Cairo surface based on <BR>&gt; the win32 surface, draw to it, and then bitblt it back to my window (a <BR>&gt; combination of gradients that cover the surface). Nothing shows up, <BR>&gt; though.
 This sample is based on the Docview wxWidgets sample, and the <BR>&gt; Gradient Cairo sample.<BR>&gt; <BR>&gt;&nbsp; <BR>&gt; <BR>&gt; I'm looking for pointers and perhaps any online resources that discuss <BR>&gt; using Cairo/Win32GDI/wxWidgets all at once (it doesn't seem to be a <BR>&gt; popular combination, most seem to be using GTK/Cairo). Also, what is the <BR>&gt; most efficient manner for drawing to GDI surfaces? In this case, I'm <BR>&gt; doing a bitblt of a buffer.. But is there a way to draw directly with <BR>&gt; double buffering?<BR>&gt; <BR>&gt;&nbsp; <BR>&gt; <BR><BR>cairo_t* CreateContext(wxDC* dc)<BR>{<BR>#ifdef __WXMSW__<BR>//#if CAIRO_HAS_WIN32_SURFACE<BR>&nbsp; &nbsp; HDC hdc = (HDC)dc-&gt;GetHDC();<BR>&nbsp; &nbsp; cairo_t *cr = cairo_create(cairo_win32_surface_create( hdc ));<BR>&nbsp; &nbsp; return cr;<BR>#endif<BR><BR>#ifdef __WXGTK__<BR>//#ifdef GDK_WINDOWING_X11<BR>&nbsp; &nbsp; GdkDrawable *drawable =
 dc-&gt;m_window;<BR>&nbsp; &nbsp; cairo_t *cr = gdk_cairo_create( drawable ) ;<BR>&nbsp; &nbsp; return cr;<BR>#endif<BR><BR>&nbsp; &nbsp; return NULL;<BR>}<BR><BR><BR>&gt; void MyView::OnDraw(wxDC *dc)<BR>&gt; {<BR><BR>/*******************************************************************<BR><BR>&gt;&nbsp; &nbsp; &nbsp; // wxFrame* m_frame<BR>&gt;&nbsp; &nbsp; &nbsp; HWND hWnd = (HWND)m_frame-&gt;GetHWND();<BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; PAINTSTRUCT ps;<BR>&gt;&nbsp; &nbsp; &nbsp; HDC hDc = BeginPaint(hWnd, &amp;ps);<BR>&gt;&nbsp; &nbsp; &nbsp; RECT rc;<BR>&gt;&nbsp; &nbsp; &nbsp; BOOL succ = GetClientRect(hWnd, &amp;rc);<BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; long width = rc.right - rc.left;<BR>&gt;&nbsp; &nbsp; &nbsp; long height = rc.bottom - rc.top;<BR>&gt;&nbsp; &nbsp; &nbsp; long x = rc.left;<BR>&gt;&nbsp; &nbsp; &nbsp; long y = rc.top;<BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; HDC hBuffer = CreateCompatibleDC(hDc);<BR>&gt;&nbsp; &nbsp; &nbsp;
 HBITMAP hBitmap = CreateCompatibleBitmap(hDc,width,height);<BR>&gt;&nbsp; &nbsp; &nbsp; HGDIOBJ hOldBitmap = SelectObject(hBuffer, hBitmap);<BR>&gt; <BR>&gt;&nbsp; <BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; //cairo<BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; cairo_surface_t* surf = cairo_win32_surface_create(hBuffer);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_t* ctx = cairo_create(surf);<BR><BR>*******************************************************************/<BR><BR>&nbsp;&nbsp;&nbsp; wxCoord x = 0, y = 0;<BR>&nbsp;&nbsp;&nbsp; wxCoord width, height;<BR>&nbsp;&nbsp;&nbsp; dc.GetSize(&amp;width, &amp;height);<BR><BR>&nbsp;&nbsp;&nbsp; cairo_t* ctx = CreateContext(dc);<BR>&nbsp;&nbsp;&nbsp; if (ctx == NULL) return;<BR><BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; cairo_pattern_t *pat;<BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; pat = cairo_pattern_create_linear (0.0, 0.0,&nbsp; 0.0, (double)height);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_pattern_add_color_stop_rgba (pat, 1, 0, 0, 0,
 1);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, 1);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_rectangle (ctx, 0, 0, (double)width, (double)height);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_set_source (ctx, pat);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_fill (ctx);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_pattern_destroy (pat);<BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; pat = cairo_pattern_create_radial (115.2, 102.4, 25.6,<BR>&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 102.4,&nbsp; 102.4, 128.0);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_pattern_add_color_stop_rgba (pat, 0, 1, 1, 1, 1);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_pattern_add_color_stop_rgba (pat, 1, 0, 0, 0, 1);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_set_source (ctx, pat);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_arc (ctx, 128.0, 128.0, 76.8, 0, 2 * M_PI);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_fill (ctx);<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_pattern_destroy (pat);<BR>&gt;
 <BR><BR>/******************************************************************<BR>&gt;&nbsp; &nbsp; &nbsp; cairo_surface_finish(surf);<BR>&gt; <BR>&gt;&nbsp; <BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; BitBlt(hDc, 0, 0, width,&nbsp; height, hBuffer, x, y, SRCCOPY);<BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; SelectObject( hBuffer, hOldBitmap );<BR>&gt;&nbsp; &nbsp; &nbsp; DeleteObject( hBitmap );<BR>&gt;&nbsp; &nbsp; &nbsp; DeleteDC( hBuffer );<BR>&gt; <BR>&gt;&nbsp; &nbsp; &nbsp; EndPaint(hWnd, &amp;ps);&nbsp; &nbsp; &nbsp; <BR>*******************************************************************/<BR>&nbsp;&nbsp;&nbsp; cairo_destroy (ctx);<BR><BR>&gt; }<BR>&gt; <BR>&gt;&nbsp; <BR>&gt; <BR>&gt; Any help is appreciated..!<BR>&gt; <BR>&gt;&nbsp; <BR>&gt; <BR>&gt; Thank you,<BR>&gt; Sean<BR>&gt; <BR>&gt;&nbsp; <BR><BR>--<BR>Regards,<BR>Hakki Dogusan<BR><BR>_______________________________________________<BR>cairo mailing list<BR><A href="mailto:cairo@cairographics.org"
 ymailto="mailto:cairo@cairographics.org">cairo@cairographics.org</A><BR><A href="http://lists.cairographics.org/mailman/listinfo/cairo" target=_blank>http://lists.cairographics.org/mailman/listinfo/cairo</A></DIV><BR></DIV></div></body></html>