–>
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.