+ return NULL;
+ }
+
+ // if we're already a DIB we can access our data directly, but if not we
+ // need to convert this DDB to a DIB section and use it for raw access and
+ // then convert it back
+ HBITMAP hDIB;
+ if ( !GetBitmapData()->m_isDIB )
+ {
+ wxCHECK_MSG( !GetBitmapData()->m_dib, FALSE,
+ _T("GetRawData() may be called only once") );
+
+ wxDIB *dib = new wxDIB(*this);
+ if ( !dib->IsOk() )
+ {
+ delete dib;
+
+ return NULL;
+ }
+
+ // we'll free it in UngetRawData()
+ GetBitmapData()->m_dib = dib;
+
+ hDIB = dib->GetHandle();
+ }
+ else // we're a DIB
+ {
+ hDIB = GetHbitmap();