|
Change the style of the window in OnCreate().
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
What function should I call from within OnCreate()? I've found a glossary of window styles, including WS_BORDER, which creates a bordered window, but there is no such style for creating a window without a border. I would have imagined that I'd have to explicitly state I wanted a border in my CFormView derived class, but that is evidently not the case....
Thanks
|
|
|
|
|
I've figured it out:
BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style = WS_THICKFRAME;
return CFormView::PreCreateWindow(cs);
}
Thanks,
Sternocera
|
|
|
|
|
You may want to be careful in the way you do this.
This is the proper place to change window styles before a window is created...
BUT...
You've set a window style (without any other styles like WS_VISIBLE, which is fine if
that's what you want) but then you call the base class PreCreateWindow(), assuming the
base class implementation would keep your style setting.
It's safer to call the base class first to fill in the defaults for the CREATESTRUCT, then
alter the style flags as desired.
Cheers!
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
hello every one..
i want to import my openGL codes in vc++..
help me...
vikram
|
|
|
|
|
Why don't you outsource your development to the U.S.?
Oh yeah, you have to post your question one time.
"Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "...the staggering layers of obscenity in your statement make it a work of art on so many levels." - Jason Jystad, 10/26/2001
|
|
|
|
|
Will you please stop reposting the same question again and again ?
Actually what are you trying to do exactly ? What do you mean exactly by ímport'??
|
|
|
|
|
|
Hi,
CString* strData;
When I am calling "delete [] strData" , I am getting a crash . What are the possible reasons for getting the crashes.
Taruni
|
|
|
|
|
you didn't initialise strdata as new?
CString *strData = new CString();
then use
delete strData;
|
|
|
|
|
I have initialised. I forgot to mention.
Before deleting , I am checking whether strData exists or not as follows.
if(strData)
{
delete [] strData;
}
The if condition is satisfied , but a crash when deleting strData.
Taruni
|
|
|
|
|
check *strData: that a pointer in your code.
Greetings from Germany
|
|
|
|
|
Why you need [] in delete as it is a single pointer variable ?
It is applicable when you are trying to delete an array of pointer.
CString* strData = new CString;<br />
<br />
if(NULL != strData)<br />
{<br />
delete strData;<br />
}
Regards,
Paresh.
|
|
|
|
|
Thank You Paresh.
But I am trying to delete an array of pointers of CString type.
Taruni
|
|
|
|
|
How did you allocate memory to strData pointer ? Please post the code snippet.
Regards,
Paresh.
|
|
|
|
|
CString* strData;
int nCount;
if(nCount > 0)
{
strData = new CString[nCount];
}
.
.
.
delete[] strData;
I have understood the problem , Paresh . The nCount is 0. So never the memory is allocated . But what should be the condition to test whether strData is actually initialised (strData is an array of pointers of CString type) before it is actually deleted.
Taruni
|
|
|
|
|
Taruni wrote: But what should be the condition to test whether strData is actually initialised
There is such a condition only if you're disciplinate programmer:
CString* strData = NULL;
int nCount;
if(nCount > 0)
{
strData = new CString[nCount];
}
...
if (strData)
{
delate [] strData;
strData = NULL;
}
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Taruni wrote: But I am trying to delete an array of pointers of CString type.
So, you did something like this ?
CString pArray = new CString[10];
If yes, then you need to use delete[] instead:
delete[] pArray;
|
|
|
|
|
Thank you Cedric Moonen.
CString* strData;
int nCount;
if(nCount > 0)
{
strData = new CString[nCount];
}
.
.
.
delete[] strData;
I have understood the problem . The nCount is 0. So never the memory is allocated . But what should be the condition to test whether strData is actually initialised (strData is an array of pointers of CString type) before it is actually deleted.
Taruni
|
|
|
|
|
Initialise strData with NULL and check strData against NULL before deleting.
CString* strData = NULL;<br />
int nCount;<br />
if(nCount > 0)<br />
{<br />
strData = new CString[nCount];<br />
}<br />
<br />
.<br />
.<br />
.<br />
if(NULL != strData)<br />
{<br />
delete[] strData;<br />
}
Regards,
Paresh.
|
|
|
|
|
Paresh Chitte wrote: Initialise strData with NULL
Yes.
Paresh Chitte wrote: and check strData against NULL before deleting.
That's not necessary. Deleting NULL is guaranteed to be a no-op.
|
|
|
|
|
Nemanja Trifunovic wrote: That's not necessary. Deleting NULL is guaranteed to be a no-op.
The test maybe useful to mark again with NULL the deleted pointer:
if (strData)
{
delete [] strData;
strData = NULL;
}
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Paresh Chitte wrote: if(NULL != strData)
{
delete[] strData;
}
I suggest to replace the above with:
if(NULL != strData)
{
delete[] strData;
strData = NULL;
}
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
|
|
|
|
|
Initialize your pointer to NULL:
CString* strData = NULL;
You should always always initialize your pointers to NULL.
|
|
|
|
|
Cedric Moonen wrote: You should always always initialize your pointers to NULL.
Unless you initialize them with something else
I.e., this is acceptable:
<br />
CString* strData = new CString[count];<br />
In any case this new/delete construct is overused and leads to code that is not exception-safe and is hard to maintain. Wouldn't it be easier and safer to simply write something like:
<br />
vector<CString> strData;<br />
or even:
<br />
CStringArray strData;<br />
|
|
|
|