|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 14.03.2016, 09:52 Titel: HICON im Program anzeigen |
|
|
Hallo Leute.
Ich verknote mir seit 3 tagen die Finger beim Versuch ein Icon von einem fremden Program zu laden und in meinem Program anzuzeigen.
Also für Titel- und Taskleiste gibt es ja einige Bsp. und auf dem Portal schöne API Tutorials. Dort werden zwar auch Icons im Program angezeigt, allerdings glaub ich über Callbackfunktionen. Das möchte ich nicht unbedingt.
Das hier funktioniert soweit Code: |
#include Once "windows.bi"
#include once "win\shellapi.bi"
#include Once "fbgfx.bi"
Dim As Word nicon = 1
Dim As HINSTANCE hInstance=GetModuleHandle(NULL)
Dim As HICON icon
icon = ExtractAssociatedIcon(hInstance,StrPtr("E:\FreeBasic\Program\fbide.exe"),@nicon)
|
nun habe ich gehofft das ich das irgendwie so laden könnte das ich es mit Put anzeigen kann.
zB:
Code: | Dim As Any Ptr bild = loadImage(hInstance,icon,IMAGE_ICON,NULL,NULL,LR_DEFAULTSIZE) |
funktioniert natürlich nicht
Wie kann ich das bewerkstelligen
EDIT:
habe noch das hier gefunden, zeichnet aber leider nur direkt auf ein Gerät und nicht in ein Fenster
Code: | Dim As HDC hdc1
DrawIconEx( hdc1, 10, 10, icon, 32, 32, 0, NULL, DI_NORMAL ) |
_________________ FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win64 (64bit)
OS: Windows NT 6.2 (build 9200) |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.03.2016, 13:09 Titel: |
|
|
Um aus einem WinAPI-Bild die rohen Pixelwerte auszulesen gibt es mehere Möglichkeiten, z.B. GetDIBits.
Beispiel _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 14.03.2016, 13:48 Titel: |
|
|
Na erstmal vielen Dank Jojo
Das werde ich mir jetzt mal gleich ansehen. Ich bin bis jetzt bis zum folgenden Code gekommen. Dieser schmiert zwar nicht ab bringt aber auch kein Ico zum vorschein
Code: | #include Once "windows.bi"
#include once "win\shellapi.bi"
#include Once "fbgfx.bi"
screenres 300, 300, 32
'' Fenster handle
dim as HWND mHwnd
ScreenControl( FB.GET_WINDOW_HANDLE, cast(integer,mHwnd) )
'' Icon Laden
dim as Word nicon = 1
dim as HINSTANCE hInstance=GetModuleHandle(NULL)
dim as HICON icon = ExtractAssociatedIcon(hInstance,StrPtr("E:\FreeBasic\Program\fbide.exe"),@nicon)
'' BitMap erstellen
dim as HDC mHdc = GetDC(mHwnd)
dim as HDC hdcComp =CreateCompatibleDC(mHdc)
dim as HBITMAP bitmap =CreateCompatibleBitmap(mHdc, 64,64)
dim as PAINTSTRUCT ps
SelectObject(hdcComp, bitmap)
'' Icon in die Bmp zeichnen
DrawIconEx( hdcComp, 10, 10, icon, 32, 32, 0, NULL, DI_NORMAL )
mHdc=BeginPaint(mHwnd,@ps)'Beginn des Zeichenvorgangs
BitBlt(mHdc, 0,0,64,64,hdcComp, 0,0,SRCCOPY)'Fertiges Bild wird auf den Bildschirm gebracht
EndPaint(mHwnd, @ps)'Ende des Zeichenvorgangs
DestroyIcon(icon)
DeleteDC(hdcComp)
DeleteObject(bitmap)
getkey
|
_________________ FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win64 (64bit)
OS: Windows NT 6.2 (build 9200) |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.03.2016, 14:11 Titel: |
|
|
FreeBASIC hat seinen eigenen Backbuffer, da kannst du nicht einfach so mit der WinAPI draufzeichnen. Du wirst mit dem Ansatz allerhöchstens ein flackerndes Icon zustande bekommen (wenn überhaupt), da es gegen die Redraws von FreeBASIC selbst anzukämpfen hat. Deswegen: Pixeldaten des HICONs auslesen und in einen FreeBASIC-Bildpuffer packen. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
braesident
Anmeldungsdatum: 15.04.2008 Beiträge: 189 Wohnort: Berlin
|
Verfasst am: 14.03.2016, 14:44 Titel: |
|
|
Supi also nochmal vielen Dank Jojo, ich hab es hinbekommen.
Falls ich noch irgendwas vergessen habe um Speicher freizugeben, bitte ergänzen. Und sonstige Verbesserungsvorschläge sind natürlich willkommen.
Code: | #include Once "windows.bi"
#include once "win\shellapi.bi"
#include Once "fbgfx.bi"
screenres 300, 300, 32
'' Fenster handle
dim as HWND mHwnd
ScreenControl( FB.GET_WINDOW_HANDLE, cast(integer,mHwnd) )
'' Icon Laden
dim as Word nicon = 1
dim as HINSTANCE hInstance=GetModuleHandle(NULL)
dim as HICON icon = ExtractAssociatedIcon(hInstance,StrPtr("E:\FreeBasic\Program\fbide.exe"),@nicon)
dim as ICONINFO iInfo
GetIconInfo(icon,@iInfo) '' iInfo.xHotSpot = 16 / iInfo.yHotSpot = 16
'' BitMap erstellen
dim as HDC mHdc = GetDC(mHwnd)
dim as HDC hdcComp =CreateCompatibleDC(mHdc)
dim as HBITMAP bitmap =CreateCompatibleBitmap(mHdc, 32,32)
SelectObject(hdcComp, bitmap)
dim as BITMAPINFO bmi
With bmi.bmiHeader
.biSize = SizeOf(BITMAPINFOHEADER)
.biWidth = 32 'breite
.biHeight = -32 '-hoehe (sonst Kopfstand)
.biPlanes = 1
.biCompression = BI_RGB
.biBitCount = 32
End With
'' Icon in die Bmp zeichnen
DrawIconEx( hdcComp, 0, 0, icon, 32, 32, 0, NULL, DI_NORMAL )
'' fbImage erstellen
dim as any Ptr meinIco = imageCreate( 32 , 32 )
GetDIBits(hdcComp, bitmap, 0, 32, meinIco + 32, @bmi, DIB_RGB_COLORS)
screenLock
put(10,10),meinIco,pset
screenUnlock
ImageDestroy(meinIco)
DestroyIcon(icon)
DeleteDC(hdcComp)
DeleteObject(bitmap)
getkey
|
_________________ FBIde: 0.4.6
fbc: FreeBASIC Compiler - Version 1.05.0 (01-31-2016), built for win64 (64bit)
OS: Windows NT 6.2 (build 9200) |
|
Nach oben |
|
|
St_W
Anmeldungsdatum: 22.07.2007 Beiträge: 949 Wohnort: Austria
|
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 14.03.2016, 16:07 Titel: |
|
|
braesident hat Folgendes geschrieben: | Falls ich noch irgendwas vergessen habe um Speicher freizugeben, bitte ergänzen. |
Zu jedem GetDC gehört das passende ReleaseDC. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|