–>
When you generate a formview based application or generally when you are using formview derived class, you will find this piece of code.
CTempView::CTempView() : CFormView(CTempView::IDD) { //{{AFX_DATA_INIT(CTempView) //}}AFX_DATA_INIT }
Now depending upon the resolution you want to load the resource i.e. for 1024×768 you want to load CTempView::IDD and for 800×600 you want to load CTempView::IDD1. If you try to write the code for selecting the resource directly in the constructor i.e. something like this
CTempView::CTempView() { /*logic to find the resolution, bResol will be true if it is 1024x768* if(bResol) id = CTempView::IDD; else id = CTempView::IDD1; // Call the formview costructor here. CFormView(id); //{{AFX_DATA_INIT(CTempView) //}}AFX_DATA_INIT } !-- end the block of source code -->
The Compiler will crib and it will not compile.
The solution is to have a global object which gets constructed before the formview and assign a global variable with the appropriate resource id, so that it can be used in the FormView constructor. The code looks something like this.
static int g_ID; static struct _stDummy { _stDummy() { /* logic to find the resolution * int x = GetSystemMetrics(SM_CXSCREEN); if(x == 1024) g_ID = CTempView::IDD; else /* for 800x600 and any other resolution* g_ID = CTempView::IDD1; } }g_Dummy; /* dummy object * IMPLEMENT_DYNCREATE(CTempView, CFormView) CTempView::CTempView() :CFormView(g_ID) { //{{AFX_DATA_INIT(CTempView) //}}AFX_DATA_INIT } !-- end the block of source code -->
Now the g_Dummy object gets constructed first and your logic for selecting the resource id is done here and the id is stored in g_ID which is later being used in the formview constructor. Now the compiler works happily and so does the code.