GELÖST (API)Windows Fenster C++

Diskutiere (API)Windows Fenster C++ im Programmierung Forum im Bereich Software Forum; Hallöchen, ich bins mal wieder :aah. Ich hab eine Frage ich habe jetzt ein kleines Windows Fenster Programm gemacht. Die Konsole ist bereits...
N

Nils0502

Threadstarter
Mitglied seit
05.01.2008
Beiträge
91
Hallöchen,

ich bins mal wieder :aah.
Ich hab eine Frage ich habe jetzt ein kleines Windows Fenster Programm gemacht. Die Konsole ist bereits ausgeblendet! Und das Programm lässt sich auch beenden wenn man auf das X oder abrechen klickt ich möchte jetzt aber noch das man das Programm benützen MUSS also das man es nicht weg klicken kann.
Weiß jemand wie das geht in C++?

Danke für eure Hilfe
MFG Nils0502
 
Zuletzt bearbeitet:
automatthias

automatthias

vernunftgeplagt
Mitglied seit
21.04.2006
Beiträge
8.053
Hallo Nils,

was für ein C++ verwendest Du?

Im einfachsten Fall gibt es vordefinierte Methoden wie OnExit() oder ähnlich, die automatisch erzeugt werden, wenn man z.B. in der Entwicklungsumgebung auf dem [X] einen Doppelklick macht.
Oder man kann schon einiges aus dem Dialogfenster von vorneherein ausblenden, z.B. das System-Menü.
 
N

Nils0502

Threadstarter
Mitglied seit
05.01.2008
Beiträge
91
Abend,

hir ist mein Code:

Code:
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
#pragma argused    

int main ()
{

        FreeConsole();
        
        const char  szWitz[] = "\"Ich steh' schwer auf Umweltschutz\", sagt Peter.\n"
                    "\"Ich werfe zum Beispiel alte U-Bahn-Fahrscheine nie weg,\n"
                       "sondern benutze sie mehrmals.\"";



        int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow);
        {

                int iAntwort = MessageBox(NULL, szWitz, "Ha, ha, ha, ha...",
                MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);



                if (IDOK == iAntwort)
                        {
                         MessageBox(NULL, "Ja, ich finde den Witz auch Ok...",
                         "Sie haben auf Ok gedrückt",
                         MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1);




                if(IDOK == iAntwort)
                        {
                        MessageBox(NULL, "Ich wünsche noch viel spaß",
                        "Sie haben auf Ok gedrückt",
                        MB_ICONINFORMATION | MB_OK | MB_DEFBUTTON1);

                       
                        }
                }     

                else if (IDCANCEL == iAntwort)
                {
                        MessageBox(NULL, "Ja, warum haben sie denn auf Abbrechen gedrückt?\n"
                        "Hat ihnen der Witz etwa nicht gefallen?",
                        "Sie haben auf Abbrechen gedrückt",
                        MB_ICONINFORMATION  | MB_OKCANCEL | MB_DEFBUTTON1);

                       if (IDCANCEL == iAntwort)
                        {
                                
                                        MessageBox(NULL, "Ja, warum haben sie denn auf Abbrechen gedrückt?\n"
                                        "Hat ihnen der Witz etwa nicht gefallen?",
                                        "Sie haben auf Abbrechen gedrückt",
                                        MB_ICONINFORMATION  | MB_OK | MB_DEFBUTTON1);
                                
                        }

                }                       
        }  return 0;
}
MFG Nils0502
 
S

__stefan__

Mitglied seit
08.03.2011
Beiträge
10
Alter
27
Hallo, weiß zwar nicht ob ich das ganz richtig verstanden hab, aber normal müsst das mit dem Messagebox Flag "MB_SYSTEMMODAL" gehen, wenn das aktiv ist bleibt die MB immer im Vordergrund.
Code:
int iAntwort = MessageBoxA(NULL, szWitz, "Ha, ha, ha, ha...",
        MB_ICONINFORMATION | MB_OKCANCEL | MB_DEFBUTTON1 |  MB_SYSTEMMODAL);
Also und dann noch was was mir aufgefallen ist, ist zwar schon ewig her wo ich mich mit der WinAPI beschäftigt hab, aber normal ist das unsinn:
Code:
int main ()
{
...
        int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow);   
...
Sondern einfach:

Code:
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
//das programm
return 0;
}
 
automatthias

automatthias

vernunftgeplagt
Mitglied seit
21.04.2006
Beiträge
8.053
Hallo, weiß zwar nicht ob ich das ganz richtig verstanden hab, aber normal müsst das mit dem Messagebox Flag "MB_SYSTEMMODAL" gehen, wenn das aktiv ist bleibt die MB immer im Vordergrund.
Nicht so wirklich...
MSDN Library:
MB_SYSTEMMODAL All applications are suspended until the user responds to the message box. System-modal message boxes are used to notify the user of serious, potentially damaging errors that require immediate attention and should be used sparingly.
Nils muss, wie bereits angedeutet, das Exit Ereignis abfangen und behandeln (oder was meinst Du (Nils) mit "...nicht wegklicken kann...")
Infos siehe z.B. hier

