Well, the first place I tried to do this was in
BOOL CMainFrame:

reCreateWindow(CREATESTRUCT& cs)
I simply got the WNDCLASS structure from the application, tried to alter it, then attempted to reregister the class using the AfxRegisterClass functions. This I believe simply gave me an assertion.
Then I decided to try to put it in
BOOL cMyApp::InitInstance()
In this case, I created a WNDCLASS variable, and set all the members as you would in a straight non MFC application. Then continued on to register the class with the AfxRegisterClass( &wndclass ) function. This didn't give me any problems, as well as it didn't do anything either.
I would assume altering the class hbrBackground property would be the better way to change the background color. And in a tutorial on MFC that I followed, it showed creating a WNDCLASS and using it in CMainFrame::CMainFrame constructor. And this works perfectly, but the application MFC code was handwritting, not generated by the compiler.
But I think I tried to create this code in MFC generated files, and I get an assertion. Very confusing. The code used is fairly straitforward as follows:
CMainFrame::CMainFrame()
{
// Declare a window class variable
WNDCLASS WndCls;
const char *StrWndName = "MFC Learning Experience";
InitCommonControls();
CoInitialize(NULL);
WndCls.style = CS_VREDRAW | CS_HREDRAW;
WndCls.lpfnWndProc = AfxWndProc;
WndCls.cbClsExtra = 0;
WndCls.cbWndExtra = 0;
WndCls.hInstance = AfxGetInstanceHandle();
WndCls.hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));
WndCls.hCursor = AfxGetApp()->LoadStandardCursor(IDC_ARROW);
WndCls.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);
WndCls.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
const char *StrClass = AfxRegisterWndClass(WndCls.style, WndCls.hCursor,
WndCls.hbrBackground, WndCls.hIcon);
if (!Create(StrClass, StrWndName, WS_OVERLAPPEDWINDOW | WS_SYSMENU | WS_THICKFRAME, rectDefault, NULL, WndCls.lpszMenuName))
return;
ShowWindow(1);
}