Italia
Fonte/ Codesnippets

Mdi Nproc

 

 {$cleq}
Declare WndClass#
Declare FrameClass#
Declare ClientCreateStruct#
Declare Msg#
Declare hWndFrame&
Declare hWndClient&
Declare hMenu&
Declare hPopupMenu&
Declare mdiChild&
Struct TWindowClass = ~WNDCLASS
Struct TMsg = ~MSG
Struct TClientCreateStruct = ~CLIENTCREATESTRUCT
Dim Msg#,TMsg
Var FrameClass$      = "MDIFRAME"
Var FrameName$       = "MDI-Anwendung"
Var MDIClientClass$  = "MDICLIENT"
Var MDIChildClass$   = "MDICHILD"
Var MDIChildName$    = "CHILD"
Var ChildUp&         = 2000
Var File$           = "&Datei"
Var Neu$             = "&Neu"
var Beenden$         = "&Beenden"
'****************************************************************************************

Proc Menu

    hMenu&      =  ~CreateMenu()
    hPopupMenu& = ~CreateMenu()
    ~AppendMenu(hPopupMenu&,~MF_POPUP,101,Addr(Neu$))
    ~AppendMenu(hPopupMenu&,~MF_POPUP,102,Addr(Beenden$))
    ~AppendMenu(hMenu&,~MF_POPUP, hPopupMenu&, Addr(File$))

EndProc

'****************************************************************************************

Proc WinMain

    Dim FrameClass#,TWindowClass

    With FrameClass#

        .style&          = ~CS_HREDRAW | ~CS_VREDRAW
        .lpfnWndProc&    = ProcAddr(FrameWndProc,4)
        .cbClsExtra&     = 0
        .cbWndExtra&     = 0
        .hInstance&      = %hInstance
        .hIcon&          = ~LoadIcon(0,~IDI_Winlogo)
        .hCursor&        = ~LoadCursor(0, ~IDC_ARROW)
        .hbrBackground&  = ~createsolidbrush(~getSysColor(4))
        .lpszMenuName&   = 0
        .lpszClassName&  = Addr(FrameClass$)

    EndWith

    ~RegisterClass(FrameClass#)
    Dispose FrameClass#
    Dim WndClass#,TWindowClass

    With WndClass#

        .style&          = ~CS_HREDRAW | ~CS_VREDRAW
        .lpfnWndProc&    = ProcAddr(MDIChildProc,4)
        .cbClsExtra&     = 0
        .cbWndExtra&     = 0
        .hInstance&      = %hInstance
        .hIcon&          = 0
        .hCursor&        = ~LoadCursor(0, ~IDC_ARROW)
        .hbrBackground&  = ~createsolidbrush(~getSysColor(0))
        .lpszMenuName&   = 0
        .lpszClassName&  = Addr(MDIChildClass$)

    EndWith

    ~RegisterClass(WndClass#)
    Dispose WndClass#
    hWndFrame& = ~CreateWindowEx(                                                         \
    0,                                                                    \
    Addr(FrameClass$),                                                    \
    Addr(FrameName$),                                                     \
    ~WS_CAPTION | ~WS_MINIMIZEBOX | ~WS_SYSMENU | ~WS_CLIPCHILDREN |      \
    ~WS_VISIBLE,      \
    200,                                                                  \
    100,                                                                  \
    698,                                                                  \
    542,                                                                  \
    0,                                                                    \
    0,                                                                    \
    %hInstance,                                                           \
    0)
    Menu
    ~SetMenu(hWndFrame&,hMenu&)
    Dim ClientCreateStruct#,TClientCreateStruct

    With ClientCreateStruct#

        .hWindowMenu&   = ~GetSubMenu(~GetMenu(hWndFrame&),1)
        .idFirstChild&  = ChildUp&

    EndWith

    hWndClient& = ~CreateWindowEx(                                                        \
    ~WS_EX_CLIENTEDGE,                                                   \
    Addr(MDIClientClass$),                                               \
    0,                                                                   \
    ~WS_CHILD | ~WS_CLIPCHILDREN | ~WS_CLIPSIBLINGS | ~WS_VISIBLE |      \
    ~MDIS_ALLCHILDSTYLES,      \
    0,                                                                   \
    0,                                                                   \
    700,                                                                 \
    500,                                                                 \
    hWndFrame&,                                                          \
    0,                                                                   \
    %hInstance,                                                          \
    ClientCreateStruct#)

    While ~GetMessage(Msg#, 0, 0, 0) > 0

        ~TranslateMessage(Msg#)

        if (long(msg#,4)=wm_user+1)

            case (long(msg#,12)=1) : newWindow()

        endif

        ~DispatchMessage(Msg#)

    EndWhile

    Return Msg#.wParam&

EndProc

'****************************************************************************************

Proc NewWindow

    mdiChild& = ~CreateMDIWindow(                                                         \
    Addr(MDIChildClass$),                                                  \
    Addr(MDIChildname$),                                                   \
    ~WS_CAPTION | ~WS_MINIMIZEBOX | ~WS_SYSMENU | ~WS_VISIBLE,             \
    40,                                                                    \
    40,                                                                    \
    300,                                                                   \
    200,                                                                   \
    hwndclient&,                                                           \
    %hinstance,                                                            \
    0)

EndProc

'****************************************************************************************

nProc FrameWndProc

    Parameters Wnd&, Message&, wParam&, lParam&
    global hWndClient&

    If Message& = ~WM_COMMAND

        If wParam& = 101

            postMessage(Wnd&,wm_user+1,0,1)

        ElseIf wParam& = 102

            SendMessage(hWndClient&,~WM_MDIGETACTIVE,0,0)
            SendMessage(Wnd&,~WM_CLOSE,0,0)

        EndIf

    ElseIf Message& = ~WM_CLOSE

    ElseIf Message& = ~WM_DESTROY

        ~PostQuitMessage(0)

    EndIf

    Return ~DefFrameProc(Wnd&, hWndClient&, Message&, wParam&, lParam&)

EndProc

'****************************************************************************************

nProc MDIChildProc

    Parameters Wnd&,Message&, wParam&, lParam&
    global hWndClient&

    If Message& = ~WM_CLOSE

        SendMessage(hWndClient&,~WM_MDIDESTROY,Wnd&,0)

    Else

        Return ~DefMDIChildProc(Wnd&, Message&, wParam&, lParam&)

    EndIf

EndProc

'****************************************************************************************
WinMain
Dispose Msg#
Dispose ClientCreateStruct#
 
07.05.2013  
 




Ernst
Hallo David,
vielen Dank per Deine HIlfe (ich hatte bei dem Grundcode nahezu alle Procs zu nProcs machen wollen....) - jetzt macht's langsam richtig Divertimento

nur: warum erscheinen keine (new)Childs, wenn ich anstelle {$cleq} den Schalter {$iq} einsetze ?

bin schon selbst draufgekommen: Set("FastMode",1) einfügen, dann geht's

Grüße Ernst
 
07.05.2013  
 



Zum Quelltext


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

5.240 Views

Untitledvor 0 min.
Gast.081503.10.2024
Member 862464112.05.2024
p.specht19.01.2022
Uwe Lang20.11.2021
Di più...

Themeninformationen

Dieses Thema hat 2 subscriber:

Ernst (1x)
iF (1x)


Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie