Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are the macros in resource.h used for?

When a resource file is created in visual studio, the IDE automatically generates a header file called resource.h with this text:

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by BackupRestore.rc

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        101
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1001
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

As you can see it comments and says that they are "default values for new objects". What exactly does this mean? Are they referenced anywhere else by default and if not where would they be used? I am trying to create a project with the minimum amount of code and files and have tested removing the resource.h file and the solution seems to build fine without it so I am wondering whether or not it is essential or if removing it will cause future issues.

In summary: What is the resource.h file and its contents used for? Are the defined macros used elsewhere by default? When might a programmer reference them/use them in code, if at all? Are they essential and will removing them create future issues?

Thanks in advance- please be aware I am very novice in C++ and macros.

like image 826
Matt Avatar asked Jul 24 '17 15:07

Matt


People also ask

What is resource h?

The application resource file that you edit using Visual C++. RESOURCE.H is the application-specific header file. It's always named RESOURCE.H by AppWizard, consistent with Visual C++'s default naming of the header file. The #include for this header file is the first statement in the resource file ( MYAPP.RC ): rc Copy.

What are the resource files Why are they used?

Resource files are ASCII files containing lines of data in which values are assigned to resources. A PyNGL resource file allows you to set PyNGL resources in a manner similar to X11 resources that you set in . Xdefaults or . Xresources files.

What is SYS resource h in C?

h. The sys/resource. h header file contains definitions for XSI resource operations, including declarations, constants, and structures used by the following functions: getpriority()

What is .RC file in Visual Studio?

The Visual Studio resource editors do not support editing embedded resources. The term resource file can refer to any of several file types, such as: The resource script ( . rc ) file of a program.


1 Answers

From the documentation

_APS_NEXT_RESOURCE_VALUE is the next symbol value that will be used for a dialog resource, menu resource, and so on. The valid range for resource symbol values is 1 to 0x6FFF.

_APS_NEXT_COMMAND_VALUE is the next symbol value that will be used for a command identification. The valid range for command symbol values is 0x8000 to 0xDFFF.

_APS_NEXT_CONTROL_VALUE is the next symbol value that will be used for a dialog control. The valid range for dialog control symbol values is 8 to 0xDFFF.

_APS_NEXT_SYMED_VALUE is the next symbol value that will be issued when you manually assign a symbol value using the New command in the Symbol Browser.

So essentially if you are in the actual dialog editor, when you click a new button down (for example) that's how it keeps track of the next available resource ID. The resource IDs in general are to keep track of things like static text (e.g. for field labels), bindings, etc.

If you had defined a resource ID it would have to be a smaller value the _APS_NEXT whatever. For example in your resource.h you may have

#define IDC_SOME_RADIO_BUTTON    1056

Then later you'd have to update

#define _APS_NEXT_CONTROL_VALUE       1057

Again this is so the next time you click down a button it gets a unique ID. They must be unique because they are just pre-processor macros that will be substituted when you try to use that resource ID for something. For example

void HandleRadioButtion()
{
    // do something important
}

Then you can use your resource ID to bind it to a function

BEGIN_MESSAGE_MAP(SomeDlg, CDialog)
    ON_BN_CLICKED(IDC_SOME_RADIO_BUTTON, HandleRadioButton)
END_MESSAGE_MAP()
like image 108
Cory Kramer Avatar answered Sep 19 '22 04:09

Cory Kramer