|
I guess I have found the right place to restore the child frame window placement:
void CChildFrame::ActivateFrame(int nCmdShow)
{
CMDIChildWnd::ActivateFrame(nCmdShow);
if(! m_bOnce)
return;
m_bOnce = FALSE;
UINT nBytes = 0;
WINDOWPLACEMENT* lwp;
if(AfxGetApp()->GetProfileBinary(_T("Settings"), _T("WindowPlacementChild"), (LPBYTE*)&lwp, &nBytes))
SetWindowPlacement(lwp);
delete []lwp;
}
|
|
|
|
|
That should only work for the focused child window. Unless MFC overrides windows and activates each window in Z order.
Windows normally when it brings up a group of children will only activate them along the focus chain in non MFC. Its very specific on the API.
WM_ACTIVATE message (Windows)[^]
Sent to both the window being activated and the window being deactivated. If the windows use the same input queue, the message is sent synchronously, first to the window procedure of the top-level window being deactivated, then to the window procedure of the top-level window being activated.
By default each window will call down to it's parent to make sure it is activated in a direct line along the focus chain. You can basically follow the activation chain upwards from the application window and arrive at the focus window which is how keyboard messages etc find there way to the right window. So at no stage should two MDI children be active and the active one generally paints it's frame a different colour and brings itself to top (that is the default behviour). The only other child window that would get a normal windows API message is the one losing the focus chain. However if you had 3 children there would always be one window that would never get an activation message no matter what you did as it will neither be gaining or losing activation/focus chain.
I would not expect that behaviour on MFC unless it does it's own thing and does a lot of repainting that is totally not done on actual windows API. Given the weird nature of that call with nCmdShow that is possible, all be it a bit naft and horrible hack.
The WM_WINDOWPOSCHANGED I gave you does go to each and every child which is also why they tell you that you probably want to override it
WM_WINDOWPOSCHANGED message (Windows)[^]
By default, the DefWindowProc function sends the WM_SIZE and WM_MOVE messages to the window. The WM_SIZE and WM_MOVE messages are not sent if an application handles the WM_WINDOWPOSCHANGED message without calling DefWindowProc. It is more efficient to perform any move or size change processing during the WM_WINDOWPOSCHANGED message without calling DefWindowProc.
In vino veritas
modified 30-Dec-16 10:01am.
|
|
|
|
|
Thank you for explanation. I have noticed something weird also: I open two child frames. Both of them are maximized. I have following code:
void CChildFrame::OnDestroy()
{
WINDOWPLACEMENT wp;
GetWindowPlacement(&wp);
TRACE("Window state: %d\n", wp.showCmd);
CMDIChildWnd::OnDestroy();
}
I repeat: both of child frames are maximized. I close one of them: the result of TRACE are
Window state: 1
which mean SW_SHOWNORMAL, not maximized.
Then, I close the next child frame opened, the result is:
Window state: 3
which mean that is SW_MAXIMIZED .... although all child frame opened were maximized, the only last one tell me that was maximized ... rest of them tell me that was SSHOWNORMAL ? Why ?
|
|
|
|
|
When you close one child, the focus first shifts to the next child window. So at that point the window is not technically maximized, in that maximized is more than about size it is about focus as well. Think about the pesky icons placed in the parent frame that is the window that is maximized.
So technically you can't have two child windows WM_MAXIMIZED you can have two of them maximum size but that isn't the same thing
In vino veritas
|
|
|
|
|
Very good explanation, thank you !
|
|
|
|
|
c++, how to make an array program one dimension from( 1 to 7 numbers)that the user insert these numbers in terminal that finally display sum,average,GPA,grade,min and max. please help me
|
|
|
|
|
No, sorry, we don't do people's homework here. This is very basic stuff, and any C/C++ reference should be able to help you. If you try things, and get stuck on a particular issue, then come back and ask.
Cheers,
Mick
------------------------------------------------
It doesn't matter how often or hard you fall on your arse, eventually you'll roll over and land on your feet.
|
|
|
|
|
We do not do your HomeWork.
HomeWork is not set to test your skills at begging other people to do your work, it is set to make you think and to help your teacher to check your understanding of the courses you have taken and also the problems you have at applying them.
Any failure of you will help your teacher spot your weaknesses and set remedial actions.
So, give it a try, reread your lessons and start working. If you are stuck on a specific problem, show your code and explain this exact problem, we might help.
As programmer, your job is to create algorithms that solve specific problems and you can't rely on someone else to eternally do it for you, so there is a time where you will have to learn how to. And the sooner, the better.
When you just ask for the solution, it is like trying to learn to drive a car by having someone else training.
Creating an algorithm is basically finding the maths and make necessary adaptation to fit your actual problem.
Alma28 wrote: c++, how to make an array program one dimension from( 1 to 7 numbers)that the user insert these numbers in terminal that finally display sum,average,GPA,grade,min and max. please help me
Your problems are problems only to very beginners and the solution is in the very first steps of learning the language.
If you want to learn C/C++ :
Here is links to references books on C and C++ by the authors of the languages. Note than C is the ancestor of C++, so knowing C is always useful with C++.
The C Programming Language - Wikipedia, the free encyclopedia[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~pf/Kernighan-Ritchie/C-Programming-Ebook.pdf[^]
C++ Programing Language[^]
Patrice
“Everything should be made as simple as possible, but no simpler.” Albert Einstein
|
|
|
|
|
Good Morning Sir,
I referred this tutorial, Embedding Python program in a C/C++ code[^]
I have followed up the tutorial and successfully embedded Python in my code.
PyRun_SimpleString("print('Hello World from Embedded Python!!!')");
is used to execute a single line of Python code but how do I run a multiple lines of code in Python. I also tried running a Python from a file but the file also needed to be there for running the executable. I dont want a file along with my executable, I searched in the google sir but I find no results.
I am confused here, I dont know what to do
Thank you sir for your time
|
|
|
|
|
Ask this question right under that post and author will tell you how. There is a forum provided for questions about methodology of the article, or similar aspects etc.
That is, so that if someone else happens to have a similar problem, they can know how to solve this.
The sh*t I complain about
It's like there ain't a cloud in the sky and it's raining out - Eminem
~! Firewall !~
|
|
|
|
|
Thank you sir I have posted the question below the article 
|
|
|
|
|
Hi,I had a question about class and object memory, any hints are welcome.
1) Is the class occupies some memory? as I understand it, class is just a data type as int, long ,double.
2) Is the member function in the Object's memory ? I mean, in the sizeof(object).
3) The derived class object inherited from base class, the base class has member functions, then is the member function memory layout be inherited to the derived class object?
Thanks
|
|
|
|
|
- No a class is like a template or blueprint, and just contains the definitions used by the compiler to generate the code that construct objects.
- No, member functions exist in a separate part of the application's address space, they are not part of the object.
- No, all member functions will be present in memory and invoked as required by the running application.
For more details consult your reference guide or the documentation on MSDN.
|
|
|
|
|
Thanks.
Then in the inheritance operation, for example:
class A {
public:
void funct() { cout << "a" << endl; }
}
};
Class B:protected A {
private:
void funct() { cout << "b" << endl; }
};
int main()
{
B c;
b.funct();
;
return 0;
}
B's funct() can hide A's funct(), if I comment funct()in Class B, b.funct() will call funct() in class A.
Seems like b inherited the function in class A.
Since member function only has one copy in memory, then how can B inherit the member function from A?
|
|
|
|
|
Like I said before, both functions will be in memory, so either or both of them can be called. Overriding and hiding affects how the compiler will invoke the functions, it does not affect how the code exists in memory.
|
|
|
|
|
Thank you for your reply.
I am a little confused about the inheritance, member function inheritance.
So the member function of one class, only has one copy in the memory map, then if class B's base class is class A,
the inheritance mechanism makes the B's object has member variables of class A.
and B's object inherited the member functions of class A,while B's object don't have those functions, B's object just know how to invoke those functions, right?
And the member function inheritance follow same inheritance rule as member variables, for example, private inheritance will make all member functions inherited from base class A, turn to private in class B.
class A {
public: void f1(){}
protected: int f2() {}
private: char f3() {}
};
class B:private A {
// B inherit f1(), f2(), f3(), and access for all 3 functions will be private.
};
Thanks
}
|
|
|
|
|
You have the general idea. All methods of all classes will be available in memory. The actual method being called at any time is controlled according to the inheritance rules; see Inheritance (C++)[^].
|
|
|
|
|
thanks, so both functions will has only one copy in memory. but compiler decide overriding and hiding effects, right?
|
|
|
|
|
Correct the selection is done via a Virtual Method Table (VMT) and now you have got the concept this will make sense
Virtual method table - Wikipedia[^]
In vino veritas
|
|
|
|
|
|
See if this is of any help - Polymorphism in C[^]
«_Superman_»
I love work. It gives me something to do between weekends.
Microsoft MVP (Visual C++) (October 2009 - September 2013) Polymorphism in C
|
|
|
|
|
Hi
I am getting the above error, and I know its a programmer trainee error but I can't for the life of me figure it out
I did a find all from Visual Studio (looking in my solution directory) and what found was
the function was defined once
I did declare it ending with ';'
And when I call it or the declaration or the actual routine all have the same parameter list
Here is the result of the find all
line 43 is the declaration line 1606 is the actual function line 1743 is where it actually used
, Subfolders, Find Results 1, "quot;"
cpu.c(43):void hex_to_ascii(BYTE *ipx, char *str, int num);
cpu.c(1606): void hex_to_ascii(BYTE *ipx, char *str, int num)
cpu.c(1743): hex_to_ascii(ipx,str,num);
hmacros.h(182): hmacros.h(187): cpu.c(43) : see previous definition of 'hex_to_ascii'
Matching files: 3 Total files searched: 764
|
|
|
|
|
"Matching files:3" but I only see two distinct file names... do you have cpu.c included in the project twice somehow?
|
|
|
|
|
That's not it I checked only once the other was the output (compiler output) file
|
|
|
|
|
Well, there are very few things that could cause this... an actual redefinition or a namespace conflict. To test if it's a namespace conflict, wrap the function in a namespace and recompile, if it gives you the same error, you have a redefinition in that same file somehow. I can't tell you exactly how without looking at your code and your project/makefile.
edit: You can also check namespace conflict by changing your function name temporarily (just to see if that's it).
|
|
|
|
|