myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE7
   » Gadget für Vista
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin
» Accessoires

Ressourcen
» .NET-Glossar
» guide to C#
» openbook: Visual C#
» openbook: OO
» .NET BlogBook
» MSDN Webcasts
» dotnetjob.de
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Bankverbindung
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » GUI: Windows-Forms » Problem mit Platz im Form reservieren
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Problem mit Platz im Form reservieren

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Mazo Mazo ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.08.2006
Beiträge: 255
Entwicklungsumgebung: VS10, Win7, WP7.1/7.5
Herkunft: Sachsen


Mazo ist offline

Problem mit Platz im Form reservieren

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,
nachdem ich hier ein bisschen gesucht habe, hab ich code gefunden womit man platz für eine Anwendung reservieren kann... allerdings wird bei mir meine anwendung immer genau über den reservierten Platz und nich darin gezeichnet. Was mach ich falsch?

C#-Code:
[StructLayout(LayoutKind.Sequential)]
public struct APPBARDATA
{
public uint cbSize;
public IntPtr hWnd;
public uint uCallbackMessage;
public uint uEdge;
public RECT rc;
public int lParam;
}

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}

const int ABM_NEW = 0x00000000;
const int ABM_REMOVE = 0x00000001;
const int ABM_SETPOS = 0x00000003;
const int ABM_QUERYPOS = 0x00000002;

const int ABE_BOTTOM = 3;

public TaskleisteMain()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
this.Cursor = Cursors.WaitCursor;

this.Location = new Point(0, (Screen.PrimaryScreen.WorkingArea.Height - this.Height));
this.Width = Screen.PrimaryScreen.WorkingArea.Width;

APPBARDATA abd = new APPBARDATA();
abd.cbSize = (uint)Marshal.SizeOf(typeof(APPBARDATA));
abd.hWnd = this.Handle;
abd.uCallbackMessage = RegisterWindowMessage(Guid.NewGuid().ToString()); ;

SHAppBarMessage(ABM_NEW, ref abd);

abd.rc = new RECT();
abd.uEdge = ABE_BOTTOM;
abd.rc.top = SystemInformation.PrimaryMonitorSize.Height - 60;
abd.rc.left = 0;
abd.rc.bottom = SystemInformation.PrimaryMonitorSize.Height;
abd.rc.right = SystemInformation.PrimaryMonitorSize.Width;
SHAppBarMessage(ABM_QUERYPOS, ref abd);
SHAppBarMessage(ABM_SETPOS, ref abd);
}
13.02.2008 14:02 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Andreas.May Andreas.May ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-2474.gif


Dabei seit: 07.09.2006
Beiträge: 915


Andreas.May ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hrm, sehe da kein this.Size = new Size(abd.rc.right - abd.rc.left,abd.rc.bottom - abd.rc.top).

Kann auch an etwas anderen liegen, aber hier ein  Link der dir weiterhelfen sollte :-)

[Edit]
Grml.. 2 mal den falschen Link gepostet..

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Andreas.May am 13.02.2008 14:30.

13.02.2008 14:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Mazo Mazo ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.08.2006
Beiträge: 255
Entwicklungsumgebung: VS10, Win7, WP7.1/7.5
Herkunft: Sachsen

Themenstarter Thema begonnen von Mazo

Mazo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo Andreas.May,
das mit dem this.Size = new Size(abd.rc.right - abd.rc.left,abd.rc.bottom - abd.rc.top) hab ich auch probiert das hilft nichts...
und der Link lädt grad bei mir nicht fertig, versuch ich dann nochmal.

einige Minuten später:
so ich hab es jetzt mit den Klassen von Codeprojekt versucht - gleiches Ergebniss es wird Platz reserviert, allerdings rutscht die Leiste raus unglücklich . Kann das ein Problem von Vista sein? oder liegt es evtl. am FormBorderStyle =None , was kann man dagegen tun?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Mazo am 13.02.2008 15:51.

13.02.2008 15:38 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Mazo Mazo ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.08.2006
Beiträge: 255
Entwicklungsumgebung: VS10, Win7, WP7.1/7.5
Herkunft: Sachsen

Themenstarter Thema begonnen von Mazo

Mazo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

ok es lag wirklich am FormBorderStyle... Ich hab jetzt vor dem Verankern den FormBorderStyle auf FixedToolWindow gesetzt und dann wieder auf None und es geht smile
13.02.2008 15:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Andreas.May Andreas.May ist männlich
myCSharp.de-Mitglied

images/avatars/avatar-2474.gif


Dabei seit: 07.09.2006
Beiträge: 915


Andreas.May ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hrm, muss dann etwas mit Vista zu tun haben.

Das Beispiel bei CodeProjectklappt geht bei mir reibungslos. Wäre also interessant was bei deinem Code unter WinXP nun passiert. Kannst das ja mal auf einen anderen Rechner mal testen. smile

/PS
Bei meinen kleinen codebeispiel ging es unter Vista wie XP, habe allerdings die Windows Border Styles über SetWindowPos anderst gesetzt.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Andreas.May am 13.02.2008 16:32.

13.02.2008 16:30 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Mazo Mazo ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.08.2006
Beiträge: 255
Entwicklungsumgebung: VS10, Win7, WP7.1/7.5
Herkunft: Sachsen

