Re: Sendmessage: from one thread to mainthread (CFormView)
El 08/09/2010 15:13, mfc escribi?:
On 5 Sep., 23:09, Joseph M. Newcomer<newco...@flounder.com> wrote:
See below...
On Sun, 5 Sep 2010 11:01:36 -0700 (PDT), mfc<mfcp...@googlemail.com> wrote:
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?
****
Pretty much as you have already done. There's nothing there that is unique to the
CDocument-derived 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)
****
Comparing this to 'true' is both dangerous and unnecessary. Get rid of the == true in the
above line!
****
Could you tell me why this line is dangerous? GetHTML is a function
which loads the html resource to protoHTML. If anything goes wrong
within this function -> FALSE will be returned instead of TRUE.
Hi, I guess Joe will tell you better, but it is:
- Unnecessary, because, if GetHTML already returns a boolean value, you
don't need to compare that boolean value with true or false again.
- Dangerous, because, among other things, there are functions whose
documentation says return TRUE or FALSE, but they don't. They return
FALSE and one or several non-0 values with different meanings.
TRUE is defined as 1, and FALSE as 0 (not to confuse with lowercase true
and false). And anything non-0 behaves like true, but it is not equal to
TRUE, so you could have trouble.
I once did something like:
CPath myPath;
// Get Path here
if (myPath.IsDirectory() == TRUE)
{
// Do stuff
}
And it didn't get into the if block, because IsDirectory returns 16 when
the path is a directory (the docs say it returns TRUE), which evaluates
as non-false, but does not equal TRUE (1).
To avoid that problem, you could do
if(whatever != false)
{
}
but it is still unnecessary and error prone.