From: David <db...@du...> - 2004-08-09 03:26:29
|
I'm trying to become familiar with programming with the w32 framework. One of the references I'm using is the package found at http://winprog.org/tutorial/files/forgers-win32-tutorial.zip I have mingw/msys and the current stable mingw release of gcc (3.2-something, I think). I'm not in Windows ATM to check for exact details. There are several example programs, one - menu_one - uses a resources file to define the menu (they do the same thing without resources in another identical window, also). Here are some things in the file that got my attention: ------- cut ---------- #ifndef __BORLANDC__ #include "winres.h" #endif <snip> #ifdef _WIN32 LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN #pragma code_page(1252) #endif //_WIN32 ------- cut ---------- With my particular install, I don't have winres.h If I comment out that particular include, "windres" errors on the line that begins with "LANGUAGE...". I can comment out that line and the program compiles apparently OK. For exactness, I located a copy of winres.h, and uncommented both the "offending" lines in the .rc file and it also compiled, but gave some warnings about some elements being redfined: In file included from menu_one.rc:11: winres.h:31:1: warning: "LB_ADDSTRING" redefined In file included from C:/MINGW/include/winresrc.h:8, from winres.h:28, from menu_one.rc:11: C:/MINGW/include/winuser.h:1512:1: warning: this is the location of the previous definition In file included from menu_one.rc:11: winres.h:32:1: warning: "CB_ADDSTRING" redefined In file included from C:/MINGW/include/winresrc.h:8, from winres.h:28, from menu_one.rc:11: C:/MINGW/include/winuser.h:1421:1: warning: this is the location of the previous definition Seems line the winres.h I downloaded has this define: #define LB_ADDSTRING (WM_USER+1) #define CB_ADDSTRING (WM_USER+3) and /MinGW/include/winuser.h has this: #define CB_ADDSTRING 323 #define LB_ADDSTRING 384 Now, as can be seen above, "winres.h" #includes <winresrc.h> which #includes <winuser.h>. Now, finally, the question. When writing new code, is it better to use resource files or rely upon the API? In addition, can the API provide everything that resources provide? The example showed that menus can be created either way, but I wonder about other things? Secondly, if using a resource file, what would be the best way to do the above, just call <winresrc.h> directly, or is a "winres.h" file necessary for some reason. |
From: Greg C. <chi...@mi...> - 2004-08-09 14:37:59
|
David wrote: > > http://winprog.org/tutorial/files/forgers-win32-tutorial.zip [...] > Seems line the winres.h I downloaded has this define: > #define LB_ADDSTRING (WM_USER+1) > #define CB_ADDSTRING (WM_USER+3) > > and /MinGW/include/winuser.h has this: > #define CB_ADDSTRING 323 > #define LB_ADDSTRING 384 Interesting. The borland compilers I have here seem to agree with the former definitions. > Now, as can be seen above, "winres.h" #includes <winresrc.h> which > #includes <winuser.h>. > > Now, finally, the question. When writing new code, is it better to use > resource files or rely upon the API? In addition, can the API provide > everything that resources provide? The example showed that menus can be > created either way, but I wonder about other things? It depends on what you're doing. All new GUI code I write uses wxWidgets, a cross-platform library that provides its own xml-based resource system. '.rc' resource files are windows specific, so they don't have a major place in this paradigm. But a minimal resource file is still required for msw, for instance because that seems to be the only way for an application's icon to be shown in msw 'explorer'. Other toolkits may be based on '.rc' files. Choose your toolkit carefully, then hesitate to resist the way it wants you to work. You can create menus or even dialogs in code. That's generally harder than using resources of some kind, but it gives you greater runtime flexibility. Resources are static, but with code, you can change menus or whatever dynamically at run time. Sometimes it makes sense to mix both methods. > Secondly, if using a resource file, what would be the best way to do the > above, just call <winresrc.h> directly, or is a "winres.h" file > necessary for some reason. Since the code example does this: > #ifndef __BORLANDC__ > #include "winres.h" > #endif it looks like the author is using "winres.h" to allow for some borland difference, and that may be a good thing. OTOH, it's probably a bad idea to define windows macros in that file: that's the system headers' job. If the author didn't document why it was done this way, then it's hard to guess. |