|
There are lots of code here in CP regarding on this, I've been using for a long time the ControlPos class that it's very easy to use...
Hope this helps...
|
|
|
|
|
when we transfer one polymorphic object from one side of the network to other side of the network computer then we
unmarshal the objects string into it polymorphic object.
then how super class knows that
where and what is its sub class object stored in super class pointer out of many subclass objects?
r00d0034@yahoo.com
|
|
|
|
|
I am working on a program where I keep background textures in a separate DLL (for simple upgrade possibilities).
I use LoadBitmap in the DLL and I export the pointer to the asociated CBitmap to the application.
Everything works fine, except that refresh is quite slow now.
Does anyone know/recognize this behaviour , or did I do something else wrong?
If someone has a clue and solution, please let me know.
Bert....
|
|
|
|
|
Hi,
I created a splitter for SDI with two views and one document, left view just for the snapshot of my main (right) view.
My question is, haw to do my main view (right frame) always active even if I click on the left frame???
Thank you.
|
|
|
|
|
In your left view, override OnActivateView() and call the splitter function SetActivePane(0,1)
|
|
|
|
|
Hey guys
I am using MFC -> File Open dialog box, which works fine.
I have noticed other applications use a different style of dialog box wich has quick buttons on the left that brings the navigation tree in the open dialog box to those locations.
For example in Microsft Word, when you go File -> Open, there are 5 buttons on the left (History, My Documents, Desktop, Favorites, My Network places)
I would also like the same type of "File Open" dialog box. How do I impliment this. I have searched the MSDN documentation and have come up with nothing.
Any help appreciated
George W
Software Developer
www.zsystems.ca
|
|
|
|
|
It's called the "Places" bar, and comes with a new version of commdlg.dll. So instead of using CFileDialog, you'll have to use GetOpenFileName(). If the OPENFILENAME structure uses a hook procedure (or the OFN_ENABLETEMPLATE is set), you will get the old-style dialog; otherwise, you will get the one with the "Places" bar. This explains why MFC apps get the old dialog—because CFileDialog, like all MFC common dialogs, uses a hook procedure. Search MSDN, or the Web, for details.
|
|
|
|
|
Thanks for help
I will look into this.
George W
Software Developer
www.zsystems.ca
|
|
|
|
|
Suppose I have a class with a few member variables, and one of them is a CArray object, e.g.:
CMyClass {
...
private:
int var1, var2, var3;
bool flag1, flag2, flag3;
CArray <int,int&> arSomeArray;
};
If I didn't have that CArray member, I could simply write:
CMyClass a, b;
a = b;
The assignment operator would be simply generated by compiler. But when CArray is there, compiler cannot generate default assigment operator, so I have to add to the class:
CMyClass& operator= (CMyClass& src){
var1 = src.var1;
var2 = src.var2;
var3 = src.var3;
flag1 = src.flag1;
flag2 = src.flag2;
flag3 = src.flag3;
arSomArray.Copy (src.arSomeArray);
return *this;
}
Not only that it is very tedious writing a few dozen of "x = src.x ", it is also prone to bugs. Like later I will add a variable to the class and might forget to add it to the operator= function.
Is there a way to write something like below?
CMyClass& operator= (CMyClass& src){
dear_compiler_do_what_you_can_with_all_the_variables_i_ll_take_care_of_the_rest();
arSomArray.Copy (src.arSomeArray);
return *this;
}
Thanks
|
|
|
|
|
Not using CArray would be a good start MFC's container classes suck. Try using a stl container instead, it might just change your life.
Ryan
|
|
|
|
|
I agree 100%. I've used the MFC containers for years but STL is much more powerful and more portable. I wish I switched a long time ago. Try std::vector
John
|
|
|
|
|
Thanks, but I am not going to rewrite a few hundred of classes, possibly breaking several projects along the way, just for this cause.
Having CArray with all its upsides and downsides is a must.
|
|
|
|
|
I know what you mean. I have a lot of code in several DLLs that sill has MFC containers and in most cases it is better not to rewrite but I wish I would have known stl in the first place. Anything new I will use stl containers instead of MFC.
John
|
|
|
|
|
You could declare all the members you want automatically copied in a structure defined within the class - C++ will then generate an assignment operator for that structure.
e.g.
class Blah
{
private:
struct Hidden
{
int a;
int b;
};
Hidden h;
CArray<int,int> array;
Blah& operator=(const Blah& copy)
{
h = copy.h;
// Copy the array...
}
};
However, as others have pointed out, if you use STL you don't run into these problems.
Dave
http://www.cloudsofheaven.org
|
|
|
|
|
The idea is good, however separating some variables into a structure just for coding convinience would not make sense to someoneelse reading the code.
|
|
|
|
|
|
What about writing a quick subclass of CArray that defines operator= and simply calls CArray::Copy()? That would still be compatible with your other class that just use CArray.
--Dean
|
|
|
|
|
Thank you. This is exactly the answer I was looking for!
I derived a class from CArray and added operator= to it. Now compiler has no trouble generating default assignment. Everything works perfectly!
|
|
|
|
|
There is a problem in your assignment operator. If someone assigns an object to itself your code will fail on dynamic data such as CArray. For example:
CMyClass A;
A=A;
//What happens to arSomArray?
To solve this I create a private destroy() and copy() functions and implement the copy constructor and assignment operator as follows:
PROPERTY::~PROPERTY()
{
destroy();
}
PROPERTY::PROPERTY(PROPERTY & other )
{
copy(other);
}
PROPERTY& PROPERTY::operator =(PROPERTY & other )
{
if ( &other != this ) {
destroy();
copy( other );
}
return *this;
}
copy() does the copy of data from one class to the other similar to what you did in your assignment operator
destroy() deletes any dynamically allocated data.
I have an idea to solve your problem that I will post a little bit later.
John
|
|
|
|
|
Thank you for the reminder. I remember I've read some article on CodeProject about dangers of CArray such assigning to itself or from reference to itself. I will keep this in mind.
As for the answer to my problem, Dean Goodman already answered it.
|
|
|
|
|
I was just writing some code for my idea... Anyways make sure you provide a copy constructor otherwise the complier would provide one and circumvent your code for the following code
CMyClass a;
CMyClass b = a;
This code will not call the = operator. It uses the copy constructor...
John
|
|
|
|
|
I’m using the serialize() function to save and open data and it works fine within the program. But when I try to open “myFile.txt” with Notepad the characters are not recognizable. Does anyone know what is happening? What do I have to do to make the file readable in Notepad? Below is the code I wrote.
Thanks,
Ruben
void CMyDlg::OnButtonSave() <br />
{<br />
CFile myFile("c:\\myfile.txt", CFile::modeCreate | CFile::modeReadWrite);<br />
<br />
CArchive arStore(&myFile, CArchive::store);<br />
<br />
CMyDlg::Serialize(arStore);<br />
<br />
arStore.Close();<br />
}<br />
<br />
void CMyDlg::Serialize(CArchive& ar) <br />
{<br />
CString str;<br />
<br />
if (ar.IsStoring())<br />
{
str.Format("This is a line");<br />
ar << str;<br />
}<br />
else<br />
{
ar >> str;<br />
} <br />
}<br />
<br />
void CMyDlg::OnButtonOpen() <br />
{<br />
CFile myFile("c:\\myfile.txt", CFile::modeReadWrite);<br />
<br />
myFile.SeekToBegin();<br />
CArchive arLoad(&myFile, CArchive::load);<br />
<br />
CMyDlg::Serialize(arLoad);<br />
<br />
arLoad.Close();<br />
}
|
|
|
|
|
Serialize stores the data in a binary format.
John
|
|
|
|
|
So I will have to use fstream in order to be able to see the data externally?
Ruben
|
|
|
|
|
Yep. You're probably better off doing it that way, anyway.
"When a man sits with a pretty girl for an hour, it seems like a minute. But let him sit on a hot stove for a minute and it's longer than any hour. That's relativity." - Albert Einstein
|
|
|
|