Stoppt die Vorratsdatenspeicherung! Jetzt klicken && handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien:
 
Resources
von Plapperkatze am 13.Februar 2006 um 17:48
zurück zur Kategorie "Tutorials"

Ressourcen sind zB Icons, Bitmaps, aber auch Menües und das Design (buttons etc) eures Programms. Man möchte sie evtl in das Executable einbinden, um nicht eine Unzahl Dateien mit ausliefern zu müssen. Wie das geht, zeige ich hier.

Resource-Files haben die Endung .rc und können mit einem Resource-Editor oder einfach als Textdatei erstellt werden. Von Hand ist das sehr mühselig, aber ich werde es hier einmal vormachen. Anschliessend muss die rc Datei kompiliert werden, dafür gibt es einen extra Compiler, brc32, dann muss man die erzeugte .RES Datei und den kompilierten Quelltext zu einer Exe linken.

Renegade kann Resourcefiles kompilieren und linken, wenn mit F12 (Compile->BuildWin) kompiliert wird. Die Ressourcendatei muss dazu resource.rc heissen und im selben Verzeichnis wie der Quelltext des Progs liegen.

Sehen wir uns einmal eine solche .rc Datei an:
#include "resource.h"

// Bitmap
IDB_SPLASH                BITMAP  DISCARDABLE     "splash.bmp"

// Icon
IDI_MYICON                ICON                    "icon.ico"

// Menu
IDR_MYMENU MENU DISCARDABLE
BEGIN
   POPUP "&File"
   BEGIN
       MENUITEM "&New",                       ID_FILE_NEW
       MENUITEM "&Open",                      ID_FILE_OPEN
       MENUITEM "&Save",                      ID_FILE_SAVE
       MENUITEM "Save &As",                   ID_FILE_SAVEAS
       MENUITEM SEPARATOR
       MENUITEM "&Exit",                      ID_FILE_EXIT
   END
   POPUP "&Options"
   BEGIN
       MENUITEM "&Options",                 ID_OPTIONS
   END
   POPUP "&Help"
   BEGIN
       MENUITEM "&About",                   ID_HELP_ABOUT
   END
END

// About Dialog
IDD_ABOUT DIALOG DISCARDABLE  50, 50, 379, 144
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Titelzeile des About Dialogs"
FONT 8, "MS Sans Serif"
BEGIN
   DEFPUSHBUTTON   "OK",IDOK,324,127,50,14
END

Nun muss der Quelltext wiederum eine Möglichkeit bekommen, die eingebundenen Ressourcen zu finden. Das geschieht über eine Headerdatei, hier resource.h genannt, in der die Ressourcen als integers definiert werden. Diese muss in der .rc Datei und im Quellcode includiert sein.
#define IDR_MYMENU                      101
#define ID_FILE_NEW                     401
#define ID_FILE_OPEN                    402
#define ID_FILE_SAVE                    403
#define ID_FILE_SAVEAS                  404
#define ID_FILE_EXIT                    407
#define ID_OPTIONS                      431
#define ID_HELP_ABOUT                   441
#define IDD_ABOUT                       102
#define IDI_MYICON                      103
#define IDB_SPLASH                      104

Nun kann sehr bequem vom Programm aus auf die Ressourcen zugegriffen werden, zB so:
// code aus winmain
wc.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_MYICON)); // dem fenster wird das resource-icon zugeordnet
wc.lpszMenuName=MAKEINTRESOURCE(IDR_MYMENU); // und hier das menue
// fehlt noch das eingebundene bitmap:
splash=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_SPLASH));
if(splash==NULL)MessageBox(NULL,"Could not load resource!","Error",MB_OK|MB_ICONEXCLAMATION);

Ich habe hier ein Beispielprogramm gemacht:
http://katze.dead-men.de/upload/17_resource-tut.rar (308kB, sources & exe)

Das ganze kann man mit bcc32 (ohne renegade) so kompilieren:
bcc32 -c -tWM- -w -w-par -w-inl -W -a1 -Od resource.c
brc32 -X -R resource.rc
ilink32 -aa -c -x -Gn resource.obj c0w32.obj,resource.exe,,[libs],,resource.res

gruesse, die plapperkatz

zurück zur Kategorie "Tutorials"
[0 Kommentare]

Name


Kommentar




Bitte abtippen


 
(C) 2006-20012 Plapperkatze - 215314 Besucher seit dem 23.01.2012 Login