Sendmessage: from one thread to mainthread (CFormView)
Hi,
I`m new to MFC; therefore I want to know if I do the right thing on
the right place :-). My mfc project is a unicode sdi application.
In my cdoc OnNewDocument class I load a xml file including all the
user-specific data. I hope this would be the right place to do that.
All xml nodes are stored in a cstringlist in the cdoc class.
BOOL CMIAppDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// Initialize COM
::CoInitialize(NULL);
//CStringList *m_XmlList; declaration in the cdoc header file
m_XmlList = XmlFile.LoadUserXml();
return TRUE;
}
To get this CStringList for each view - simple call
OnUpdateAllViews().
But which would be a suitable / recommend way to get the CStringList
m_XmlList to a non-mfc class? For example, I`ve installed a webserver
with a class HttpServer, which loads the specific html resource and
adds these information (inlcuded in m_XmlList) to the webpage.
class HttpServer
{
public:
HttpServer(void);
~HttpServer(void);
//and so on
}
BOOL HttpServer::GetFileRequest()
{
CString protoHTML("");
CString userHTML("");
//load html resource
if (GetHTML(id , protoHTML) == true)
{
//get xml file resource from CFormView
CFrameWnd * pFrame = (CFrameWnd *)(AfxGetApp()->m_pMainWnd) ;
CView * pView = pFrame->GetActiveView() ;
CStringList *plist = (CStringList *)pView-
SendMessage(UWM_GET_WEB_XML, 0, 0);
POSITION Position = plist->GetHeadPosition();
userHTML.FormatMessage(protoHTML, plist->GetAt(Position), plist-
GetNext(Position), plist->GetNext(Position));
}
}
In my CFormView I`ve added this small method to get the CStringlist
with the specific xml user data.
LRESULT CMIAppView::OnGetXmlList(WPARAM wParam, LPARAM)
{
TRACE(_T("get-xml-user-data\n"));
return((LRESULT)m_XmlUserList);
}
But is the way I`m trying to send a message to the CFormView class
really a good solution? Moreover the class HttpServer is included in
another thread which is generated if a new socket connection is
established.
I often read in the www that you should only use PostThreadMessage()
and not SendMessage; but in this case I need the information (xml user
data) before executing the next step in the HttpServer-class method.
best regards
Hans