Themenstarter Thema begonnen von Mazo

Mazo ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo,
ich muss nochmal nachfragen...
Mein Problem, ich will das Fenster zwischen 2 Bildschirmen wechseln, der reservierte Bereich wechselt auch korrekt, allerdings wechselt das Fenster nicht egal wo ich die Location setzte mache es funktioniert einfach nicht unglücklich kann mir wer helfen?
Hier der Code:

C#-Code:
[DllImport("shell32.dll);]
static extern IntPtr SHAppBarMessage(uint dwMessage,
ref APPBARDATA pData);

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern uint RegisterWindowMessage(string lpString);

[DllImport("user32.dll";);]
static extern int GetForegroundWindow();

[DllImport("user32.dll";);]
static extern int GetWindowText(int hWnd, StringBuilder text, int count);

[StructLayout(LayoutKind.Sequential)]
public struct APPBARDATA
{
public uint cbSize;
public IntPtr hWnd;
public uint uCallbackMessage;
public uint uEdge;
public RECT rc;
public int lParam;
}

[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
const int ABM_NEW = 0x00000000;
const int ABM_REMOVE = 0x00000001;
const int ABM_SETPOS = 0x00000003;
const int ABM_QUERYPOS = 0x00000002;

private void toolStripMenuItemPosition_Click(object sender, EventArgs e)
{
ReservierungAufheben();
if (Datenverwaltung.Use().SekundärenBildschirm)
{
Datenverwaltung.Use().SekundärenBildschirm = false;
}
else
{
Datenverwaltung.Use().SekundärenBildschirm = true;
}

if (Datenverwaltung.Use().SekundärenBildschirm)
{
Location = new Point(Screen.AllScreens[1].WorkingArea.X, Screen.AllScreens[1].WorkingArea.Height - 59);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
Reservieren(3, Screen.AllScreens[1].WorkingArea.Height - 59, Screen.AllScreens[1].WorkingArea.X, 0, Screen.AllScreens[1].WorkingArea.Y + Screen.AllScreens[1].WorkingArea.Width);
this.FormBorderStyle = FormBorderStyle.None;
Size = new Size(Screen.AllScreens[1].WorkingArea.Width, 59);
//Location = new Point(Screen.AllScreens[1].WorkingArea.X, Screen.AllScreens[1].WorkingArea.Height - 59);

}
else
{
Location = new Point(Screen.AllScreens[0].WorkingArea.X, Screen.AllScreens[0].WorkingArea.Height - 59);
this.FormBorderStyle = FormBorderStyle.FixedToolWindow;
Reservieren(3, Screen.AllScreens[0].WorkingArea.Height - 59, Screen.AllScreens[0].WorkingArea.X, 0, Screen.AllScreens[0].WorkingArea.Y + Screen.AllScreens[0].WorkingArea.Width);
this.FormBorderStyle = FormBorderStyle.None;
Size = new Size(Screen.PrimaryScreen.WorkingArea.Width, 59);
//Location = new Point(Screen.AllScreens[0].WorkingArea.X, Screen.AllScreens[0].WorkingArea.Height - 59);
}
ButtonsGrößeBestimmen();
}

public void Reservieren(uint Bildschirmseite, int top, int left, int bottom, int right)
{
APPBARDATA abd = new APPBARDATA();
abd.cbSize = (uint)Marshal.SizeOf(typeof(APPBARDATA));
abd.hWnd = this.Handle;
abd.uCallbackMessage = RegisterWindowMessage(Guid.NewGuid().ToString()); ;

SHAppBarMessage(ABM_NEW, ref abd);

abd.rc = new RECT();
abd.uEdge = Bildschirmseite;
abd.rc.top = top;
abd.rc.left = left;
abd.rc.bottom = bottom;
abd.rc.right = right;
SHAppBarMessage(ABM_QUERYPOS, ref abd);
SHAppBarMessage(ABM_SETPOS, ref abd);
//Location = new Point(abd.rc.left, abd.rc.top);
}

public void ReservierungAufheben()
{
APPBARDATA abd = new APPBARDATA();
abd.cbSize = (uint)Marshal.SizeOf(typeof(APPBARDATA));
abd.hWnd = this.Handle;

SHAppBarMessage(ABM_REMOVE, ref abd);
}

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Mazo am 15.02.2008 22:11.

15.02.2008 22:09 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Zwischen diesen beiden Beiträgen liegen mehr als 11 Monate.
lord_fritte
myCSharp.de-Mitglied

Dabei seit: 07.10.2007
Beiträge: 549
Entwicklungsumgebung: MS C++/C# Express


lord_fritte ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo ich arbeite mit dem selben Beispiel, alles klappt wunderbar, aber wenn ich jetzt den FormBorderStyle auf None setze, geht garnichts mehr, das fenster dockt nicht mehr an, warum?
Auch wenn ich das jetzt nachträglich mache über einen Button, sobald ich den FormBorderStyle auf None setze ist das mit docken vorbei.. aber warum????

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von lord_fritte am 14.02.2009 23:23.

14.02.2009 23:21 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 5 Jahre.
Der letzte Beitrag ist älter als 4 Jahre.
Antwort erstellen


© Copyright 2003-2013 myCSharp.de-Team. Alle Rechte vorbehalten. 21.05.2013 23:35