Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Owner drawn menu items

Postades av 2005-07-22 01:39:40 - Mikael Jönsson, i forum c# (c-sharp), Tråden har 1 Kommentarer och lästs av 508 personer

Hej,

Håller på och försöker snygga till mina menyer lite. Har dock problem med att få de översta menyerna på rätt plats och med rätt storlek. De andra "undermenyerna" fungerar perfekt.

Såhär ser det ut: http://img147.imageshack.us/img147/5205/menuitem1qm.jpg

Koden för MeasureItem ser ut såhär:
<code>
private void OnMeasureItem(MenuItem myMenuItem, MeasureItemEventArgs e)
{
int myItemWidth = 0;

if(GetItemText(myMenuItem) != "-")
{
e.ItemHeight = myMenuItemHeight;
}
else
{
e.ItemHeight = myMenuSeperatorHeight;
}

if((myMenuItem.Parent is MainMenu) == true)
{
myItemWidth = -2;
}
else
{
myItemWidth = 40;
}

StringFormat myStringFormat = new StringFormat();
myStringFormat.HotkeyPrefix = HotkeyPrefix.Show;
myStringFormat.SetTabStops(60, new float[] {0});

e.ItemWidth = Convert.ToInt32(e.Graphics.MeasureString(GetItemText(myMenuItem), myMenuFont, SizeF.Empty, myStringFormat).Width + myItemWidth);
myStringFormat.Dispose();
}
</code>

För att rita de översta menyerna använder jag:
<code>
private void DrawItemTop(MenuItem myMenuItem, DrawItemEventArgs e)
{
SolidBrush mySolidBrush;
Pen myPen;

if(Convert.ToBoolean(e.State & DrawItemState.HotLight) == true)
{
//Hover
mySolidBrush = new SolidBrush(myMenuSelectionBackgroundColor);
myPen = new Pen(myMenuSelectionBorderColor);

e.Graphics.FillRectangle(mySolidBrush, e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 1, e.Bounds.Height - 2);
e.Graphics.DrawRectangle(myPen, e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 1, e.Bounds.Height - 2);

DrawText(myMenuItem, e);
}
else if(Convert.ToBoolean(e.State & DrawItemState.Selected) == true)
{
//Clicked
mySolidBrush = new SolidBrush(myMenuSidebarColor);
myPen = new Pen(myMenuShadowColor);

e.Graphics.FillRectangle(mySolidBrush, e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 1, e.Bounds.Height - 2);
e.Graphics.DrawRectangle(myPen, e.Bounds.X + 1, e.Bounds.Y + 1, e.Bounds.Width - 1, e.Bounds.Height - 2);

DrawText(myMenuItem, e);
}
else
{
//Normal
e.Graphics.FillRectangle(SystemBrushes.Control, e.Bounds.X, e.Bounds.Y, e.Bounds.Width + 1, e.Bounds.Height);
DrawText(myMenuItem, e);
}
}
</code>

DrawText:
<code>
private void DrawText(MenuItem myMenuItem, DrawItemEventArgs e)
{
StringFormat myStringFormat = new StringFormat();
myStringFormat.HotkeyPrefix = HotkeyPrefix.Show;
myStringFormat.SetTabStops(60, new float[] {0});

SolidBrush mySolidBrushText = new SolidBrush(myMenuTextColor);

if(myMenuItem.Enabled == true)
{
if(Convert.ToBoolean(e.State & DrawItemState.Selected) == true)
{
mySolidBrushText = new SolidBrush(myMenuSelectionTextColor);
}
else
{
mySolidBrushText = new SolidBrush(myMenuTextColor);
}
}
else
{
mySolidBrushText = new SolidBrush(myMenuDisabledColor);
}

if((myMenuItem.Parent is MainMenu) == true)
{
e.Graphics.DrawString(GetItemText(myMenuItem), myMenuFont, mySolidBrushText, e.Bounds.Left + 5, e.Bounds.Top + 2, myStringFormat);
}
else
{
e.Graphics.DrawString(GetItemText(myMenuItem), myMenuFont, mySolidBrushText, e.Bounds.Left + myMenuSidebarWidth + 10, e.Bounds.Top + 4, myStringFormat);
}
}
</code>

Om jag istället för den vanliga texten, ritar ut "e.Bounds.Width.ToString()" så skrivs det ut "12" på den första menyn, som vad jag har förstått betyder att den menyn ska vara 12 pixlar bred. Skriver jag istället ut "e.Graphics.MeasureString(GetItemText(myMenuItem), myMenuFont, SizeF.Empty, myStringFormat).Width" så skrivs det ut 27.

Någon som kan komma på vad som är fel? Börjar bli väldigt trött på att bara stirra på koden utan att komma fram till något... :/

Ledsen för det långa inlägget...


Svara

Sv: Owner drawn menu items

Postades av 2005-07-22 23:18:37 - Mikael Jönsson

Äntligen ett slut på detta problem. Det var där jag lade till nya EventHandlers och satte OwnerDraw till true som felet låg. Jag satte OwnerDraw till true _innan_ jag lade till nya EventHandlers och det fungerade tydligen inte med de översta menyerna. Däremot fungerar det bra för alla "undermenyer". Skumt, tycker jag...


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 166
27 952
271 704
800
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies