|
|
Home » U++ Library support » TopWindow&PopUp, TrayIcon » How to get and set window placement information?
How to get and set window placement information? [message #14656] |
Thu, 06 March 2008 11:20 |
Tom1
Messages: 1250 Registered: March 2007
|
Senior Contributor |
|
|
Hi,
How do I get and set TopWindow placement information? I'm attempting to save and then on next program launch restore the window position and normal / minimize / maximize / fullscreen status of the window. The flags are clearly available from TopWindow::IsMinimized() etc. but the position acquired with GetRect() simply returns the current size even if the window is maximized.
Are there member functions for setting and getting the "normal" (i.e. not minimized or maximized) window rect?
// Tom
|
|
|
|
Re: How to get and set window placement information? [message #14658 is a reply to message #14657] |
Thu, 06 March 2008 11:56 |
Tom1
Messages: 1250 Registered: March 2007
|
Senior Contributor |
|
|
mrjt wrote on Thu, 06 March 2008 12:29 | See TopWindow::SerializePlacement().
|
Thanks, but unfortunately the TopWindow::SerializePlacement() appears to use the SetRect/GetRect in the standard way and is not able to store the "normal" i.e. restored rect size if the window is maximized or minimized when saving data through SerializePlacement(). You can see this if you try to normalize = restore the window after loading a maximized window placement using SerializePlacement().
So, the question remains: Are there member functions for setting and getting the "normal" (i.e. not minimized or maximized) window rect?
// Tom
|
|
|
Re: How to get and set window placement information? [message #14659 is a reply to message #14658] |
Thu, 06 March 2008 12:30 |
mrjt
Messages: 705 Registered: March 2007 Location: London
|
Contributor |
|
|
I see, I'd never noticed that before. It seems that Upp doesn't retain this information, rather it is done by the operating system.
But you can add the functionality easily enough:
class CtrlLibTest : public TopWindow {
public:
typedef CtrlLibTest CLASSNAME;
Rect normal;
CtrlLibTest()
{
SetRect(0, 0, 308, 344);
CenterScreen();
normal = GetRect();
Sizeable().MaximizeBox(true).MinimizeBox(true);
FileIn in(GetDataFile("window.pos"));
if (in.IsOpen()) {
in % normal;
SetRect(normal);
SerializePlacement(in, true);
}
}
virtual void Layout() {
if (!IsMaximized() && !IsMinimized() && IsShown())
normal = GetRect();
}
virtual void Close()
{
FileOut out(GetDataFile("window.pos"));
if (out.IsOpen()) {
out % normal;
SerializePlacement(out);
}
TopWindow::Close();
}
};
[Updated on: Thu, 06 March 2008 12:31] Report message to a moderator
|
|
|
Re: How to get and set window placement information? [message #14660 is a reply to message #14659] |
Thu, 06 March 2008 14:42 |
Tom1
Messages: 1250 Registered: March 2007
|
Senior Contributor |
|
|
Thanks, James! I only added another && !IsFullScreen() to the Layout() function to take care of that scenario too. Now it should work all the way. However, I would like to see the following additions made to the TopWindow class, but I guess it's up to Mirek to decide, right?
Anyway:
private:
Rect normalrect;
public:
Rect &GetNormalWindowRect(){ return normalrect; }
void SetNormalWindowRect(Rect &rect){
normalrect=rect;
if (!IsMaximized() && !IsMinimized() && !IsFullScreen() && IsShown()) SetRect(rect);
}
virtual void Layout(){
// or where ever the following belongs so that it
// gets properly executed even when the virtual Layout()
// function gets overridden in an inherited class
...
if (!IsMaximized() && !IsMinimized() && !IsFullScreen() && IsShown()) normalrect = GetRect();
...
}
// Tom
|
|
|
Goto Forum:
Current Time: Sun Oct 13 02:30:39 CEST 2024
Total time taken to generate the page: 0.02506 seconds
|
|
|