Français
Source/ Codesnippets

insérer Fenstermenü Hintergrund Icônes manipuler Text

 
Fenstermenü manipuler Icônes insérer Text et Hintergrundfarbe changement de Andreas Miethe:
KompilierenMarqueSéparation
#############################
Test-Programm für :
XProfan
#############################
Author : Andreas Miethe
Juli 2003
#############################
Thema : Menu-Manipulationen
#############################
 $H windows.ph
 $H structs.ph
 $H messages.ph
 $H shellapi.ph
 $H commctrl.ph
Def HiWord(1) Div&(&(1),$10000)
Def LoWord(1) And(&(1),$FFFF)
Struct Item = Text$(20),hIco&,hFont&,hTextColor&,hBackColor&
Struct lpmis = ~MEASUREITEMSTRUCT
Struct lpdis = ~DRAWITEMSTRUCT
Struct Size = ~Size
Struct Rect = ~Rect
Declare dwImageXY&,Imagewidth&,Imageheight&,WinBrush&,StatusWindow&
Declare lpMyItem#
Declare lpmis#,lpdis#
Declare lpMyitem&
Declare Size#
Declare ItemData&,IconFile$,Ico&
Declare Rect#
Declare Item1#,Item2#,Item3#
Dim Item1#,Item
Dim Item2#,Item
Dim Item3#,Item
Dim lpmis#,24lpmis
Dim lpMyItem#,Item
Dim Size#,Size
Dim lpdis#,lpdis
Dim Rect#,Rect
SetTrueColor 1
Declare ende%,hMenu&
Declare OldProc&

