Deutsch
Forum

Mausabfrage unterschied Haupt- und Nebenfenster

 
- Seite 1 -



Julian
Schmidt
Warum funktioniert die Mausabfrage im Hauptfenster so wie sie soll und im Nebenfenster erst nach Bestätigung von Enter?

Code auf Hauptfenster:
KompilierenMarkierenSeparieren
DEF GetDC(1) !"USER32","GetDC"
DEF CreateCompatibleDC(1) !"GDI32","CreateCompatibleDC"
DEF CreateCompatibleBitmap(3) !"GDI32","CreateCompatibleBitmap"
DEF SelectObject(2) !"GDI32","SelectObject"
DEF BitBlt(9) !"GDI32","BitBlt"
DEF GetCurrentObject(2) !"GDI32","GetCurrentObject"
DEF DeleteObject(1) "GDI32","DeleteObject"
DEF DeleteDC(1) !"GDI32","DeleteDC"
DEF ReleaseDC(2) !"USER32","ReleaseDC"

proc Screenshot

    Parameters xpos%,ypos%,maxX!,maxY!
    declare hdc&, hmdc&
    hdc& = GetDC(0)
    hmdc& = CreateCompatibleDC(hdc&)
    hbitmap& = CreateCompatibleBitmap(hdc&,maxX!,maxY!)
    SelectObject(hmdc&, hbitmap&)
    BitBlt(hmdc&, 0, 0, maxX!, maxY!, hdc&, xpos%, ypos%, $0CC0020)
    hbitmap& = GetCurrentObject(hmdc&, 7)
    DeleteDC(hmdc&)
    ReleaseDC(0,hdc&)

endproc

declare zaehler%, xpos%, ypos%, breite%, hoehe%, mod%,hbitmap&
Windowstyle 16+64
Window 0,0-0,0
ShowMax %hwnd
SetWindowPos %hwnd=99999999,99999999
Screenshot 0,0,%MaxX,%MaxY
SetWindowPos %hwnd=0,0
DrawPic hbitmap&, 0, 0; 0
UseCursor 3

while 1

    sleep 50

    if iskey(27)

        mod%=1
        Break

    Endif

    if %MousePressed

        zaehler%=zaehler%+1

        if zaehler%=1

            xpos%=%MouseX
            ypos%=%MouseY
            UsePen 0,2,RGB(255,0,0)
            Line %MouseX,0 - %MouseX,%MaxY
            Line 0,%MouseY - %MaxX,%MouseY
            sleep 100

        elseif zaehler%=2

            breite%=%MouseX-xpos%
            hoehe%=%MouseY-ypos%
            UsePen 0,2,RGB(255,0,0)
            Line %MouseX,0 - %MouseX,%MaxY
            Line 0,%MouseY - %MaxX,%MouseY

        Endif

    Endif

    case zaehler%=2 : Break

Endwhile

case mod%<>1 : Messagebox(Str$(xpos%)+","+Str$(ypos%)+"-"+Str$(breite%)+","+Str$(hoehe%),"",64)
end

Code auf Nebenfenster:
KompilierenMarkierenSeparieren
DEF GetDC(1) !"USER32","GetDC"
DEF CreateCompatibleDC(1) !"GDI32","CreateCompatibleDC"
DEF CreateCompatibleBitmap(3) !"GDI32","CreateCompatibleBitmap"
DEF SelectObject(2) !"GDI32","SelectObject"
DEF BitBlt(9) !"GDI32","BitBlt"
DEF GetCurrentObject(2) !"GDI32","GetCurrentObject"
DEF DeleteObject(1) "GDI32","DeleteObject"
DEF DeleteDC(1) !"GDI32","DeleteDC"
DEF ReleaseDC(2) !"USER32","ReleaseDC"

proc Screenshot

    Parameters xpos%,ypos%,maxX!,maxY!
    declare hdc&, hmdc&
    hdc& = GetDC(0)
    hmdc& = CreateCompatibleDC(hdc&)
    hbitmap& = CreateCompatibleBitmap(hdc&,maxX!,maxY!)
    SelectObject(hmdc&, hbitmap&)
    BitBlt(hmdc&, 0, 0, maxX!, maxY!, hdc&, xpos%, ypos%, $0CC0020)
    hbitmap& = GetCurrentObject(hmdc&, 7)
    DeleteDC(hmdc&)
    ReleaseDC(0,hdc&)

endproc

declare zaehler%, xpos%, ypos%, breite%, hoehe%, hbitmap&
Windowstyle 24
Window 100,200,500,500
CopyArea
end

Proc CopyArea

    declare mod%,zaehler%,infowindow&
    Windowstyle 16+64'$F0
    infowindow&=Create("Window",%hwnd,"",0,0,%MaxX,%MaxY)
    showwindow(infowindow&,0)
    Screenshot 0,0,%MaxX,%MaxY
    showwindow(infowindow&,1)
    startpaint infowindow&
    DrawPic hbitmap&, 0, 0; 0
    EndPaint
    UseCursor 3
    declare xpos%,ypos%,breite%,hoehe%

    while 1

        waitinput

        if iskey(27)

            mod%=1
            Break

        Endif

        'if %MousePressed
        zaehler%=zaehler%+1

        if zaehler%=1

            xpos%=%MouseX
            ypos%=%MouseY
            startpaint infowindow&
            UsePen 0,2,RGB(255,0,0)
            Line %MouseX,0 - %MouseX,%MaxY
            Line 0,%MouseY - %MaxX,%MouseY
            EndPaint

        elseif zaehler%=2

            breite%=%MouseX-xpos%
            hoehe%=%MouseY-ypos%
            startpaint infowindow&
            UsePen 0,2,RGB(255,0,0)
            Line %MouseX,0 - %MouseX,%MaxY
            Line 0,%MouseY - %MaxX,%MouseY
            EndPaint
            sleep 300

        Endif

        'Endif
        case zaehler%=2 : Break

    Endwhile

    UseCursor 1
    destroywindow(infowindow&)

    if mod%<>1

        Messagebox(Str$(xpos%)+","+Str$(ypos%)+"-"+Str$(breite%)+","+Str$(hoehe%),"",64)

    Endif

EndProc

 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
01.06.2011  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »

Wenn Du UserMessage wm_lButtonDown bzw. 513 hinzufügst wird WaitInput auch bei einem Linksklick auf den Dialog verlassen.

Gibt auch die User32::GetCursorPos API.
 
02.06.2011  
 




Julian
Schmidt
Cool es funktioniert
Danke IF
KompilierenMarkierenSeparieren
DEF GetDC(1) !"USER32","GetDC"
DEF CreateCompatibleDC(1) !"GDI32","CreateCompatibleDC"
DEF CreateCompatibleBitmap(3) !"GDI32","CreateCompatibleBitmap"
DEF SelectObject(2) !"GDI32","SelectObject"
DEF BitBlt(9) !"GDI32","BitBlt"
DEF GetCurrentObject(2) !"GDI32","GetCurrentObject"
DEF DeleteObject(1) "GDI32","DeleteObject"
DEF DeleteDC(1) !"GDI32","DeleteDC"
DEF ReleaseDC(2) !"USER32","ReleaseDC"

proc Screenshot

    Parameters xpos%,ypos%,maxX!,maxY!
    declare hdc&, hmdc&
    hdc& = GetDC(0)
    hmdc& = CreateCompatibleDC(hdc&)
    hbitmap& = CreateCompatibleBitmap(hdc&,maxX!,maxY!)
    SelectObject(hmdc&, hbitmap&)
    BitBlt(hmdc&, 0, 0, maxX!, maxY!, hdc&, xpos%, ypos%, $0CC0020)
    hbitmap& = GetCurrentObject(hmdc&, 7)
    DeleteDC(hmdc&)
    ReleaseDC(0,hdc&)

endproc

declare zaehler%, xpos%, ypos%, breite%, hoehe%, hbitmap&
Windowstyle 24
Window 100,200,500,500
CopyArea
end

Proc CopyArea

    declare mod%,zaehler%,infowindow&
    Windowstyle 16+64'$F0
    UserMessages 513
    infowindow&=Create("Window",%hwnd,"",0,0,%MaxX,%MaxY)
    showwindow(infowindow&,0)
    Screenshot 0,0,%MaxX,%MaxY
    showwindow(infowindow&,1)
    startpaint infowindow&
    DrawPic hbitmap&, 0, 0; 0
    EndPaint
    UseCursor 3
    declare xpos%,ypos%,breite%,hoehe%

    while 1

        waitinput

        if iskey(27)

            mod%=1
            Break

        Endif

        if %UMessage=513

            zaehler%=zaehler%+1

            if zaehler%=1

                xpos%=%MouseX
                ypos%=%MouseY
                startpaint infowindow&
                UsePen 0,2,RGB(255,0,0)
                Line %MouseX,0 - %MouseX,%MaxY
                Line 0,%MouseY - %MaxX,%MouseY
                EndPaint
                sleep 100

            elseif zaehler%=2

                breite%=%MouseX-xpos%
                hoehe%=%MouseY-ypos%
                startpaint infowindow&
                UsePen 0,2,RGB(255,0,0)
                Line %MouseX,0 - %MouseX,%MaxY
                Line 0,%MouseY - %MaxX,%MouseY
                EndPaint
                sleep 300

            Endif

        Endif

        case zaehler%=2 : Break

    Endwhile

    UseCursor 1
    destroywindow(infowindow&)

    if mod%<>1

        Messagebox(Str$(xpos%)+","+Str$(ypos%)+"-"+Str$(breite%)+","+Str$(hoehe%),"",64)

    Endif

EndProc

 
˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
02.06.2011  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.421 Betrachtungen

Unbenanntvor 0 min.
Rainer Hoefs02.07.2019
rquindt02.12.2015
H.Brill08.06.2015
maroro12.06.2014
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Julian Schmidt (2x)
iF (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


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