Resource mit WinAPI laden
-
Hallo, ich versuche, mit dem Dev C++ eine Resource in einem Programm zu verwenden. Meine newIcon.rc sieht so aus:
code:
newIcon BITMAP newPost.bmp
Wie binde ich das ganze nun in den Code ein? Ich weiss, dass ich FindResource, LoadResource etc. verwenden muss. Aber wie? Ich habe wirklich keine Ahnung von der WinAPI, hoffe aber auch, dass es ohne gehen wird. Ziel ist es, das Icon in die SysTray zu bekommen. Dies soll das mit folgendem Code gelingen:
code:#include <windows.h> . . . NOTIFYICONDATA nidTrayIcon; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HICON hIcon; char szTip[64] = "Tray-Icon Tutorial"; hIcon = LoadIcon(NULL,MAKEINTRESOURCE(IDI_ICON1)); nidTrayIcon.hIcon = ExtractIcon(NULL, "icon1.ico", IDI_ICON1); nidTrayIcon.cbSize = sizeof(nidTrayIcon); nidTrayIcon.hIcon = hProgramIcon; nidTrayIcon.uCallbackMessage = (WM_USER + 1); nidTrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nidTrayIcon.uID = 0x0200; //Exemplarisch strcpy(nidTrayIcon.szTip, szTip); nidTrayIcon.szTip[strlen(szTip)] = '\0'; Shell_NotifyIcon(NIM_ADD, &nidTrayIcon); . . .
Danke für eure Hilfe. Ihr helft bei der Entwicklung unseres Grabbers!
solanum
-
Wenn du ein Tray-Icon willst sollstest du möglichst auch ein Icon und kein Bitmap in den Ressourcen hinterlegen. Die ID gibst du dann bei LoadIcon (wie im Bsp. zu sehen ist) an
-
Hier findest du alles, was du über WinAPI brauchst
http://www.winprog.org/tutorial/
-
Der Beitrag "Tray-Icon erstellen und Kontextmenü anzeigen" aus den FAQ ist vielleicht auch noch ganz interessant
-
Wenn du es dir etwas leichter machen willst, dann nimmst du meine Klasse CTrayIcon, welche du auf meiner Homepage (siehe Signatur) in der WinAPI-Ecke runterladen kannst. Dokumentation ist dabei.
-
Hm, okay, danke erst einmal. Habe im Moment folgenden Code:
#include <windows.h> #include "resource.h" NOTIFYICONDATA nidTrayIcon; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { HICON hMyIcon = LoadIcon(hInstance, "MYICON"); char szTip[64] = "Tray-Icon Tutorial"; //Exemplarisch //HICON hMyIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_NEWICON)); nidTrayIcon.cbSize = sizeof(nidTrayIcon); nidTrayIcon.hIcon = hMyIcon; //Exemplarisch nidTrayIcon.uCallbackMessage = (WM_USER + 1); //Exemplarisch nidTrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; //Exemplarisch nidTrayIcon.uID = 0x0200; //Exemplarisch strcpy(nidTrayIcon.szTip, szTip); nidTrayIcon.szTip[strlen(szTip)] = '\0'; Shell_NotifyIcon(NIM_ADD, &nidTrayIcon); MessageBox(NULL, "Pause", "Note", MB_OK); return 0; }
newicon.rc
#include "resource.h" IDI_NEWICON ICON "newicon.ico"
resource.h
#define IDI_NEWICON 101
Warum wird aber nun mein Icon nicht in der Systray angezeigt?
solanum
-
Da ich nicht editieren kann: Statt
HICON hMyIcon = LoadIcon(hInstance, "MYICON");
habe ich natürlich
HICON hMyIcon = LoadIcon(hInstance, "IDI_NEWICON");
-
Ups, hatte die newicon.rc nicht mitkompiliert
solanum
-
Es muss heißen:
HICON hMyIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_NEWICON));
Und um dir Code zu sparen, solltest du wirklich mal meine Klasse ausprobieren. Aber wenn du keine Lust hast...
[EDIT]
Und: Du musst die Resource.rc zu deinem Programm dazulinken.
[/EDIT][ Dieser Beitrag wurde am 10.04.2003 um 15:13 Uhr von WebFritzi editiert. ]
-
ok
solanum