Názory ke článku Win32 API - 3. díl - Resource
21. 2. 2006
Skvelej clanek, ale v Borlandovskym C++ mi nejak nejde vytvorit ten resource file....nevite nekdo cim to je....jinak fakt supr clanek, tesim se na dalsi dil, uz aby byl co nejdriv :-)
23. 2. 2006
tak to nevim, respektive sem C++ Builder nezkousel a jak nejde vytvorit? vice upresni
23. 2. 2006
No uz jsem se docetl, ze Builder neumi .rc ale nejaky zkompilovany resource .res je to tady.... http://www.builder.cz/art/cpp/win_api_8.html
No a i podle tohoto clanku mi to neni uplne jasny...
24. 2. 2006
on zam o builderu nic moc nepise, skus si v tom ImageEditoru udelat ten res a nakouknout do helpu. inak jeste muzu skusit na instalovat builder a skusit kdyz ti to nepujde :-)) tak dej vedet :-)
24. 2. 2006
Ahoj, tento serial jsem dlouho hledat a musim rici, ze se mi velice libi... Bylo by mozne nekde stahnout hotove zdrojove kody?
24. 2. 2006
No v napovede tam skoro nic o tom neni a ten image editor jsem nejak vubec nenasel....:-((
25. 2. 2006
ImageEditor by mel byt v menu Start nekde pod bud:C++Bulder,nebo Borland, ale mel by se dat spustit i z prostredi v menu Tools, popr. ho pridej: Add Tools
25. 2. 2006
Ja vim ze jsem asi otravnej ale pres start ani pres tools jsem zadnej image editor nenasel. Akorat nejakej prevadec VC++ kodu na C++ Builder kod a este CodeGuard. Ja uz ale nevim jinak co...asi budu muset prejit na neco jinyho nez Builder a to se mi nechce :-[.
26. 2. 2006
Zdravim. Chci se zeptat autora, jestli by mi nemohl napsat ICQ nebo e-mail. Jde totiz o to, ze ani podle tohoto navodu ani podle toho na builder.cz se mi nedari rozjet ikonu v zahlavi programu a kurzor a pres tyto komentare to asi nepujde vyresit. (myslim tim vlastni obrazky). Ty preddefinovane ve winuser.h mi v pohode jedou. Ikona v seznamu taky jede. Pouzivam Dev-Cpp. Dik.
12. 3. 2006
Co se C++ builderu tyce, tak si generuje ony resource file sam na zaklade pridavanych komponent. Rucne se tam v souboru skoro nic needituje.
mam male zpozdeni za ktere se omlouvam, ale na clanku uz se pracuje.
Parse error hmm presnejc, asi to dela jen tobe, zkousel sem to odsud kopirovat v ruznejch kompilatorech a v poho, co puzivas za prostredi?
16. 3. 2006
Tve clanky o WinAPI jsou velice zajimave, ale mam jeden dotaz: Nevis prosim, kde sezenu nejakou kvalitni dokumentaci WinAPI pro Windows 2000 ? Potreboval bych si v Delphi naimportovat funkce z Windowsackych DLL a jaksi nikde nemuzu najit presnou dokumentaci.
Napriklad:
PlaySoundA (Name : PChar) Handle : LongInt;
nebo neco takoveho bych velmi ocenil, nikde to nemuzu najit, na MSDN cosi je, ale pokud jsem to vyzkousel, dostal jsem exception, snad jedine namatkove zvolene, co mi fungovalo je GetTickCount (funkce vraci LongInt ktery udava pocet sekund od roku xxxx) nebo neco podobneho to dela, uz je to delsi doba, co jsem to zkousel.
Tzn. pokud mas nejaky manual, ktery mi udava ve kterych knihovnach windows jsou jake funkce + udava ktere promenne funkce vyzaduji a vraceji, prosim napis mi to, nevim kde to sehnat, googloval jsem nekolik HODIN a proste nic uzitecneho jsem nenasel.
Asi prvni veci, kterou bys mel udelat, pokud si to jeste neudelal, je stahnout si a nainstalovat nejnovejsi SDK ze stranek Microsoftu, je to SDK pro vsechny platformy Windows(95-2003), krome uzitecnych nastroju a utilitek, se ti nainstaluje kompletni dokumentace-help, je v tom vzdy nasel vse co sem potreboval, viz tato funkce tam je hezky popsana i s moznyma volitelnyma parametrama, jinakk v helpu delphi by taky melo byt vicemene vse. tuto funkci sem tam nasel ve stejnem tvaru, sice ne tak dobre popsanou, ale taky tam je, ale zalezi asi taky jakou verzi Delphi pouzivas, ja koukal do D2005.
Ale v SDK by melo byt vse co potrebujes pro vyvoj, tak to zkus.
18. 3. 2006
V tomto dile mi nejak ne a ne jit zkompilovat program s menu pri kompilaci mi to hodi chybu zdroju a ukaze na radek kde je MENUITEM "&Nový", IDM_NEW
Prosim poradte mi nejlepe na e-mail. A taky bych se chtel zeptat jestli nekde mohu ziskat hotove zdrojaky at se mrknu co mam spatne. Dik
Ja jsem uz nestastny. V Dev-C++ mi to (pri pokusu o ty ikony stale pise C:\Dev-Cpp\Moje\Makefile.win [Build Error] [zdroje_private.res] Error 255
Uz nevim co s tim. Udelal jsem vsechno podle navodu, ikona existuje a stejne furt nic :-(
20. 3. 2006
Posli mi svou e-mail adresu a ja ti poslu projekt + ty zdrojak + zdroj. Posli to na e-mail
/* THIS FILE WILL BE OVERWRITTEN BY DEV-C++ */
/* DO NOT EDIT! */
#include <windows.h> // include for version info constants
#include "projekt1_private.h"
#include "afxres.h"
//**************ZDROJE***********************
101 ICON DISCARDABLE "grafika/ikona.ico"
hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(101));
102 CURSOR DISCARDABLE "grafika/cursor.cur"
wc.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE(102));
//#include "projekt1.rc"
//
// TO CHANGE VERSION INFORMATION, EDIT PROJECT OPTIONS...
//
1 VERSIONINFO
FILEVERSION 0,0,0,0
PRODUCTVERSION 0,0,0,0
FILETYPE VFT_APP
{
BLOCK "StringFileInfo"
{
BLOCK "040504E4"
{
VALUE "CompanyName", ""
VALUE "FileVersion", ""
VALUE "FileDescription", ""
VALUE "InternalName", ""
VALUE "LegalCopyright", ""
VALUE "LegalTrademarks", ""
VALUE "OriginalFilename", ""
VALUE "ProductName", "Battle in Vietnam"
VALUE "ProductVersion", ""
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0405, 1252
}
}
#define IDI_ICON 101
Nazdar. Potreboval bych pomoc s timto kodem. Dev-C++ mi hlasi chybu. Konkretne zde:
101 ICON DISCARDABLE "grafika/ikona.ico"
hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(101)); <----chyba
102 CURSOR DISCARDABLE "grafika/cursor.cur"
wc.hCursor = LoadCursor(hInstance,MAKEINTRESOURCE(102)); <----chyba
vypisuje to chybu v syntaxi
Dá se nějak ikona includovat v dev-c++, když mi nefungojí projekty ???
a kde je teda prosím chyba ??? Protože můj program to píše taky....
moznoze nemas spravne napisany zdroje.h moj vyzera takto, ja som tam hodil len riadky po tej ikone to pred tym tam hidil Dev-C++, inak mal som vsetky chyby co tu pisete ale vsetky som vyriesil a uz to ide, ale napriklad mi nejde MAKEINTRESOURCE(IDI_ICON) a musim tam napisat MAKEINTRESOURCE(101)
/* THIS FILE WILL BE OVERWRITTEN BY DEV-C++ */
/* DO NOT EDIT ! */
#ifndef DEMO_PRIVATE_H
#define DEMO_PRIVATE_H
/* VERSION DEFINITIONS */
#define VER_STRING "0.1.1.1"
#define VER_MAJOR 0
#define VER_MINOR 1
#define VER_RELEASE 1
#define VER_BUILD 1
#define COMPANY_NAME ""
#define FILE_VERSION ""
#define FILE_DESCRIPTION "Developed using the Dev-C++ IDE"
#define INTERNAL_NAME ""
#define LEGAL_COPYRIGHT ""
#define LEGAL_TRADEMARKS ""
#define ORIGINAL_FILENAME ""
#define PRODUCT_NAME ""
#define PRODUCT_VERSION ""
#endif /*DEMO_PRIVATE_H*/
#define IDI_ICON 101
#define IDC_CURSOR 102
#define IDM_NEW 40001
#define IDM_OPEN 40002
#define IDM_SECRET 40003
#define IDM_HELP 40004
#define IDM_CLOSE 40005
#define IDM_ABOUT 40006
Tak nevím. Ať čtu jakkoliv, pořád mi to nejde. Mám projekt okno, kde je soubor main.cpp z minulého dílu. Dám si vytvořit resource, pojmenuju ho okno.rc. Ve složce se vytvoří soubory: můj okno.rc, okno_private.rc a okno_private.h. V okno_private.rc změním include z untitled.rc na okno.rc. Do okno.rc vložím:
<pre>
#include "okno_private.h"
#include "afxres.h"
IDI_ICON ICON DISCARDABLE "grafika/apple.ico"
</pre>
Na konec souboru okno_private.h vložím #define IDI_ICON 101.
Potom do main.cpp hned pod #include <windows.h> vložím #include "okno.rc" a ikonu změním : wc.hIcon = LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON));. Pořád mi to hlásí 5 errorů. Prosím. Kdo vidí chybu?
Případně prosím někoho, kdo používá Dev-C++ a funguje mu ta ikona, aby mi poslal svůj projekt. Už fakt nevím. Děkuju.
Jo. Už jsem to pochopil. Všechno mi funguje. Bylo tam na mě moc těch souborů a nevyznal jsem se v tom. :-)
Potrebujem pomoc vsetko mi ide okrem toho menu stale mi pise chybu ze:
`MAINMENU' undeclared (first use this function)
Prosim pomozte
mám problém se zobrazením menu na formuláři:
wc.lpszMenuName = "IDR_MENU1";
ale když použiju wc.lpszMenuName = "#102"; tak to funguje, nevíte proč to nejede s tím názvem?(nehlásíto žádné chyby a používám VC 6)
Tem co nesla ikona a hlasilo to furt Error 1 a ze neexistuje file "Projekt1_private.h" tak sem to zkusil smazat z toho main.cpp a najednou to zukompilovalo a taikonka tam byla tak mi to pripada ze ten kod tam vlastne ani nema byt coz?
mě se vůbec zdroje_private.h a zdroje_private.rc nevytvoří když přidám do projektu definici zdroju, zkoušel jsem už všechno možné a nic, nevíte někdo co s tím?
13. 12. 2006
Mam presne ten samej problem :-( *_private.* se nevytvori.
Pouzivam Dev C++
14. 12. 2006
Tak tenhle problem uz jsem vyresil :-) V Dev-Cpp musi byt u vlastnosti souboru zdroje.rc zaskrtnuty policko "pouzit pri kompilaci" (Vlastnosti projektu->soubory) pak uz se soubory_private.* vytvori
30. 4. 2007
Pozor v příkladu je chyba: wc.lpszMenuName = “MAINMENU“; jsou tam blbý úvozovky!!!!
ehm, nedelal bych z cecka pascal a misto BEGIN a END v definici menu v *.rc bych psal klasicke ceckovske {} bloky. rekl bych ze nekde budou makra #define BEGIN { a #define END }. je to sice otazka vkusu, ale prece jen se mi moc nelibi dva zpusoby syntaxe takto michat
14. 9. 2007
nemohl byste mi nekdo prosim poslat na mail v zipu fungujici projekt pro dev-c++? nejak mi to vubec nefunguje
7. 11. 2007
zdravim, mam problemy s includovanim menu i ikonky. pouzivam VC++ 5.Ikonu i menu normalne vytvorim, to neni problem. V resource.h se vse nastavi tak jak ma.
problemy nastanou s funkci LoadIcon(), popripade LoadMenu(), nikde jsem nenasel, jake se ji maji dat parametry, zkousel jsem nazev souboru, jejich prirazene ID, cokoliv, vzdycky se dockam pouze chyby
to menu mi hází chybu , *.rc soubor vypadá takto:
#include <windows.h>
MAINMENU MENU DISCARDABLE
BEGIN
POPUP "&Soubor"
BEGIN
MENUITEM "&Nový", IDM_NEW
MENUITEM "&Otevřít", IDM_OPEN
MENUITEM SEPARATOR
POPUP "Ta&jemství"
BEGIN
MENUITEM "&Tajemná truhla", IDM_SECRET
END
END
POPUP "&Ostatní"
BEGIN
MENUITEM "&Nápověda", IDM_HELP
MENUITEM "&Konec", IDM_CLOSE
MENUITEM SEPARATOR
MENUITEM "&O Aplikaci", IDM_ABOUT
END
END
A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "apl.ico"
1 VERSIONINFO
FILEVERSION 0,1,1,1
PRODUCTVERSION 0,1,1,1
FILETYPE VFT_APP
{
BLOCK "StringFileInfo"
{
BLOCK "040504E4"
{
VALUE "CompanyName", ""
VALUE "FileVersion", "1.0"
VALUE "FileDescription", ""
VALUE "InternalName", "aplic"
VALUE "LegalCopyright", "Win32KLPrograms"
VALUE "LegalTrademarks", "Win32KLPrograms"
VALUE "OriginalFilename", "aplic"
VALUE "ProductName", "First project"
VALUE "ProductVersion", "1.0"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0405, 1252
}
}
a hází mi to tuhle chybu:10 C:\Documents and Settings\???\???\C++ výtvory\Win32 API\1\apl_private.rc [Resource error] parse error
nevíte, prosím, co s tím?17. 2. 2008
pls nemohol by si pribalit aj hotove zdrojaky k clanku ?, lebo nejako mi vescina s toho neslo a pisalo chyby.
2. 11. 2008
možná už to není aktuální ale přidávám funkč. zdroj. k tomu ico, delano v devu
:smile2:
http://www.ygan.info/soubory/ico.rar
používám MV c++ 2008 express edition a zastavil jsem se u kroku:
"Otevřeme projekt a klepneme na : Project --> Add to project --> New File --> New. A vložíme novy Resource script a pojmenujeme ho třeba podle názvu projektu. Automaticky se nám vytvoří "Resource.h". Tento název je implicitní a nedoporučuju to měnit."
Když dám Projekt -> Add new item... tak zde mám na výběr jenom toto:
Poradíte mi co s tím ? Jak vytvořit ten resource file ... Děkuji
p.s.: Našel jsem, že když se přepnu do záložky Class View a dám Projekt, tak je vidět Add Resource... , ale je zašedlé.
16. 12. 2008
Mne nefunguje:
wc.lpszMenuName = "MAINMENU";
Takhle to nedělá nic a kdyš to napíšu takhle:
wc.lpszMenuName = “MAINMENU“;
Tak to pise chybu!
Nevite co s tím?
10. 2. 2009
nemohl by tu nekdo pastnout funkcni example ? to jest rc, resource.h a nejaky exe, asi nejsem sam kdo s tim v DEV-CPP bojuje
10. 2. 2009
pridavam funkcni RC, resource.h a upravu v mainu:
resource.rc:
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
#include "afxres.h"
#undef APSTUDIO_READONLY_SYMBOLS
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CSY)
#ifdef _WIN32
LANGUAGE LANG_CZECH, SUBLANG_DEFAULT
#pragma code_page(1250)
#endif
#ifdef APSTUDIO_INVOKED
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif
////////////////////////////////////////////////////////////////////////////////
// NEOMEZENE ODSAMSAD //
////////////////////////////////////////////////////////////////////////////////
APPICON1 ICON DISCARDABLE "res/fire.ico"
APPICON2 ICON DISCARDABLE "res/water.ico"
////////////////////////////////////////////////////////////////////////////////
// NEOMEZENE POSAMSAD //
////////////////////////////////////////////////////////////////////////////////
#endif
#ifndef APSTUDIO_INVOKED
#endif
resource.h:
//{{NO_DEPENDENCIES}}
////////////////////////////////////////////////////////////////////////////////
// NEOMEZENE ODSAMSAD //
////////////////////////////////////////////////////////////////////////////////
#define APPICON1 101
#define APPICON2 102
////////////////////////////////////////////////////////////////////////////////
// NEOMEZENE POSAMSAD //
////////////////////////////////////////////////////////////////////////////////
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 103
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
a ted to nejdulezitejsi v main.c (nebo jak se nazev souboru s vasi aplikaci jmenuje) pridat:
-na zacatek mezi include:
#include "resource.h"
#define _MainClassName TEXT("WinAPIMainClass")
#define _AppName TEXT("nazev aplikace")
-do funkce int WINAPI WinMain (HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument, int nFunsterStil) :
WNDCLASSEX wc;
wincl.hInstance = hThisInstance;
...
...
wincl.hIcon = LoadIcon(hThisInstance, MAKEINTRESOURCE(APPICON1));
wincl.hIconSm = LoadIcon (hThisInstance, MAKEINTRESOURCE(APPICON1));
....
v MAKEINTRESOURCE musi byt jako parametr instance aplikace (hThisInstance), ne NULL !!!
jeste pro fajnsmekry co to pisou v konzoli pridam Makefile (staci make a zkompili se to ...):
# Project: RC demo
# Makefile created by Dev-C++ 4.9.9.2
####
# ODSAMSAD
###
APPLICATION = application
RESOURCE = application
###
# POSAMSAD
###
#aplication.c <-APPLICATION promenna bez pripony souboru
#aplication.rc <-RESOURCE promenna bez pripony souboru
#resources.h
CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
RES = $(RESOURCE).res
PRES = $(RESOURCE)_private.res
OBJ = $(APPLICATION).o $(PRES)
LINKOBJ = $(APPLICATION).o $(PRES)
LIBS = -L"C:/Dev-Cpp/lib" -mwindows
INCS = -I"C:/Dev-Cpp/include"
CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
BIN = $(APPLICATION).exe
CXXFLAGS = $(CXXINCS)
CFLAGS = $(INCS)
RM = rm -f
.PHONY: all all-before all-after clean clean-custom
all: all-before $(APPLICATION).exe all-after
clean: clean-custom
${RM} $(OBJ) $(BIN)
$(BIN): $(OBJ)
$(CC) $(LINKOBJ) -o "$(BIN)" $(LIBS)
$(APPLICATION).o: $(APPLICATION).c
$(CC) -c $(APPLICATION).c -o $(APPLICATION).o $(CFLAGS)
$(PRES): $(RESOURCE)_private.rc $(APPLICATION).rc
$(WINDRES) -i $(RESOURCE)_private.rc --input-format=rc -o $(PRES) -O coff
Reagoval na komentář od uživatele elmen :
Tiez mi to neslo, tak som to menu spravil presne ako s ikonou
a dal som tam
wc.lpszMenuName = MAKEINTRESOURCE(MAINMENU);
a potom to islo :))
16. 8. 2009
Reagoval na komentář od uživatele Wolfe :
Lol... a ja se tady s tim uz dvacet minut trapim :) Tohle pomohlo, diky moc!
8. 5. 2010
Reagoval na komentář od uživatele pilarjakub :
Taktéž jsem čelil tomuto problému u 2008 a 2010 Express edition a zjistil jsem, že obě tyto verze neobsahují resource editor, ten je dostupný pouze v Professional verzi. Je nutné resource soubory vytvořit externě třeba v Dev++ nebo v trial verzi Professional a pak ho použít normálně v Express.
25. 9. 2010
Potřebuji pomoct. Nejde mi vytvořit MAINMENU viz log. Nevíte někdo co s tím?
-------------- Build: Debug in API ---------------
Compiling: main.cpp
C:\Users\Mira\Documents\CODE_BLOCKS\API\main.cpp:44: error: stray '\223' in program
C:\Users\Mira\Documents\CODE_BLOCKS\API\main.cpp:44: error: stray '\223' in program
In file included from C:\Users\Mira\Documents\CODE_BLOCKS\API\main.cpp:22:
C:\Users\Mira\Documents\CODE_BLOCKS\API\zdroje.rc:6: error: 'MAINMENU' does not name a type
C:\Users\Mira\Documents\CODE_BLOCKS\API\main.cpp: In function 'int WinMain(HINSTANCE__*, HINSTANCE__*, CHAR*, int)':
C:\Users\Mira\Documents\CODE_BLOCKS\API\main.cpp:44: error: 'MAINMENU' was not declared in this scope
Process terminated with status 1 (0 minutes, 0 seconds)
4 errors, 0 warnings
2. 4. 2011
Ja mam zas problem ci uz pri definovani menu, dialogov a podobne, ze si musim zapoznamkovat STYLE v .rc, cize napriklad pri definovani hlavneho okna :
ABOUTBOX1 DIALOG DISCARDABLE 32, 32, 182, 106
//STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "OK",IDOK,66,72,50,14
ICON "ABOUT1",IDC_STATIC,7,7,21,20
CTEXT "About1",50,71,12,100,8
CTEXT "Demo program O aplikaci",9,7,40,164,8
CTEXT "(c) Charles Petzold, 1998",10,7,52,164,8
END
Co s tym? Ked odpoznamkujem STYLE, hodi to error