 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1047 Wohnort: Niederbayern
|
Verfasst am: 18.09.2014, 22:54 Titel: WinApi - Menü schließen, Programm weiter ausführen? |
|
|
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 |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 19.09.2014, 14:27 Titel: Re: WinApi - Menü schließen, Programm weiter ausführen? |
|
|
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 |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1047 Wohnort: Niederbayern
|
Verfasst am: 19.09.2014, 17:43 Titel: Re: WinApi - Menü schließen, Programm weiter ausführen? |
|
|
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 |
|
 |
|
|
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.
|
|