Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

WinApi - Menü schließen, Programm weiter ausführen?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

BeitragVerfasst am: 18.09.2014, 21:54    Titel: WinApi - Menü schließen, Programm weiter ausführen? Antworten mit Zitat

Wie kann man bei einem mit WinApi geschriebenen Programm nach einem Mausklick auf den Button das Programm an anderer Stelle fortgesetzt werden?
Die Stelle, an der das Programm fortgesetzt werden soll, ist im Quellcode vermerkt!
Mir ist das durch einen Zufall eben aufgefallen, dass das Programm komplett beendet wird oder nicht weiter ausgeführt wird!

Bis jetzt sind alle Versuche fehlgeschlagen das Problem zu lösen! Jedes mal wenn ich ein Exit ... eingfügt habe, wurde entweder das komplette Programm geschlossen oder der weitere Quellcode nicht ausgeführt! Ich will aber nur das mit WinApi erstellte Menu schließen und den restlichen Quellcode weiter ausführen lassen!

Gruß
ALWIM

Code:
CONST ProgrammName = "Test"

declare function WndProc(ByVal hWnd as HWND, byval message as UINTEGER,_
byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT
declare function SubProc(ByVal hWnd as HWND, byval message as UINTEGER,_
byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT

Dim as WNDCLASS   wndcls
with wndcls
   .style         =  CS_HREDRAW Or CS_VREDRAW
   .lpfnWndProc   =  ProcPtr(WndProc)
   .cbClsExtra    =  0
   .cbWndExtra    =  0
   .hInstance     =  GetModuleHandle(NULL)
   .hCursor       =  LoadCursor(NULL, IDC_ARROW)
   .hIcon         =  LoadIcon(NULL, NULL)
   .hbrBackground =  GetSysColorBrush(COLOR_WINDOW)
   .lpszClassName =  StrPtr(ProgrammName)
   .lpszMenuName  =  NULL
end with
RegisterClass @wndcls

Dim as HWND   hWnd = CreateWindow(_
ProgrammName, ProgrammName, WS_OVERLAPPED Or WS_SYSMENU,_
CW_USEDEFAULT, CW_USEDEFAULT, 600, 280,_
NULL, NULL, GetModuleHandle(NULL), NULL)

ShowWindow   hWnd, SW_NORMAL
UpdateWindow hWnd


Dim as MSG msg
do while getmessage(@msg, NULL, 0, 0) <> 0
   TranslateMessage @msg
   DispatchMessage  @msg
Loop

End msg.wParam

' Nach verlassen des Menü's soll hier das Programm fortgesetzt werden:




' SLEEP ' <------- warten
' END      '   <------- Programmende


FUNCTION WndProc(ByVal hWnd as HWND, byval message as UINTEGER,_
byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT

static AS HWND hs1

SELECT case message
CASE WM_DESTROY
PostQuitMessage 0
return 0

CASE WM_CREATE

hs1 = CreateWindow("button", "Menü verlassen",_
WS_CHILD or WS_VISIBLE,_
145, 10, 295, 22, hWnd, NULL,_
cast(LPCREATESTRUCT,lParam)->hInstance,NULL)

return 0

CASE WM_COMMAND
   IF HIWORD(wParam) <> BN_CLICKED then return 0

   select case lParam
      
      CASE hs1: ' Menü verlassen?

   End SELECT
   return 0
END SELECT
return DefWindowProc( hWnd, message, wParam, lParam )
END FUNCTION

_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 929
Wohnort: Austria

BeitragVerfasst am: 19.09.2014, 13:27    Titel: Re: WinApi - Menü schließen, Programm weiter ausführen? Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
Wie kann man bei einem mit WinApi geschriebenen Programm nach einem Mausklick auf den Button das Programm an anderer Stelle fortgesetzt werden?
Die Stelle, an der das Programm fortgesetzt werden soll, ist im Quellcode vermerkt!

In deinem Fall indem du nach der mit "Menü verlassen?" kommentierten Stelle folgende Zeile einfügst:
Code:
DestroyWindow(hWnd)

(und das END musst du natürlich entfernen)

ALWIM hat Folgendes geschrieben:
Mir ist das durch einen Zufall eben aufgefallen, dass das Programm komplett beendet wird oder nicht weiter ausgeführt wird!
Bis jetzt sind alle Versuche fehlgeschlagen das Problem zu lösen! Jedes mal wenn ich ein Exit ... eingfügt habe, wurde entweder das komplette Programm geschlossen oder der weitere Quellcode nicht ausgeführt! Ich will aber nur das mit WinApi erstellte Menu schließen und den restlichen Quellcode weiter ausführen lassen!

Wenn ich das so lese, dann solltest du dich einmal ernsthaft mit den Grundlegenden Programmiertechniken vertraut machen. Die Windows API arbeitet Ereignisorientiert. Ich würde dir stark ans Herz legen, dass du dir z.B. den Wikipedia Artikel Event-Driven-Programming oder andere Erklärungen zu diesem Thema durchliest.
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 960
Wohnort: Niederbayern

BeitragVerfasst am: 19.09.2014, 16:43    Titel: Re: WinApi - Menü schließen, Programm weiter ausführen? Antworten mit Zitat

St_W hat Folgendes geschrieben:
ALWIM hat Folgendes geschrieben:
Wie kann man bei einem mit WinApi geschriebenen Programm nach einem Mausklick auf den Button das Programm an anderer Stelle fortgesetzt werden?
Die Stelle, an der das Programm fortgesetzt werden soll, ist im Quellcode vermerkt!

In deinem Fall indem du nach der mit "Menü verlassen?" kommentierten Stelle folgende Zeile einfügst:
Code:
DestroyWindow(hWnd)

(und das END musst du natürlich entfernen)

ALWIM hat Folgendes geschrieben:
Mir ist das durch einen Zufall eben aufgefallen, dass das Programm komplett beendet wird oder nicht weiter ausgeführt wird!
Bis jetzt sind alle Versuche fehlgeschlagen das Problem zu lösen! Jedes mal wenn ich ein Exit ... eingfügt habe, wurde entweder das komplette Programm geschlossen oder der weitere Quellcode nicht ausgeführt! Ich will aber nur das mit WinApi erstellte Menu schließen und den restlichen Quellcode weiter ausführen lassen!

Wenn ich das so lese, dann solltest du dich einmal ernsthaft mit den Grundlegenden Programmiertechniken vertraut machen. Die Windows API arbeitet Ereignisorientiert. Ich würde dir stark ans Herz legen, dass du dir z.B. den Wikipedia Artikel Event-Driven-Programming oder andere Erklärungen zu diesem Thema durchliest.

Vielen herzlichen Dank für die Hilfe! Den Befehl DestroyWindow(hWnD) kannte ich nicht. Genau der sorgt dafür, dass das Programm funktioniert. Ich sollte mir wirklich mal die ganzen Artikel durchlesen. Das würde mir vieles ersparen!

Vielen herzlichen Dank nochmals!!!

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz