Using WXR resource files under Windows

Sometimes, .wxr resources can be too large to be included directly in a C++ file. Some compilers have a rather small limit on the size of string that can be handled. As the wxWidgets 1.68 resource sample shows, you can include WXR files in Windows resource (.rc) files, using a TEXT resource, but this doesn't seem to work for all compilers.

Dominic Gallagher recently pointed out that you can use a custom resource name, which works with most compilers. In your .rc file, you could have, for example:

    dialogswxr WXRDATA dialogs.wxr
    menuswxr WXRDATA menus.wxr
    wgthermdwxr WXRDATA wgthermd.wxr
    wgthermmwxr WXRDATA wgthermm.wxr
    cddialogswxr WXRDATA cddialogs.wxr
    cdmenuswxr WXRDATA cdmenus.wxr
    sgwmwxr WXRDATA ..\sgwx\sgwm.wxr
    sgwbwxr WXRDATA ..\sgwx\sgwb.wxr

There is nothing extra one needs to do to have a "user defined" resource - any unexpected resource type string, in this case WXRDATA, is automatically user-defined.

To read in the resources, you need code such as the following:

    static char* resources[] = { "dialogswxr", "menuswxr", "wgthermdwxr",
      "wgthermmwxr", "cddialogswxr", "cdmenuswxr", "sgwmwxr", "sgwbwxr" };

    for (int i = 0; i < 8; i++)
    {
        char *res = wxLoadUserResource(resources[i], "WXRDATA");
        if (!wxResourceParseString(res))
            wxMessageBox("Could not parse resource.");
    }

And that's it!