2016-07-11 23 views
1

Ich wollte ein Word 'corrupter' erstellen, das tatsächlich einige Buchstaben durch ein Ascii-Alphabet ersetzt. Wenn jedoch die ‚Generate‘ Taste gedrückt wird, schließt sich das Fenster automatischC Win32: Fenster schließt sich automatisch

static HANDLE ghInstance; 

HWND hwndEDIT; 
int index[10]; 

static INT_PTR CALLBACK MainDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) 
{ 
    switch (uMsg) 
    { 
     case WM_INITDIALOG: 
     { 
      hwndEDIT = GetWindow(hwndDlg, IDC_EDIT); 

      return TRUE; 
     } 

     case WM_SIZE: 
      /* 
      * TODO: Add code to process resizing, when needed. 
      */ 
      return TRUE; 

     case WM_COMMAND: 
      switch (GET_WM_COMMAND_ID(wParam, lParam)) 
      { 
       case IDC_GENERATE: 
       { 
        char input[1000]; 
        char output[1000][10]; 

        int i, strLength, m, map; 
        int rNmb; 
        int chance; 

        GetWindowText(hwndEDIT, input, 1000); 

        srand(time(NULL)); 

        strLength = strlen(input); 

        for(m=0;m<10;m++) 
        { 
         map = 0; 
         strcpy(output[m], input); 
         for(i=0;i<strLength;i++) 
         { 
          switch(output[m][i]) 
          { 
           case '\0': 
            continue; 

           case '\n': 
            continue; 

           case ' ': 
            continue; 
          } 

          chance = rand() % 100; 

          if(chance < 25) 
          { 
           rNmb = (rand() % 128) + 128; 

           output[m][i] = rNmb; 
          } 
         } 
         index[m] = SendDlgItemMessage(hwndDlg , IDC_LISTBOX, LB_ADDSTRING, 0, (LPARAM)output[m]); 

         map++; 
         SendDlgItemMessage(hwndDlg, IDC_LISTBOX, LB_SETITEMDATA, (WPARAM)index[m], (LPARAM)map); 
        } 
       } 
       case IDC_CLOSE: 
        EndDialog(hwndDlg, TRUE); 
        return TRUE; 
      } 
      break; 

     case WM_CLOSE: 
      EndDialog(hwndDlg, 0); 
      return TRUE; 

     /* 
     * TODO: Add more messages, when needed. 
     */ 
    } 

    return FALSE; 
} 

Ich sehe keine Verbindung zwischen dem Knopf erzeugen und den Befehl Schließen

+3

Der Fall 'IDC_GENERATE' fällt auf den Fall 'IDC_CLOSE'. Switch-Blöcke fallen durch, wenn Sie nicht explizit brechen oder zurückkehren. –

+2

keine Pause; nach Groß-/Kleinschreibung IDC_GENERATE: als Ergebnis führen Sie die Groß-/Kleinschreibung aus IDC_CLOSE: EndDialog (hwndDlg, TRUE); – RbMm

+0

Hey, du hast vor kurzem [eine Verbesserungsanfrage für diese Dokumentation gestellt] (http://stackoverflow.com/documentation/improvement-requests/view/2256/7403). Da es keine Möglichkeit gibt, Kommentare zu schreiben oder mit Ihnen über die Benutzeroberfläche von Docs zu kommunizieren, missbrauche ich Kommentare, um es hier zu tun. Kannst du mir einen Hinweis geben, was du mit dem Beispielcode falsch findest? Insbesondere, auf welche Weise ist es unklar oder unvollständig? (Es hat offensichtlich keine Formatierungsprobleme.) Was möchten Sie sonst noch sehen? Ich habe die Einreichung überprüft und es erscheint mir vernünftig. Hast du den Code getestet und herausgefunden, dass er nicht funktioniert? –

Antwort

4

Sie verpassen eine break-Anweisung.

Der Fall case IDC_GENERATE direkt in Stürzen:

case IDC_CLOSE: 
    EndDialog(hwndDlg, TRUE); 
    return TRUE; 

Sie können Funktionen verwenden, um den Code lesbar zu machen, und diese Fehler wahrscheinlich gefangen werden würden.

+1

Ich mag die letzte Zeile. Mit einer Umgestaltung der Fälle in separate Funktionen wäre die Tatsache, dass "break" fehlt, in der Tat sichtbarer. Sehr lange Funktionen sind immer schwer zu lesen. –

Verwandte Themen