Programm im Windows Fenster ausgeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Programm im Windows Fenster ausgeben

    Hi, bin neu hier! Und zwar wollte ich mir auch so ein kleines Net Send Programm schreiben. Beim ersten mal nachricht versenden Funktioniert auch alles super, aber wenn ich dann weiter unten bei der Auswahl goto verwende um wieder in das ober Programm teil zu springen, funktioniert die Eingabe mit gets nicht mehr richtig.

    Ich weis das ich da grad irgendwo einen Denkfehler hab, aber ich find das Problem momentan echt nicht!

    Hier ist mein Quellcode:

    Quellcode

    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4. #include <string.h>
    5. int main(void)
    6. {
    7. char cComputer[100], cNachricht[100], cBefehl[100];
    8. int iAuswahl;
    9. printf("\n\t\t\t<<< Colonel`s Net-Mail >>> \n\n");
    10. printf("\n\nComputername: ");
    11. gets(cComputer);
    12. printf("\n\nNachricht: ");
    13. gets(cNachricht);
    14. sprintf (cBefehl, "net send %s %s", cComputer, cNachricht);
    15. system (cBefehl);
    16. optionen:
    17. system("cls");
    18. printf("\n\t\t\t<<< Colonel`s Net-Mail >>> \n\n");
    19. printf("\n\nIhre Nachricht wurde erfolgreich gesendedt . . . !\n\n");
    20. printf("\n\nBitte geben sie jetzt eine der folgenden Optionen an!");
    21. printf("\n");
    22. printf("\n\n\t[1] Eine weitere Nachricht an diesen Computer senden ");
    23. printf("\n\n\t[2] Eine Nachricht an einen anderen Computer senden ");
    24. printf("\n\n\t[3] Net-Mail jetzt Beenden ");
    25. printf("\n\n\t");
    26. scanf ("%i", &iAuswahl);
    27. system("cls");
    28. if (iAuswahl==1)
    29. {
    30. printf("\n\t\t\t<<< Colonel`s Net-Mail >>> \n\n");
    31. printf("\n\nComputername: ");
    32. printf("%s", cComputer);
    33. printf("\n\nNachricht: ");
    34. gets(cNachricht);
    35. sprintf (cBefehl, "net send %s %s", cComputer, cNachricht);
    36. system (cBefehl);
    37. goto optionen;
    38. }
    39. else if(iAuswahl==2)
    40. {
    41. printf("\n\t\t\t<<< Colonel`s Net-Mail >>> \n\n");
    42. printf("\n\nComputername: ");
    43. gets(cComputer);
    44. printf("\n\nNachricht: ");
    45. gets(cNachricht);
    46. sprintf (cBefehl, "net send %s %s", cComputer, cNachricht);
    47. system (cBefehl);
    48. goto optionen;
    49. }
    50. else if(iAuswahl==3)
    51. {
    52. exit(1);
    53. }
    54. return 0;
    55. }
    Alles anzeigen
  • Jaja, diese scheiss formatierte Eingabe...Ich hab keine Ahnung wo fflush seinen Dienst tut, bei Linux jedenfalls nicht. Geht aber auch anders:

    Quellcode

    1. do {scanf("%i",&iAuswahl);} while ( getchar() != '\n' );

    Damit liest er bis zum Newline und lässt nix im Stream.
    Warum musst du überhaupt goto benutzen? Geht doch auch ohne...
    Ich hab jetzt mal dran rumgeschrieben, wenns dir gefällt kannst dus ja übernehmen:

    Quellcode

    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4. #include <string.h>
    5. void optionen(void);
    6. int main(void)
    7. {
    8. char cComputer[100], cNachricht[100], cBefehl[100];
    9. int iAuswahl;
    10. printf("\n\t\t\t<<< Colonel`s Net-Mail >>> \n\n");
    11. printf("\n\nComputername: ");
    12. gets(cComputer);
    13. printf("\n\nNachricht: ");
    14. gets(cNachricht);
    15. sprintf (cBefehl, "net send %s %s", cComputer, cNachricht);
    16. system (cBefehl);
    17. while(1)
    18. {
    19. optionen(); // Zeige Auswahlmenü
    20. do {scanf("%i",&iAuswahl);} while ( getchar() != '\n' ); // Lies die Auswahl ein
    21. system("cls");
    22. switch(iAuswahl)
    23. {
    24. case 1: // Eine weitere Nachricht an diesen Computer senden
    25. printf("\n\t\t\t<<< Colonel`s Net-Mail >>> \n\n");
    26. printf("\n\nComputername: ");
    27. printf("%s", cComputer);
    28. printf("\n\nNachricht: ");
    29. gets(cNachricht);
    30. sprintf (cBefehl, "net send %s %s", cComputer, cNachricht);
    31. system (cBefehl);
    32. break;
    33. case 2: // Eine Nachricht an einen anderen Computer senden
    34. printf("\n\t\t\t<<< Colonel`s Net-Mail >>> \n\n");
    35. printf("\n\nComputername: ");
    36. gets(cComputer);
    37. printf("\n\nNachricht: ");
    38. gets(cNachricht);
    39. sprintf (cBefehl, "net send %s %s", cComputer, cNachricht);
    40. system (cBefehl);
    41. break;
    42. case 3: // Net-Mail jetzt Beenden
    43. exit(1);
    44. break;
    45. default: // Ungültige Eingabe
    46. continue; // Spring zum Schleifenanfang
    47. }
    48. }
    49. return 0;
    50. }
    51. void optionen(void)
    52. {
    53. system("cls");
    54. printf("\n\t\t\t<<< Colonel`s Net-Mail >>> \n\n");
    55. printf("\n\nIhre Nachricht wurde erfolgreich gesendedt . . . !\n\n");
    56. printf("\n\nBitte geben sie jetzt eine der folgenden Optionen an!");
    57. printf("\n");
    58. printf("\n\n\t[1] Eine weitere Nachricht an diesen Computer senden ");
    59. printf("\n\n\t[2] Eine Nachricht an einen anderen Computer senden ");
    60. printf("\n\n\t[3] Net-Mail jetzt Beenden ");
    61. printf("\n\n\t");
    62. }
    Alles anzeigen
  • Neues Nachrichten Programm

    Hallo alle miteinander,

    ich hatte ja hier vor ner weile mal mein Problem mit diesem Programm geschieldert und mir wurde auch super gut geholfen!

    Nun wollte ich dieses Programm mal so verändern, das es in einem Windows Fenster läuft und nicht mehr in der Konsole. Von der Fensterprogrammierung habe ich allerdings leider noch nicht so viel Ahnung und könnte deshalb noch mal eure Hilfe gebrauchen.

    Das Programm soll ja im Prinzip das selbe machen wie vorher auch, nämlich über das Netzwerk Nachrichten versenden.
    Ich hab mir das so gedacht, Ein Textfeld für die IP Adresse bzw. für den Computernamen und ein Textfeld für die Nachricht und ein Button zum Senden!

    Wie würdedt ihr das realisieren?
  • Wenn ich mit meinem Compiler ein fenster generiere, dan hab ich erst mal diesen Code fürs Fenster vorgegeben!



    Quellcode

    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <conio.h>
    4. #include <stdlib.h>
    5. #include <string.h>
    6. /* Declare Windows procedure */
    7. LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
    8. /* Make the class name into a global variable */
    9. char szClassName[ ] = "WindowsApp";
    10. int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
    11. {
    12. HWND hwnd; /* This is the handle for our window */
    13. MSG messages; /* Here messages to the application are saved */
    14. WNDCLASSEX wincl; /* Data structure for the windowclass */
    15. /* The Window structure */
    16. wincl.hInstance = hThisInstance;
    17. wincl.lpszClassName = szClassName;
    18. wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
    19. wincl.style = CS_DBLCLKS; /* Catch double-clicks */
    20. wincl.cbSize = sizeof(WNDCLASSEX);
    21. /* Use default icon and mouse-pointer */
    22. wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    23. wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    24. wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    25. wincl.lpszMenuName = NULL; /* No menu */
    26. wincl.cbClsExtra = 0; /* No extra bytes after the window class */
    27. wincl.cbWndExtra = 0; /* structure or the window instance */
    28. /* Use light-gray as the background of the window */
    29. wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
    30. /* Register the window class, if fail quit the program */
    31. if(!RegisterClassEx(&wincl)) return 0;
    32. /* The class is registered, let's create the program*/
    33. hwnd = CreateWindowEx(
    34. 0, /* Extended possibilites for variation */
    35. szClassName, /* Classname */
    36. "Net Mail 2.0", /* Title Text */
    37. WS_OVERLAPPEDWINDOW, /* default window */
    38. CW_USEDEFAULT, /* Windows decides the position */
    39. CW_USEDEFAULT, /* where the window ends up on the screen */
    40. 544, /* The programs width */
    41. 375, /* and height in pixels */
    42. HWND_DESKTOP, /* The window is a child-window to desktop */
    43. NULL, /* No menu */
    44. hThisInstance, /* Program Instance handler */
    45. NULL /* No Window Creation data */
    46. );
    47. /* Make the window visible on the screen */
    48. ShowWindow(hwnd, nFunsterStil);
    49. /* Run the message loop. It will run until GetMessage( ) returns 0 */
    50. while(GetMessage(&messages, NULL, 0, 0))
    51. {
    52. /* Translate virtual-key messages into character messages */
    53. TranslateMessage(&messages);
    54. /* Send message to WindowProcedure */
    55. DispatchMessage(&messages);
    56. }
    57. /* The program return-value is 0 - The value that PostQuitMessage( ) gave */
    58. return messages.wParam;
    59. }
    60. /* This function is called by the Windows function DispatchMessage( ) */
    61. LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    62. {
    63. switch (message) /* handle the messages */
    64. {
    65. case WM_DESTROY:
    66. PostQuitMessage(0); /* send a WM_QUIT to the message queue */
    67. break;
    68. default: /* for messages that we don't deal with */
    69. return DefWindowProc(hwnd, message, wParam, lParam);
    70. }
    71. return 0;
    72. }
    Alles anzeigen


    Wie muss ich jetzt weiter vor gehen?
  • Erst mal muss du dich jetzt entscheiden ob du das Fenster mit direckten API-Calls verwalten willst oder dafür eine Bibliotek (QT, GTK, MFC, VCL(?), ...) einsetzen willst.

    Auserdem wäre eine Information über deine Entwicklungsumgebung nicht schlecht
    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)
  • Ich hab das mit dem MFC-Support ja auch mal aus probiert, aber viel weiter wie bis zu dem Aussehen des Dialogfeldes und den Buttons binn ich damit aber auch nicht gekommen. Das Problem ist ja ihm bei zu bringen was er mit den Buttons und Textfeldern machen soll!

    MFC-Support erstellt ja als erstes wieder ne ganze Menge Dateien und da muss man ja erst mal wieder durchblicken wie jetzt was zusammenhängt!
  • Da wirst du wohl nicht drum rum kommen, wenn du Fenster verwenden willst.

    Ist eine deutlich kompliziertere Sache wie Consolenanwendungen.

    (Jedenfalls habe ich außerhalb von Delphi noch nichts gesehen das das leicht macht.)
    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)