Proc DeleteObjects

    ~DeleteObject(Item1#.hIco&)
    ~DeleteObject(Item2#.hIco&)
    ~DeleteObject(Item3#.hIco&)
    ~DeleteObject(Item1#.hFont&)
    ~DeleteObject(Item2#.hFont&)
    ~DeleteObject(Item3#.hFont&)
    ~DeleteObject(WinBrush&)
    Dispose Item1#
    Dispose Item2#
    Dispose Item3#
    Dispose lpmis#
    Dispose lpMyItem#
    Dispose Size#
    Dispose lpdis#
    Dispose Rect#

EndProc

DEF &WM_MOUSEWHEEL $20A
Declare wheel&

proc windowProc

    Declare ItemIco&,Itemtext$,dwCheckXY&,wCheckX&,nTextX&,nTextY&
    Declare hOldFont&
    parameters Wnd&, Msg&, wParam&, lParam&

    If Msg& = &WM_MOUSEWHEEL

        Wheel& = wheel& + HiWord(wParam&)/120 * 4
        Settext wnd&,str$(wheel&)

    Endif

    If Msg& = ~WM_PAINT

        ~Invalidaterect(Wnd&,0,0)

    Endif

    If Msg& = ~WM_SIZE

        SetWindowPos StatusWindow& = 0,0-0,0

    Endif

    If Msg& = ~WM_MENUSELECT

        If LoWord(wParam&) = 1

            Settext StatusWindow&,Laden  -> lädt ein neues Dokoment

        ElseIf LoWord(wParam&) = 2

            Settext StatusWindow&,Speichern  -> speichert das aktuelle Dokument

        ElseIf LoWord(wParam&) = 3

            Settext StatusWindow&,Ende  -> beendet das Programm

        Else

            Settext StatusWindow&,

        Endif

    Endif

    If Msg& = ~WM_MEASUREITEM

        lpmis# = lParam&
        lpMyItem# = Long(lParam&,20)
        ItemText$ = lpMyItem#.Text$
        hOldFont& = ~SelectObject(%hdc,Long(lpMyItem#,sizeof(lpMyItem#)-4))
        ~GetTextExtentPoint32(%hdc,Addr(ItemText$),Len(ItemText$),Size#)
        Long lpmis#,12 = Size#.cx&
        Long lpmis#,16 = Size#.cy&
        ~SelectObject(%hdc,hOldFont&)
        Return 1

    Endif

    If Msg& = ~WM_DRAWITEM

        lpdis# = lParam&
        lpMyItem# = Long(lpdis#,44)
        dwCheckXY& = ~GetMenuCheckMarkDimensions()
        ImageWidth& = HiWord(dwCheckXY&)
        ImageHeight& = LoWord(dwCheckXY&)
        wCheckX& = HiWord(dwCheckXY&)+ 8
        ntextX& = wCheckX& + Long(lpdis#,28)
        ntextY& = Long(lpdis#,32)
        ItemText$ = lpMyItem#.Text$
        hOldFont& = ~SelectObject(lpdis#.hdc&,lpMyItem#.hFont&)

        If and(Long(lParam&,16),1)wenn selektiert

            ~SetTextColor(lpdis#.hdc&,~GetSysColor(~COLOR_HIGHLIGHTTEXT))original-Farbwert
            ~SetBkColor(lpdis#.hdc&,~GetSysColor(~COLOR_HIGHLIGHT))original-Farbwert
            ~SetTextColor(lpdis#.hdc&,lpMyItem#.hTextColor&)
            ~SetBkColor(lpdis#.hdc&,lpMyItem#.hBackColor&)

        EndIf

        Long Rect#,0 = Long(lpdis#,28) + wCheckX&
        Long Rect#,4 = Long(lpdis#,32)
        Long Rect#,8 = Long(lpdis#,36)
        Long Rect#,12 = Long(lpdis#,40)
        ~ExtTextOut(lpdis#.hdc&,nTextX&,nTextY&,~ETO_OPAQUE,Rect#,addr(Itemtext$),Len(Itemtext$),0)
        ~DrawIconEx(lpdis#.hdc&,Long(lpdis#,28)+2,Long(lpdis#,32),lpMyItem#.hIco&,ImageWidth&,ImageHeight&,0,~GetClassLong(hMenu&,~GCL_HBRBACKGROUND),3)
        ~SelectObject(lpdis#.hdc&,hOldFont&)
        Return 1

    Endif

    If Msg& = ~WM_CLOSE

        DeleteObjects
        Messagebox(und Tschüss,Ende,64)

    Endif

    alle Messages die nicht behandelt wurden an die Original-Prozedur weiterleiten
    return ~CallWindowProc(OldProc&,Wnd&, Msg&, WParam&, LParam&)

endproc

set(FastMode,1)
Windowstyle 31
window 0,0 -640,480
cls ~GetSysColor(~COLOR_BTNFACE)
WinBrush& = ~CreateSolidBrush(~GetSysColor(~COLOR_BTNFACE))
~SetClassLong(%hwnd,~GCL_HBRBACKGROUND,WinBrush&)
PopUp Datei
AppendMenu 1,
AppendMenu 2,
Separator
AppendMenu 3,
IconFile$ = Shell32.dll
MenuItems mit Werten bestücken
Item1#.Text$ = Laden  Menütext
~ExtractIconEx(ADDR(IconFile$),1,0,ADDR(ico&),1)
Item1#.hIco& = Ico&Menüicon
Item1#.hFont& = CreateFont(Roman,16,0,1,0,0)Menufont
Item1#.hTextColor& = RGB(255,255,255)Menütextfarbe
Item1#.hBackColor& = RGB(255,0,0)Menühintergrundfarbe
nächstes Item
Item2#.Text$ = Speichern
~ExtractIconEx(ADDR(IconFile$),20,0,ADDR(ico&),1)
Item2#.hIco& = Ico&
Item2#.hFont& = CreateFont(Roman,16,0,1,1,1)
Item2#.hTextColor& = RGB(255,255,255)
Item2#.hBackColor& = RGB(0,255,0)
nächstes Item
IconFile$ = Par$(0)aus der eigenen EXE
Item3#.Text$ = Ende
~ExtractIconEx(ADDR(IconFile$),0,0,ADDR(ico&),1)
Item3#.hIco& = Ico&
Item3#.hFont& = CreateFont(Roman,16,0,1,1,0)
Item3#.hTextColor& = RGB(255,255,255)
Item3#.hBackColor& = RGB(0,0,255)
Menü modifizieren
hMenu& = ~GetMenu(%hwnd)
~ModifyMenu(hMenu&,1,or(~MF_BYCOMMAND,~MF_OWNERDRAW),1,Item1#)
~ModifyMenu(hMenu&,2,or(~MF_BYCOMMAND,~MF_OWNERDRAW),2,Item2#)
~ModifyMenu(hMenu&,3,or(~MF_BYCOMMAND,~MF_OWNERDRAW),3,Item3#)
Window-Prozedur ersetzen, in OldProc wird die Adresse der Original-Prozedur gesichert
OldProc& = ~SetWindowLong(%hwnd,~GWL_WNDPROC, ProcAddr(windowProc,4))
Repaint
StatusWindow& = ~CreateStatusWindow($56000000,0,%hwnd,100)

whilenot ende%

    waitinput

    If MenuItem(1)

        Messagebox(MenüItem 1,Item,64)

    ElseIf MenuItem(2)

        Messagebox(MenüItem 2,Item,64)

    ElseIf MenuItem(3)

        SendMessage(%hwnd,~WM_CLOSE,0,0)

    Endif

Wend

end
 
01.07.2005  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

3.379 Views

Untitledvor 0 min.
Andre Rohland03.02.2018
Peter Max Müller15.11.2017
rumfruggel20.09.2011

Themeninformationen

cet Thema hat 1 participant:

iF (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie