English
Source / code snippets

Insert Fenstermenü background Icons manipulating Text

 
Fenstermenü manipulating Icons insert Text and Backgroundcolor Change of Andreas Miethe:
CompileMarkSeparation
#############################
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
 
07/01/05  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

no Systemprofil laid out. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Please register circa a Posting To verfassen.
 

Topic-Options

3.326 Views

Untitledvor 0 min.
Andre Rohland02/03/18
Peter Max Müller11/15/17
rumfruggel09/20/11

Themeninformationen

this Topic has 1 subscriber:

iF (1x)


Admins  |  AGB  |  Applications  |  Authors  |  Chat  |  Privacy Policy  |  Download  |  Entrance  |  Help  |  Merchantportal  |  Imprint  |  Mart  |  Interfaces  |  SDK  |  Services  |  Games  |  Search  |  Support

One proposition all XProfan, The there's!


My XProfan
Private Messages
Own Storage Forum
Topics-Remember-List
Own Posts
Own Topics
Clipboard
Log off
 Deutsch English Français Español Italia
Translations

Privacy Policy


we use Cookies only as Session-Cookies because of the technical necessity and with us there no Cookies of Drittanbietern.

If you here on our Website click or navigate, stimmst You ours registration of Information in our Cookies on XProfan.Net To.

further Information To our Cookies and moreover, How You The control above keep, find You in ours nachfolgenden Datenschutzerklärung.


all rightDatenschutzerklärung
i want none Cookie