Formaty plików zasobów
W tej sekcji opisano format pliku zasobów binarnych tworzony przez kompilator zasobów na podstawie zawartości pliku definicji zasobów. Ten plik ma zwykle rozszerzenie res. Konsolidator ponownie formatuje plik res do pliku obiektu zasobu, a następnie łączy go z plikiem wykonywalnym aplikacji.
Plik zasobu binarnego składa się z wielu połączonych wpisów zasobów. Każdy wpis składa się z nagłówka zasobu i danych dla tego zasobu. Nagłówek zasobu jest DWORD-wyrównany do pliku i składa się z następujących elementów:
- DWORD zawierający rozmiar nagłówka zasobu
- DWORD zawierający rozmiar danych zasobów
- Typ zasobu
- Nazwa zasobu
- Dodatkowe informacje o zasobach
Struktura RESOURCEHEADER opisuje format tego nagłówka. Dane zasobu są zgodne z nagłówka zasobu i są specyficzne dla każdego typu zasobu. Niektóre zasoby wykorzystują również strukturę nagłówka grupy specyficznej dla zasobów, aby udostępnić informacje o grupie zasobów.
Zasoby tabeli akceleratora
Tabela akceleratora to jeden wpis zasobu w pliku zasobu. Nie ma nagłówka grupy. Struktura ACCELTABLEENTRY opisuje każdy wpis w tabeli akceleratora. Dozwolone są wiele tabel akceleratorów.
Zasoby kursora i ikony
System obsługuje każdą ikonę i kursor jako pojedynczy plik. Są one jednak przechowywane w plikach res i w plikach wykonywalnych jako grupa zasobów ikon RT_GROUP_ICON lub RT_GROUP_CURSOR grupy zasobów kursora. Formaty plików ikon i zasobów kursora są podobne. W pliku res nagłówek grupy zasobów jest zgodny ze wszystkimi składnikami poszczególnych ikon lub grup kursorów.
Nagłówek grupy dla zasobów ikony i kursora składa się z struktury NEWHEADER oraz co najmniej jednej struktury RESDIR. Istnieje jedna struktura RESDIR dla każdej ikony lub kursora. Nagłówek grupy zawiera informacje, które aplikacja musi wybrać poprawną ikonę lub kursor do wyświetlenia. Zarówno nagłówek grupy, jak i dane powtarzane dla każdej ikony lub kursora w grupie mają stałą długość. Dzięki temu aplikacja może losowo uzyskiwać dostęp do informacji.
Format każdej ikony RT_ICON lub składnika zasobu kursora RT_CURSOR jest bardzo podobny do formatu pliku .ico/.cur. Każdy obraz jest przechowywany w strukturze BITMAPINFO, a po nim bity mapy bitowej niezależnej od urządzenia (DIB) ikony XOR maski. Monochromatyczne bity DIB AND maski są zgodne z kolorami bitów DIB. Znaczącą różnicą między kursorami a ikonami jest to, że kursory mają LOCALHEADER strukturę z hotspotem wstawionym przed danymi mapy bitowej, podczas gdy ikony nie.
Ponieważ ikona RT_ICON systemu Windows Vista lub zasób kursora RT_CURSOR może zawierać dane obrazów skompresowanych w formacie PNG.
Zasoby okna dialogowego
Okno dialogowe jest również jednym wpisem zasobu w pliku zasobu. Składa się z jednej DLGTEMPLATE struktury nagłówka okna dialogowego oraz jednej DLGITEMTEMPLATE struktury dla każdej kontrolki w oknie dialogowym. DLGTEMPLATEEX i DLGITEMTEMPLATEEX struktury opisują format rozszerzonych zasobów okna dialogowego.
Zasoby czcionek
Czcionki są przechowywane w pliku zasobów jako grupa zasobów. Poszczególne czcionki tworzą grupę czcionek. Instrukcja FONT instrukcji definicji zasobu w pliku . Plik RC definiuje każdą czcionkę. Każda czcionka w zasobie składa się z pełnej zawartości powiązanego pliku .fnt. Struktura FONTGROUPHDR jest zgodna ze wszystkimi poszczególnymi składnikami czcionek w pliku res.
Zasoby czcionek nie są dodawane do zasobów określonej aplikacji. Zamiast tego są one zwykle dodawane do plików wykonywalnych, które mają rozszerzenie fon. Te pliki są zwykle bibliotekami DLL tylko dla zasobów, a nie aplikacjami.
Zasoby menu
Zasób menu składa się z MENUHEADER struktury, po której następuje co najmniej jeden NORMALMENUITEM lub struktury POPUPMENUITEM, jeden dla każdego elementu menu w szablonie menu. Struktury MENUEX_TEMPLATE_HEADER i MENUEX_TEMPLATE_ITEM opisują format rozszerzonych zasobów menu.
Zasoby tabeli komunikatów
Tabela komunikatów to zasób zawierający sformatowany tekst wyświetlany jako komunikat o błędzie lub w polu komunikatu. Główną strukturą zasobu tabeli komunikatów jest struktura MESSAGE_RESOURCE_DATA.
Zasoby wersji
Główną strukturą zasobu wersji jest struktura VS_FIXEDFILEINFO. Dodatkowe struktury obejmująstrukturyVarFileInfo do przechowywania danych informacji o języku oraz StringFileInfo na potrzeby informacji o ciągu zdefiniowanym przez użytkownika. Wszystkie ciągi w zasobie wersji mają format Unicode. Każdy blok informacji jest wyrównany do granicy DWORD.