(Schade, dass DiableNoir sich vom Winboard zurückgezogen hat. Der ist ein richtig guter Programmierer und könnte da sicherlich gut helfen)
 
M

microsoft

Mitglied seit
22.01.2007
Beiträge
4.510
Hallöchen,

ich bins mal wieder :aah.
Ich hab eine Frage ich habe jetzt ein kleines Windows Fenster Programm gemacht. Die Konsole ist bereits ausgeblendet! Und das Programm lässt sich auch beenden wenn man auf das X oder abrechen klickt ich möchte jetzt aber noch das man das Programm benützen MUSS also das man es nicht weg klicken kann.
Ich finde sowas etwas aufdringlich, sorry für meine Kritik :sneaky Aber ich denke gerade an die aufpopenden Werbefenster im Internet-Browser. Wenn man rechts oben klickt, so geht wieder ein neues Fenster auf. :blink
 
N

Nils0502

Threadstarter
Mitglied seit
05.01.2008
Beiträge
91
Vielen dank ich werde es mal ausprobieren.

Hehe gut beschrieben microsoft aber ich bin ja nurn Schüler haha ich stelle nicht so schlimme Dinge an :D.

@automatthias:
Ich weiß keinen Fachbegriff dafür tut mir leid :D.
Aber wie diese ERORR MESSAGES von Windos die man immer bestätigen muss auch wenn sie eine Millionen mal kommen.

[C++ Fehler] Unit1.cpp(10): E2188 Ausdruckssyntax
[C++ Fehler] Unit1.cpp(12): E2451 Undefiniertes Symbol 'ExitEventHandler'
[C++ Fehler] Unit1.cpp(13): E2451 Undefiniertes Symbol 'ExitEventHandler'

Öhm ?? wie Deklariere ich dieses Exit Funktion?
 
Zuletzt bearbeitet:
Bullayer

Bullayer

Schwergewicht
Mitglied seit
19.07.2006
Beiträge
24.153
Standort
DE-RLP-COC
Versuchs mal mit cin.get();
 
N

Nils0502

Threadstarter
Mitglied seit
05.01.2008
Beiträge
91
Versuchs mal mit cin.get();
öhm tut mir leid bin schwer von Begriff.
Ich kanns einfügen aber Borland kann damit nichts anfangen.(Undefinitiertes cin)
Ich googel mal.
Cin gett ist doch für ganz andere Dinge??

@Prometheus:
tut mir leid wusste nicht wie ichs nennen soll hätte es wohl besser API genannt was?
Aber ich bin ein Anfänger also bitte habe Erbarmen.

MFG :aah
 
P

Prometheus

Gast
öhm tut mir leid bin schwer von Begriff.
Ich kanns einfügen aber Borland kann damit nichts anfangen.
Ich googel mal.

@Prometheus:
tut mir leid wusste nicht wie ichs nennen soll hätte es wohl besser API genannt was?
Aber ich bin ein Anfänger also bitte habe Erbarmen.

MFG :aah
Kein Problem :-) Du kannst es ja ganz leicht umbenennen in zB. "Windows Fenster Programm C++" ... oder ähnlich.
 
S

__stefan__

Mitglied seit
08.03.2011
Beiträge
10
Alter
27
Ja also hab das bisschen falsch verstanden.
Hätt gemeint du willst das das Fenster immer im Vordergrund bleibt, also das man nicht in ein anderes Fenster klicken kann um das in den Hintergrund zu bekommen.
Also wenn ich das jetz richtig verstanden hab willst du das man nicht auf das X-Klicken kann um den Dialog zu beenden. Also soviel wie ich weiß ist das mit der Massegbox nicht so einfach möglich, da der "Abbrechen"-Button und das "X" gleich behandelt werden.

Oder man kann schon einiges aus dem Dialogfenster von vorneherein ausblenden, z.B. das System-Menü
Ja kann man, aber nicht bei Messageboxen. Meine Idee wäre jetzt einfach ein eigenes Fenster zu schrieben, dort kann man das "X" dann ausblenden. Dann einfach eine Textbox rein und zwei Buttons und fertig.
Ich würde sagen das dürfte das leichteste sein.
 
N

Nils0502

Threadstarter
Mitglied seit
05.01.2008
Beiträge
91
Ja also hab das bisschen falsch verstanden.
Hätt gemeint du willst das das Fenster immer im Vordergrund bleibt, also das man nicht in ein anderes Fenster klicken kann um das in den Hintergrund zu bekommen.
Also wenn ich das jetz richtig verstanden hab willst du das man nicht auf das X-Klicken kann um den Dialog zu beenden. Also soviel wie ich weiß ist das mit der Massegbox nicht so einfach möglich, da der "Abbrechen"-Button und das "X" gleich behandelt werden.

