Loading a FormView based on the Screen Resolution  

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 1024x768 you want to load CTempView::IDD and for 800x600 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. 

Date Posted: December 9, 1998 

Comments:

Please check the comments - J.L. TRYOEN (2000/12/08) 

use a function call in the initializer instead of a global. - Joe Shapiro (1998/12/10) 

Add Comment