Re: document class
my class CMIAppView : public CFormView is now complete free from every
class - except the document class.
void CMIAppView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
//start http, thread from the document class in the init method
GetDocument()->Init();
//get information from the xml file for the view at
startup
CStringArray *m_XmlUserList = GetDocument()->GetDocData(0);
//update all controls with this Array
//maybe its also a good decision to get the font of
each view also from the document
m_ViewFont = GetDocument()->GetFont();
}
Next function is the OnUpdate() -> to update all view controls as well
as the font - only a small installation.
void CMIAppView::OnUpdate(CView* pSender, LPARAM lHint, CObject*
pHint )
{
if(lHint == 0 && pHint == NULL)
{ /* do nothing */
CFormView::OnUpdate(pSender, lHint, pHint);
return;
} /* do nothing */
switch(lHint)
{
//setfont for this view
case CMIAppDoc::SetFont:
break;
case CMIAppDoc::SetControls:
//pHint will be a CStringList including all
params for all view controls
break;
default:
ASSERT(FALSE);
return;
}
}
now talking about the doc class::
class CMIAppDoc : public CDocument
{
protected:
CMIAppDoc();
DECLARE_DYNCREATE(CMIAppDoc)
public:
typedef enum {
SetFont = 1,
SetControls = 2,
}DocRequests;
protected:
CXmlFile XmlFile;
CNetwork m_network;
CDisplay m_display;
protected:
DECLARE_MESSAGE_MAP()
}
As you can see, I`ve still a member variable of each class (CDisplay,
CNetwork, CXmlFile) in the document class, because I don`t know where
I have to install these members and how do I access their specific
classes... It would be nice if you could show me a small example for
e.g. the CDisplay class.
BOOL CMIAppDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// specify xml file name
CString strFileName (_T("userdata.xml"));
//load xml data from CXmlFile Class
if(XmlFile.LoadUserXml(strFileName))
return FALSE;
//init brightness (stored in the xml file)
POSITION pos = XmlFile.FindIndex(CMIAppDoc::Brightness);
CString bright = XmlFile.GetAt(pos);
m_display.Init(bright);
return TRUE;
}
BOOL CMIAppDoc::Init(void)
{
//start http thread (called from OnInitialUpdate())
m_network.InitThread();
}
The next method will be called if the client user has changed some
settings by the webserver or by the display menue. CStringList slist
includes the new information.
BOOL CMIAppDoc::SetParam(CStringList& slist, UINT nbr)
{
switch(nbr)
{
case SET_NETWORK:
//set new network params
if(!(m_network.SetParam(slist)))
return FALSE; //error during set network params
break;
case SET_DISPLAY:
if(!(m_display.SetParam(slist);))
return FALSE;
break;
default:
ASSERT(false);
return FALSE;
}
}
This function will be called, if the user sends a get message to the
webserver: -> we need the required information which were displayed on
this page from the xml file. For example, the user called the page
where he can change the display settings, the list-Array will include
all these information.
CStringArray* CMIAppDoc::GetArray(UINT nbr)
{
return(XmlFile.GetXmlData(nbr));
}
best regards
Hans