Ich würde sagen das dürfte das leichteste sein.
WOWOWOW STOPPP:D
Du hast das richtig verstanden gehabt ich möchte das man es nicht in den hintergrund verschieben kann genau!!
Und das hatt leider nicht ganz funktioniert mit MB_SYSTEMMODAL oder ich habs falsch verstanden hmm.
Ich tippe aufs 2te.


Und em wenn ich das mit dem Abrechen ed wollte müsste ich ja nur ne wiederholungs schleife machen damit wieder das erste Fenster geöffnet wird! Nicht so kompliziert denken:D
 
S

__stefan__

Mitglied seit
08.03.2011
Beiträge
10
Alter
27
Bei MB_SYSTEMMODAL bleibt die Messagbox immer oben, also sie kann nicht minimiert oder in den Hintergrund geschoben werden. Es sind aber immer noch Eingaben in anderen Fenstern möglich.
So wie du dir das wahrscheinlich vorstellst, das man erst die Messagbox bearbeiten muss bevor man in einer anderen Anwendung etwas machen kann ist nicht möglich, da eine Messagbox eine Information für den Benutzer ist und keine "Zwangseingabe".
Wenn du willst das der Benutzer erst eine Eingabe machen muss, bevor er etwas in anderen Anwendungen machen kann, wirst du auch ein Fenster erstellen müssen und wie vorher schon mal erwähnt dort dann Buttons und Text einfügen. Dann kann man das nur noch über denn Taskmanager beenden, was man hoffe ich zuminderst dann nicht mehr sperren kann, warum sollte man das auch machen.
 
automatthias

automatthias

vernunftgeplagt
Mitglied seit
21.04.2006
Beiträge
8.053
Und em wenn ich das mit dem Abrechen ed wollte müsste ich ja nur ne wiederholungs schleife machen damit wieder das erste Fenster geöffnet wird! Nicht so kompliziert denken:D
Vorsicht mit so was! Wenn man da Fehler macht, kann das das System lahm legen (100% CPU).

Ich hatte vor einigen Jahren mal ein Programm für ein spezielles System geschrieben, da musste ein bestimmte Meldung garantiert angezeigt werden.
Da habe ich erst das FensterHandle (also die systemweit eindeutige Nummer des Fensters) ermittelt, und ich musste dann auf diesem speziellen System mit folgenden Funktionen hantieren (ich weiß nicht mehr, welche letztendlich wirklich gebraucht wurden):

1. das Fenster enablen (EnableWindow)
2. den Focus drauf setzen (SetFocus)
3. das Fenster explizit anzeigen (ShowWindow)
4. das Fenster in den Vordergrund stellen (SetForegroundWindow)
5. die Z-Order setzen (BringWindowToTop)
 
N

Nils0502

Threadstarter
Mitglied seit
05.01.2008
Beiträge
91
Dann bedanke ich mich bei euch für eure Hilfe und wünsche noch einen Juten Tag haut rein;)

MFg Nils0502
 
Thema:

(API)Windows Fenster C++

Sucheingaben

cpp Fenster -Win32 api

(API)Windows Fenster C++ - Ähnliche Themen

  • API probleme

    API probleme: Hallo Ich habe ein Problem bei Windows 8.1 es sind die api Probleme es ist fast bei jedem Programm was ich installiere Z.B bei origin musste...
  • Dll Register Server-Eingangspunkt wurde nicht gefunden wurde geladen (api-ms-win-core-rtlsupport-l1-1-0.dll)

    Dll Register Server-Eingangspunkt wurde nicht gefunden wurde geladen (api-ms-win-core-rtlsupport-l1-1-0.dll): api-ms-win-core-rtlsupport-l1-1-0.dll wurde geladen DllUnregisterServer-Eingangspunkt wurde nicht gefunden, ist die Meldung die mir beim Versuch...
  • REST API is deprecated for versions v2.1 and higher (12)

    REST API is deprecated for versions v2.1 and higher (12): Hallo liebe Leute, ich habe ein Login Problem mit meinem NOKIA Lumia 925 Modell, mich in Facebook einzuloggen. Fehlermeldung: REST API is...
  • Windows 10: API zur Verbindung mit Fahrzeugen entdeckt

    Windows 10: API zur Verbindung mit Fahrzeugen entdeckt: Immer mehr Multimedia- und Infotainment-Systeme unterstützen die Einbindung von Smartphones in das Auto. Zu den gängigen Systemen MirrorLink...
  • VB.NET & Windows Update API Libary

    VB.NET & Windows Update API Libary: Ich such eine Anleitung wie man mit VB.NET auf die Windows Update API Libary zugreift. Ich hab bereits mit Google gesucht, aber nichts gefunden...
  • Ähnliche Themen

    Oben