|
I have a little desktop utility running and developed by me in my system. A few of the context menus sometimes randomly show up child menus (unrelated to this application).
For example, if one context menu of my utility is
Launch IE
RSS Viewer
Save As XML
intermittently I get a child menu for Launch IE (the first menu item). Mostly the child item reads
Cut
Copy
Paste
I do have a few other my own MFC based utilities. I have tried to debug my applications using all other tools under the sun. But I am not sure from where on earth, the context menu is suffering this anomaly.
Any clues?
|
|
|
|
|
Sorry for my poor English.
Are you develop in multiple documents ? The menu will change according to the different view in multiple documents .
|
|
|
|
|
How can i use a non static member function as WindowProc ?
thanks
|
|
|
|
|
See the answers to this[^] discussion.
|
|
|
|
|
Basically, you can't.
The prototype for the window procedure is:
LRESULT CALLBACK WndProc( HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
There's no way you can make a non-static member function with the same prototype because non-
static member functions require an object of the class' type to call them. This object is
passed implicitly as the "this pointer" to all non-static methods. The Windows APIs
know nothing about our C++ objects so there's no way the system could properly call our
class methods.
In addition to Cedric's link, take a look at the MFC source code and see how MFC handles it.
Mark
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
There are several ways to access files when coding in visual C. We could use CFile, or FILE* or fstream. Which one is the best in term of performance and stability ?
What's your opinion ?
I used to think that CFile would be the best choice when we work with Windows (because it was written by Microsoft anyway).
But actually it's not. I have an application that do intensive disk read/write (it reads files from hard disk about 20 times per seconds) and I have checked it thoroughly to make sure there is no read/write conflict. If I use CFile, there is chance of about 5% it returns an error that it can't open file (mode: binary read) while the file is obviously available. If I replace that part with FILE* pointer (i.e. use fopen & fread) then It runs perfectly all the time.
|
|
|
|
|
FILE* and fstream are good for cross platform stuff. FILE* is at a lower level than fstream and doesnt include the formatting and type conversion functionality.
CFile is just a wrapper around the win32 native file io methods (CreateFile() etc) which is based on HANDLE's
You have the soure code for the CFile class so you could debug it and find out why its failing
|
|
|
|
|
Ultimately they are all wrappers around the same IO code. CFile is an MFC wrapper over the File APIs which are implemented using the internal copy of the C Library's FILE based system. 'fstream' is from the Standard Library implementation which is integrated with the User Mode C Library e.g. MSVCRT.dll so it ultimately uses FILE io blocks and the same low level code.
With every layer of wrapping you get more convenience features and potentially more bugs. So you pays your money, in terms of ease of use, and you takes your choice.
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
thanks,
anyway, it's also a common sense to assume that things that were written earlier are buggy and later people not only improve functionality but also fix bugs to make them better
|
|
|
|
|
Hmm, with CRT code I think its almost the other way around. It's so old and has been hammered by so many millions of users and developers that its been refined by attrition to the point where it is both borderline unreadable gibberish and almost bulletproof as well.
It's a kind of software aging where it has got both tougher and crustier with each round of modifications. MFC on the other hand has taken the work arounds approach where some of it has been broken for a decade, e.g. CSocket, with no proper fixes available because it's assumed everyone will use the documented work arounds or alternatives. Newer code isn't always better and wrappers don't always add reliability but we can hope
Nothing is exactly what it seems but everything with seems can be unpicked.
|
|
|
|
|
Hi, I have the following situation :
class CBase
{
public:
virtual void function1(...);
}
class CMyClass : public CBase
{
public:
virtual void function1(...);
}
I create an object on the heap :
CMyClass *pMyClass = new cMyClass;
When I call :
pMyClass->function1(...); // CMyClass::function1(...) gets called.
but is it possible to call CBase::function1(...) using the pMyClass pointer ?
Could this be done with a cast ?
Thx.
|
|
|
|
|
paper67 wrote: CMyClass *pMyClass = new cMyClass;
When I call :
pMyClass->function1(...); // CMyClass::function1(...) gets called.
but is it possible to call CBase::function1(...) using the pMyClass pointer ?
Could this be done with a cast ?
Here is an example...
struct v1
{
virtual void Call()
{
cout << "v1 call" << endl;
}
};
struct v2 : public v1
{
virtual void Call()
{
<code>v1::Call();</code>
cout << "v2 call" << endl;
}
};
void main()
{
v2 v2obj;
<code>v2obj.v1::Call();</code>
}
|
|
|
|
|
Nibu babu thomas wrote: v2obj.v1::Call();
I've never thought about needing to do that, but that is UGLY
"Posting a VB.NET question in the C++ forum will end in tears." Chris Maunder
|
|
|
|
|
Hi all,
I am pretty new to MFC. I found this very helpful class
that would help me out alot in my current project, but I
have no idea how to implement it. If anyone could take a
look at it and point me in the right direction it would
be very much appreciated.
Here is the link to what I am talking about:
http://www.codeproject.com/buttonctrl/CBrowseCtrl.asp?df=100&forumid=31155[^]
|
|
|
|
|
What do you need excatly?
|
|
|
|
|
I need to know how to put the CBrowseCtrl in my application.
I know how it works, but I have no idea how to put it in the
dialog.
|
|
|
|
|
Kryptech wrote: but I
have no idea how to implement it.
Did you follow the "How to Use" steps in the article? That's as simple as it gets.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Yeah, Okay thanx for not answering and attempting to make me feel like an idiot.
Great Job, 'cept I feel like I'm not the idiot.
The how to use seems very vague to me since I havent used MFC very much, and can't find
any info on what it is talking about. All the info I find on MFC is either very advanced or very simple.
It says:
How to Use
You need to add source files BrowseCtrl.h and BrowseCtrl.cpp to your workspace first, and include BrowseCtrl.h wherever needed. To create the control, you can either use CBrowseCtrl::Create to create one at runtime, or draw a CButton on the dialog template and bind it with a CBrowseCtrl variable.
I don't know how to bind a button with a CBrowseCtrl Variable.
I can not figure out how to use the CBrowseCtrl::Create either.
|
|
|
|
|
Kryptech wrote: thanx for not answering...
I did answer you, very succinctly in fact.
Kryptech wrote: ...and attempting to make me feel like an idiot.
I would never do this. It's just not my style.
Kryptech wrote: Great Job, 'cept I feel like I'm not the idiot.
Why the sudden fascination with idiots?
Kryptech wrote: I don't know how to bind a button with a CBrowseCtrl Variable.
Use ClassWizard (Ctrl+W).
Kryptech wrote: I can not figure out how to use the CBrowseCtrl::Create either.
Do you really want to create the control at runtime? The answer to this is *usually* no.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Well the class wizard is one thing I can't seem to get the hang of.
I have tried a few different things, but nothing seems to work.
Like I said, I am not normally an MFC coder. I just started using it
for this project. Gonna go try some more tho.
|
|
|
|
|
Kryptech wrote: Well the class wizard is one thing I can't seem to get the hang of.
Are you using VS6?
Kryptech wrote: I have tried a few different things...
Such as?
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Yeah, I am using VS6.
Basicly, I make a button and open class wizard, but I don't really know
where to go from there. I have no idea how to go about linking it to something else.
I can add a variable, but what do I do from there? I can add a class, but that don't seem
to do anything either.
If you could just show me how to do it it would be great.
|
|
|
|
|
It sounds as though all of your questions can be answered in this two-part series.
"A good athlete is the result of a good and worthy opponent." - David Crow
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Hi,
I am programming my own Active-X Control. Now I have a Problem on my PropertyPage. I put a CheckBox and two RadioButtons onto the PropertyPage Dialog and I want the RadioButtons to be enabled if the CheckBox is checked. But when I try to make the member variables, which i made as Contol variables, enable = true, it doesn't work. So I looked the Radio Buttons up in the MSDN I have, and there the enabled property appears not in the class members list.
My Question now is. I can select the enabled property in the PropertyPage Dialog when I click right on it and choose Properties, why can't I call this property with my code? Or how can I do this?
Greetings
TheInfernalCrow
|
|
|
|
|