<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[MFC &#x2F; ActiveX :Bitmap aus Resourcen als Variant* übergeben]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine ActiveX-Componente entworfen in der dann aus einer Anwendung, welche die ActiveX-Componente eingefügt hat, eine Methode<br />
&quot;GetImage(VARIANT* image)&quot; aufgerufen werden kann.<br />
Wenn Also diese Methode aufgerufen wird, soll eine Bitmap-Resource in ein VARIANT SafeArray gepackt werden und übergeben werden.<br />
Kann mir da jemand weiterhelfen?<br />
Als ertstes müsste mir wahrscheinlich das Bitamap als Byte-Array vorliegen um es dann in ein SafeArray zu packen. Aber daran scheitert es bei schon, obwohl das Bitmap im Speicher als Resource doch eigentlich schon als Byte-Array vorliegt, oder nicht?</p>
<p>Danke im Vorraus! Für jeden Ansatz bin ich dankbar!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/149603/mfc-activex-bitmap-aus-resourcen-als-variant-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 03:40:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149603.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Jun 2006 16:21:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to MFC &#x2F; ActiveX :Bitmap aus Resourcen als Variant* übergeben on Wed, 07 Jun 2006 16:21:35 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe eine ActiveX-Componente entworfen in der dann aus einer Anwendung, welche die ActiveX-Componente eingefügt hat, eine Methode<br />
&quot;GetImage(VARIANT* image)&quot; aufgerufen werden kann.<br />
Wenn Also diese Methode aufgerufen wird, soll eine Bitmap-Resource in ein VARIANT SafeArray gepackt werden und übergeben werden.<br />
Kann mir da jemand weiterhelfen?<br />
Als ertstes müsste mir wahrscheinlich das Bitamap als Byte-Array vorliegen um es dann in ein SafeArray zu packen. Aber daran scheitert es bei schon, obwohl das Bitmap im Speicher als Resource doch eigentlich schon als Byte-Array vorliegt, oder nicht?</p>
<p>Danke im Vorraus! Für jeden Ansatz bin ich dankbar!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1073290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1073290</guid><dc:creator><![CDATA[masanne]]></dc:creator><pubDate>Wed, 07 Jun 2006 16:21:35 GMT</pubDate></item><item><title><![CDATA[Reply to MFC &#x2F; ActiveX :Bitmap aus Resourcen als Variant* übergeben on Thu, 08 Jun 2006 06:32:11 GMT]]></title><description><![CDATA[<p>Muss es direkt binär sein.<br />
Andere Methode:<br />
Erzeuge ein IPicture Objekt. Packe den IUnknown Zeiger in den Variant und gut ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1073573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1073573</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 08 Jun 2006 06:32:11 GMT</pubDate></item><item><title><![CDATA[Reply to MFC &#x2F; ActiveX :Bitmap aus Resourcen als Variant* übergeben on Thu, 08 Jun 2006 08:18:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">BOOL CGetImageCtrl::getImage(VARIANT* image)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());
	CBitmap bmp ;
	bmp.LoadBitmap(IDB_BITMAP1);

	PICTDESC desc;
	HRESULT hres;

	// how make a picture object
	// setup pictdesc structure
	desc.cbSizeofstruct = sizeof(PICTDESC) ;
	desc.picType = PICTYPE_BITMAP;
	desc.bmp.hbitmap = (HBITMAP)bmp.GetSafeHandle();
	LPPICTURE pPicture = 0;

	// create the StdPicture object
	hres = ::OleCreatePictureIndirect(&amp;desc, IID_IPicture, FALSE, /*don't destroy it*/ (LPVOID*)&amp;pPicture);

	return TRUE;
}
</code></pre>
<p>Also dies habe ich gefunden. Ich habe doch nun ein Picture Object oder? Welchen Zeiger kann ich jetzt in meinen Variant packen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1073642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1073642</guid><dc:creator><![CDATA[masanne]]></dc:creator><pubDate>Thu, 08 Jun 2006 08:18:51 GMT</pubDate></item><item><title><![CDATA[Reply to MFC &#x2F; ActiveX :Bitmap aus Resourcen als Variant* übergeben on Fri, 09 Jun 2006 06:00:29 GMT]]></title><description><![CDATA[<p>Auf pPicture kannst Du nun ein QueryInterface für IUnknown durchführen. Den IUnkown Zeiger speicherst Du dann im Variant. NIcht vergessen den IPicture Zeiger wieder freizugeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074287</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 09 Jun 2006 06:00:29 GMT</pubDate></item><item><title><![CDATA[Reply to MFC &#x2F; ActiveX :Bitmap aus Resourcen als Variant* übergeben on Fri, 09 Jun 2006 07:42:16 GMT]]></title><description><![CDATA[<p>Hier nun meine getImage (VARIANT *image) Methode:</p>
<pre><code class="language-cpp">VARIANT_BOOL CGetImageCtrl::getImage(VARIANT* image)
{
	AFX_MANAGE_STATE(AfxGetStaticModuleState());

	// TODO: Fügen Sie hier Ihren Dispatchhandlercode ein.

	CBitmap bmp ;
	VARIANT p1;
	PICTDESC desc;
	HRESULT hres;

	bmp.LoadBitmap(IDB_BITMAP1);
	VariantInit(&amp;p1);

	// setup pictdesc structure
	desc.cbSizeofstruct = sizeof(PICTDESC) ;
	desc.picType = PICTYPE_BITMAP;
	desc.bmp.hbitmap = (HBITMAP)bmp.GetSafeHandle();
	IPicture *pd;

	// create the StdPicture object
	hres = ::OleCreatePictureIndirect(&amp;desc, IID_IPicture, FALSE,(LPVOID*)&amp;pd);

	if(SUCCEEDED(hres))
    {
		p1.vt = VT_UNKNOWN;
		p1.punkVal = pd;

		*image = p1;
    }

	return VARIANT_TRUE;
}
</code></pre>
<p>Dies ist der Teil aus meiner Anwendung, wo ich die Methode aufrufe und das Bitmap anzeigen lassen möchte:</p>
<pre><code class="language-cpp">void CGetImageTestDlg::OnBnClickedButton1()
{
	// TODO: Fügen Sie hier Ihren Kontrollbehandlungscode für die Benachrichtigung ein.

	VARIANT image;
	IUnknown* pUnk;
	IPicture *pPicture= 0;
	long lWidth, lHeight;
	int iWidth, iHeight;

	CClientDC pDC(this);

	CDC memdc;
	memdc.CreateCompatibleDC(&amp;pDC);

	VariantInit(&amp;image);
      // Aufruf der Methode:
	m_myGetImage.getImage(&amp;image);

	pUnk = image.punkVal;
	HRESULT hr = pUnk-&gt;QueryInterface(&amp;pPicture);

	if(SUCCEEDED(hr))
	{		
		//breite u. höhe vom bild holen
		pPicture-&gt;get_Width(&amp;lWidth);
		pPicture-&gt;get_Height(&amp;lHeight);

		//in Pixel konvertieren
		iWidth = (lWidth  * GetDeviceCaps(pDC, LOGPIXELSX)) / 2540;
		iHeight = (lHeight * GetDeviceCaps(pDC, LOGPIXELSY)) / 2540;

		RECT rc;
		GetClientRect( &amp;rc);

		//Bild anzeigen mittels Render
		pPicture-&gt;Render(pDC, 0, 0, iWidth, iHeight, 0, lHeight, lWidth, -lHeight, 0);

		////// VERSUCH DER Ausgabe über die CBitmap Klasse//////////////////////////
		//HBITMAP hBmp ;
		//pPicture-&gt;get_Handle((OLE_HANDLE FAR *) &amp;hBmp);

		//// create a temporary bitmap
		//CBitmap * TempBmp = CBitmap::FromHandle(hBmp);

		//memdc.SelectObject(TempBmp);//select original bitmap

		//pDC.BitBlt(200, 300, iWidth, iHeight, &amp;memdc, 0, 0, SRCCOPY);
		/////////////////////////////////////////////////////////////////////////////////
	}

}
</code></pre>
<p>In den Integer-Werten &quot;iWidth, iHeight&quot; stehen schon die richtige Höhe bzw. Breite des BMP, aber angezeigt bekomm ich nichts.<br />
Hast Du vielleicht noch ne Idee, oder siehst du wo der Fehler liegt.<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1074333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1074333</guid><dc:creator><![CDATA[masanne]]></dc:creator><pubDate>Fri, 09 Jun 2006 07:42:16 GMT</pubDate></item></channel></rss>