Anfänger - Programm funktioniert, aber....



  • Hallo,
    Ich bin noch ziemlich am Anfang mit C++ und lerne gerade WIN32. Mein Programm funktioniert, hat aber ein paar kleine Schönheitsfehler.
    1)
    Ich möchte Wissen weshalb mein Programm nur den ersten Buchstaben im Titel ausgibt.
    2)
    Wenn ich den Datei Open Dialog öffne, diesen aber ohne Dateiauswahl wieder schliesse, habe ich in meinem Textfeld komische Zeichen.
    3)
    Wenn ich eine Datei Speichern will muss ich im File Save Dialog hinter dem dateinamen auch die Dateiendung eingeben sonst speichert es mir die Dtei gar nicht. Obwohl die Endung bereits festgelegt ist.

    Hier der Code. Compiliert mit der BLOCKS::IDE funtioniert bei mir. (evtl. muss beim projektsetting noch im linker die libcomdlg32.a eingebunden werden)

    Lieben Dank für gute Tips.

    #include <tchar.h>
    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    #define FILE_MENU_NEW 1
    #define FILE_MENU_OPEN 2
    #define FILE_MENU_SAVE 3
    #define FILE_MENU_EXIT 4
    #define GENERATE_BUTTON 5
    #define OPEN_FILE_BUTTON 6
    #define SAVE_FILE_BUTTON 7
    #define FILE_MENU_INFO 8
    
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    void AddMenus(HWND);
    void AddControls(HWND);
    void loadImages();
    void registerDialogClass(HINSTANCE);
    void displayDialog(HWND);
    
    HWND hName,hAge,hOut,hLogo, hMemo;
    HMENU hMenu;
    HBITMAP hLogoImage, hGenerateImage;
    
    
    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR args, int ncmdshow)
    {
       WNDCLASSW wc = {0};
    
       wc.hbrBackground = (HBRUSH)COLOR_WINDOW ;
       wc.hCursor = LoadCursor(NULL, IDC_ARROW);
       wc.hInstance = hInst;
       wc.lpszClassName = L"myWindowClass";
       wc.lpfnWndProc = WindowProcedure;
    
       if (!RegisterClassW(&wc))
    
          return -1;
    
       registerDialogClass(hInst);
    
       CreateWindowW(L"myWindowClass", L"My Window", WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,900,600,NULL,NULL,NULL,NULL);
    
       MSG msg ={0};
    
       while ( GetMessageW(&msg,NULL,0,0))
       {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
    
       return 0;
    }
    
    
    void display_file(char* path)
    {
       FILE *file;
       file = fopen(path,"rb");
       fseek(file,0,SEEK_END);
       int _size = ftell(file);
       rewind(file);
       char *data = new char[_size+1];
       fread(data,_size,1,file);
       data[_size]= '\0';
       SetWindowText(hMemo,data);
       fclose(file);
    }
    
    void openFile(HWND hwnd)
    {
       OPENFILENAME ofn;
       char file_name[100];
    
       ZeroMemory(&ofn,sizeof(OPENFILENAME));
       ofn.lStructSize = sizeof(OPENFILENAME);
       ofn.hwndOwner = hwnd;
       ofn.lpstrFile = file_name;
       ofn.lpstrFile[0] = '\0';
       ofn.nMaxFile = 100;
       ofn.lpstrFilter = "All Files\0*.*\0Text Files\0*.TXT\0";
       ofn.nFilterIndex =2;
       GetOpenFileName(&ofn);
       display_file(ofn.lpstrFile);
    
    }
    
    void write_file(char* path)
    {
       FILE *file;
       file = fopen(path,"w");
       int _size = GetWindowTextLength(hMemo);
       char *data = new char[_size+1];
       GetWindowText(hMemo,data,_size+1);
       fwrite(data,_size+1,1,file);
       fclose(file);
    }
    
    void save_file(HWND hwnd)
    {
       OPENFILENAME ofn;
       char file_name[100];
    
       ZeroMemory(&ofn,sizeof(OPENFILENAME));
       ofn.lStructSize = sizeof(OPENFILENAME);
       ofn.hwndOwner = hwnd;
       ofn.lpstrFile = file_name;
       ofn.lpstrFile[0] = '\0';
       ofn.nMaxFile = 100;
       ofn.lpstrFilter = "All Files\0*.*\0Text Files\0*.TXT\0";
       ofn.nFilterIndex =2;
       GetSaveFileName(&ofn);
       write_file(ofn.lpstrFile);
    
    }
    
    
    
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
       int val;
        switch (message)                  /* handle the messages */
        {
          case WM_COMMAND:
    
             switch(wParam)
             {
             case FILE_MENU_NEW:
                MessageBeep(MB_OK);
             break;
    
             case FILE_MENU_OPEN:
                openFile(hwnd);
             break;
    
             case FILE_MENU_SAVE:
                save_file(hwnd);
             break;
    
             case FILE_MENU_INFO:
                displayDialog(hwnd);
             break;
    
             case SAVE_FILE_BUTTON:
                   save_file(hwnd);
             break;
    
             case FILE_MENU_EXIT:
             val = MessageBoxW(hwnd, L"Are you sure?",L"Wait", MB_YESNO| MB_ICONEXCLAMATION);
             if(val==IDYES)
             {
                DestroyWindow(hwnd);
             }
             else {
                // do nothing
             }
             break;
             case GENERATE_BUTTON:
             char name[30], age[10], out[50];
             GetWindowText(hName, name,30);
             GetWindowText(hAge, age,10);
             if(strcmp(name,"")==0 || strcmp(age,"")==0)
             {
             val =  MessageBoxW(hwnd, L"You did enter nothing", NULL, MB_ABORTRETRYIGNORE|MB_ICONERROR);
             switch(val)
                {
               case IDABORT:
                DestroyWindow(hwnd);
                break;
               case IDRETRY:
                return 0;
                break;
               case IDIGNORE:
                break;
                }
             }
             strcpy(out, name);
             strcat(out, " is ");
             strcat(out, age);
             strcat(out, " Years old ");
    
             SetWindowText(hOut,out);
             break;
             }
          break;
    
          case WM_CREATE:  // Loads the Content in Created Window
    
          loadImages();     // images MUST ALWAYS be loaded BEFORE controls!!
          AddMenus(hwnd);
          AddControls(hwnd);
          break;
    
          case WM_DESTROY:
                PostQuitMessage (0);       // send a WM_QUIT to the message queue */
                break;
          default:
                return DefWindowProc (hwnd, message, wParam, lParam);
    
          case WM_KEYDOWN:	//For a key down
     	  	//if escape key was pressed, display popup box
    		if( wParam == VK_ESCAPE ){
    			if(MessageBox(0, "Are you sure you want to exit?",
                   	"Really?", MB_YESNO | MB_ICONQUESTION) == IDYES)
    
        	       	//Release the windows allocated memory
    				DestroyWindow(hwnd);
    		}
        }
        return 0;
    }
    
    void AddMenus(HWND hwnd)
    {
       hMenu = CreateMenu();
       HMENU hFileMenu1 = CreateMenu();
       HMENU hFileMenu2 = CreateMenu();
       HMENU hSubMenu1 = CreateMenu();
       HMENU hSubMenu2 = CreateMenu();
    
    
    
       // first menu row
       AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hFileMenu1,"File");
       AppendMenu(hFileMenu1, MF_STRING,FILE_MENU_NEW, "New");
       AppendMenu(hFileMenu1, MF_POPUP,FILE_MENU_OPEN, "Open File");
       AppendMenu(hFileMenu1, MF_POPUP,(UINT_PTR)hSubMenu2 , "Open Submenu 2");
       AppendMenu(hFileMenu1, MF_STRING,FILE_MENU_SAVE, "Save");
       AppendMenu(hFileMenu1, MF_SEPARATOR, NULL, NULL);
       AppendMenu(hFileMenu1, MF_STRING,FILE_MENU_EXIT, "Exit");
       // the sub menus for 1 row
       AppendMenu(hSubMenu1, MF_STRING,NULL, "Sub Menu Item 1");
       AppendMenu(hSubMenu1, MF_STRING,NULL, "Sub Menu Item 2");
    
       AppendMenu(hSubMenu2, MF_STRING,NULL, "Sub Menu Item 1");
       AppendMenu(hSubMenu2, MF_STRING,NULL, "Sub Menu Item 2");
    
    
       // second menu row
       AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hFileMenu2,"Options");
       AppendMenu(hFileMenu2, MF_STRING,NULL, "Options");
    
    
       // third menu row
       AppendMenu(hMenu, MF_STRING, FILE_MENU_INFO,"Info");
    
       SetMenu(hwnd, hMenu);
    }
    
    void AddControls(HWND hwnd)
    {
    
                CreateWindowW(L"STATIC", L"Name:", WS_VISIBLE|WS_CHILD,100,55,98,38,hwnd,NULL,NULL,NULL);
       hName =  CreateWindowW(L"EDIT", L"", WS_VISIBLE|WS_CHILD | WS_BORDER,200,50,98,25,hwnd,NULL,NULL,NULL);
                CreateWindowW(L"STATIC", L"Age:", WS_VISIBLE|WS_CHILD,100,85,98,38,hwnd,NULL,NULL,NULL);
       hAge =   CreateWindowW(L"EDIT", L"", WS_VISIBLE|WS_CHILD | WS_BORDER,200,80,98,25,hwnd,NULL,NULL,NULL);
    
       // Orig Button
       //HWND hBut = CreateWindowW(L"BUTTON", L"Generate", WS_VISIBLE|WS_CHILD | WS_BORDER,100,120,98,25,hwnd,(HMENU)GENERATE_BUTTON,NULL,NULL);
    
       // Img Button
       HWND hBut = CreateWindowW(L"BUTTON", NULL, WS_VISIBLE|WS_CHILD|BS_BITMAP,100,120,98,25,hwnd,(HMENU)GENERATE_BUTTON,NULL,NULL);
    
       SendMessageW(hBut, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hGenerateImage);
    
                CreateWindowW(L"BUTTON", L" Entry Data ", WS_VISIBLE|WS_CHILD | BS_GROUPBOX,20,10,450,230,hwnd,NULL,NULL,NULL);
       hOut =   CreateWindowW(L"EDIT", L"", WS_VISIBLE|WS_CHILD | WS_BORDER,40,160,400,30,hwnd,NULL,NULL,NULL);
       hLogo =  CreateWindowW(L"STATIC", NULL, WS_VISIBLE|WS_CHILD|SS_BITMAP,500,20,367,300,hwnd,NULL,NULL,NULL);
       SendMessageW(hLogo, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hLogoImage);
    
       // teil 3 - open dialog etc
       hMemo = CreateWindowW(L"EDIT", L"...", WS_VISIBLE|WS_CHILD|WS_BORDER|ES_MULTILINE|WS_VSCROLL|WS_HSCROLL,20,250,450,250,hwnd,NULL,NULL,NULL);
       CreateWindowW(L"BUTTON", L" Save ", WS_VISIBLE|WS_CHILD,500,450,100,50,hwnd,(HMENU)SAVE_FILE_BUTTON,NULL,NULL);
    
    
    }
    
    void loadImages()
    {
       hLogoImage = (HBITMAP)LoadImageW(NULL, L"randy1.bmp", IMAGE_BITMAP, 367, 300, LR_LOADFROMFILE);
       hGenerateImage = (HBITMAP)LoadImageW(NULL, L"b_button.bmp", IMAGE_BITMAP, 98,25, LR_LOADFROMFILE);
    }
    
    LRESULT CALLBACK DialogProcedure(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
    {
       switch(msg)
       {
       case WM_COMMAND:
       switch(wp)
       {
       case 1:
          DestroyWindow(hwnd);
          break;
    
       }
       break;
       case WM_CLOSE:
       DestroyWindow(hwnd);
       break;
    
       default:
          return DefWindowProcW(hwnd,msg,wp,lp);
       }
    }
    
    void registerDialogClass(HINSTANCE hThisInstance)
    {
       WNDCLASSW dialog = {0};
       dialog.hbrBackground = (HBRUSH)COLOR_WINDOW;
       dialog.hCursor = LoadCursor(NULL,IDC_CROSS);
       dialog.hInstance = hThisInstance;
       dialog.lpszClassName = L"myDialogClass";
       dialog.lpfnWndProc = DialogProcedure;
    
       RegisterClassW(&dialog);
    
    }
    
    void displayDialog(HWND hwnd)
    {
       HWND hDlg = CreateWindowW(L"myDialogClass", L"Info",WS_VISIBLE|WS_OVERLAPPEDWINDOW, 400,400,300,300,(hwnd),NULL,NULL,NULL);
       CreateWindowW(L"BUTTON",L"Close",WS_VISIBLE|WS_CHILD,80,180,100,28,hDlg, (HMENU)1,NULL,NULL);
       CreateWindowW(L"STATIC",L"Info\n\nMy First Win32 Program\nWritten in C++",WS_VISIBLE|WS_CHILD,20,20,300,300,hDlg, (HMENU)1,NULL,NULL);
    }
    
    
    


  • Ich habe das mal mit Visual Studio kompiliert und das brach mit vielen Fehlern ab. Hier scheint das Hauptproblem zu sein, dass die Datentypen nicht passen. Versuche mal alles von wide chars auf chars umzumodeln und achte darauf dass du den Methoden den Datentyp gibst den sie verlangen.

    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(68,27): error C2664:  'BOOL SetWindowTextW(HWND,LPCWSTR)': cannot convert argument 2 from 'char *' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(68,23): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(61,1): error C4996:  'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\stdio.h(208): message :  see declaration of 'fopen'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(80,27): error C2440:  '=': cannot convert from 'char [100]' to 'LPWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(80,18): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(83,57): error C2440:  '=': cannot convert from 'const char [32]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(83,20): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(86,28): error C2664:  'void display_file(char *)': cannot convert argument 1 from 'LPWSTR' to 'char *'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(86,18): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(96,38): error C2664:  'int GetWindowTextW(HWND,LPWSTR,int)': cannot convert argument 2 from 'char *' to 'LPWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(96,23): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(93,1): error C4996:  'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\stdio.h(208): message :  see declaration of 'fopen'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(109,27): error C2440:  '=': cannot convert from 'char [100]' to 'LPWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(109,18): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(112,57): error C2440:  '=': cannot convert from 'const char [32]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(112,20): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(115,26): error C2664:  'void write_file(char *)': cannot convert argument 1 from 'LPWSTR' to 'char *'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(115,16): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(163,33): error C2664:  'int GetWindowTextW(HWND,LPWSTR,int)': cannot convert argument 2 from 'char [30]' to 'LPWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(163,25): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(164,31): error C2664:  'int GetWindowTextW(HWND,LPWSTR,int)': cannot convert argument 2 from 'char [10]' to 'LPWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(164,24): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(185,27): error C2664:  'BOOL SetWindowTextW(HWND,LPCWSTR)': cannot convert argument 2 from 'char [50]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(185,24): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(206,8): error C2664:  'int MessageBoxW(HWND,LPCWSTR,LPCWSTR,UINT)': cannot convert argument 2 from 'const char [31]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(206,22): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(180,1): error C4996:  'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\string.h(133): message :  see declaration of 'strcpy'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(181,1): error C4996:  'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\string.h(90): message :  see declaration of 'strcat'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(182,1): error C4996:  'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\string.h(90): message :  see declaration of 'strcat'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(183,1): error C4996:  'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
    1>C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\string.h(90): message :  see declaration of 'strcat'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(227,58): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [5]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(227,52): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(228,56): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [4]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(228,51): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(229,62): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [10]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(229,51): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(230,72): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [15]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(230,56): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(231,58): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [5]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(231,52): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(233,58): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [5]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(233,52): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(235,58): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [16]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(235,41): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(236,58): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [16]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(236,41): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(238,58): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [16]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(238,41): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(239,58): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [16]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(239,41): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(243,61): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [8]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(243,52): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(244,51): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [8]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(244,42): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(248,53): error C2664:  'BOOL AppendMenuW(HMENU,UINT,UINT_PTR,LPCWSTR)': cannot convert argument 4 from 'const char [5]' to 'LPCWSTR'
    1>C:\Users\User\source\repos\WindowsProject1\WindowsProject1.cpp(248,47): message :  Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    1>Done building project "WindowsProject1.vcxproj" -- FAILED.
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
    


  • Verwende entweder die A-Funktionen mit chars, die W-Varianten mit WCHARs oder aber die normalen mit TCHARs und dem TEXT-Makro.
    Dann kannst du auch für beide Konfigurationen (Multibyte und UNICODE) kompilieren und bekommst nicht die Fehler wie @chris4cpp (der für UNICODE kompiliert hat).

    Zu 2:

    void save_file(HWND hwnd)
    {
      ....
       if(GetSaveFileName(&ofn)) // Returnwert prüfen
         write_file(ofn.lpstrFile);
    }
    

    Edit: Falsche Funktion (gilt aber natürlich trotzdem). Hier mit open:

    void openFile(HWND hwnd)
    {
       ....
       if(GetOpenFileName(&ofn))
         display_file(ofn.lpstrFile);
    
    }
    

    Du hast allerdings mehrere Speicherlecks (new ohne delete[]). Nimm jeweils std::vector<char> und du bist die Probleme auf einen Schlag los:

    void display_file(const char* path) // sollte const char* sein
    {
       FILE *file = fopen(path,"rb");
       // Überprüfung, ob das Öffnen geklappt hat, fehlt
       fseek(file,0,SEEK_END);
       int _size = ftell(file);
       rewind(file);
       std::vector<char> data(_size+1);
       fread(data.data(),_size,1,file); 
       // Überprüfung fehlt
       SetWindowTextA(hMemo,data.data()); // hier entweder A-Variante oder bei UNICODE nach TCHAR (also in dem Fall wchar_t) umformen und  SetWindowText nehmen.
       fclose(file);
      // Freigabe automatisch
    }
    

    Bei write_file hast du das gleiche Problem.
    Du kannst dir natürlich auch mal die C++-Streams anschauen.

    Bei 3 musst du eben nachschauen, ob die Dateiendung passt und sie ggf. selbst anhängen. „Alle Dateien” können auch gewählt werden. Was soll bei keiner Dateiendung passieren oder wenn die (existierende) Datei „1.jpg” ausgewählt wurde?
    Der Common Item Dialog wurde mittlerweile auch als Ersatz für den alten Dialog geschaffen.



  • @chris4cpp sagte in Anfänger - Programm funktioniert, aber....:

    Ich habe das mal mit Visual Studio kompiliert und das brach mit vielen Fehlern ab

    Bei mir kompiliert das ungeändert ohne Probleme aus der Konsole mit:

    cl /EHsc prog.cpp user32.lib comdlg32.lib
    

    Eine Warnung gibts allerdings:
    warning C4715: "DialogProcedure": Nicht alle Steuerelementpfade geben einen Wert zurück.



  • Hallo Belli, ich nutze die IDE CODEBLOCKS zum kompilieren. dort musste ich folgendes tun: Menue ->Project->Build Options->dort den tab "Linker Settings" wähen. Danach im Feld Link Libraries auf Add klicken und im Ordner \CodeBlocks\MinGW\lib\ die datei "libcomdlg32.a" zum projekt hinzufügen. Kann sein dass es bei Dir comdlg32.lib heisst. Das wäre ebenfalls richtig.
    Bevor ich diese lib nicht hinzugefügt hatte, hat mein compiler auch den DialogProcedure error gebracht.
    In Visual STudio 2019 hab ich es gar nicht erst versucht. Es scheint dass VS schon minikleinste fehler bestraft und codeblocks dazu nur "na ja, ich mach mal aber..." macht.

    Hallo Yahendrik,
    Mega. Lieben Dank für Deinen Input. Was ich in Deinem Text lese habe ich alles schon mal in weiter ferne gehört, ist aber total Bahnhof für mich. Du schreibst std::vector<char> Als ich die ersten consolenprogrämmchen gelernt hab, hat mir mal einer gesagt dass das std:: mit dem #include<window.h> unter C++ wegfällt?
    Wenn ich den kleinen von dir korrigierten block einsetze habe ich einen compilerfehler. Dieser sagt mir :

    ||=== Build: Debug in create_window (compiler: GNU GCC Compiler) ===|
    H:\Programmieren\cpp\win32_tut0\main.cpp||In function 'void display_file(const char*)':|
    H:\Programmieren\cpp\win32_tut0\main.cpp|65|error: 'vector' is not a member of 'std'|
    H:\Programmieren\cpp\win32_tut0\main.cpp|65|error: expected primary-expression before 'char'|
    H:\Programmieren\cpp\win32_tut0\main.cpp|66|error: 'data' was not declared in this scope|
    H:\Programmieren\cpp\win32_tut0\main.cpp||In function 'void AddMenus(HWND)':|

    Ich lese die antworten nochmal genau durch und schaue mal.....
    Melde mich wieder. Vielen Dank



  • @yahendrik sagte in Anfänger - Programm funktioniert, aber....:

    if(GetOpenFileName(&ofn))
    display_file(ofn.lpstrFile);

    Das Funktioniert. Keine komischen Zeichen mehr. Allerdings muss ich jetzt zweimal jeweils im Dialog auf Öffnen oder Save drücken, sonst geht der Dialog nicht zu.... das find ich jetzt nicht so...



  • Dafür mußt du auch den passenden Header einbinden:

    #include <vector>
    

    Und std:: mußt du nur davorschreiben, wenn du nicht explizit per using namespace std; den Namensbereich global verfügbar gemacht hast (das using namespace std; aber nur in Sourcedateien verwenden, niemals in Headerdateien).

    Außerdem ist C4715 eine Warnung, kein expliziter Compiler-Fehler. Jedoch solltest du, gerade als Anfänger, alle Warnungen wie einen Fehler behandeln, d.h. verstehen und eliminieren.
    Bei CodeBlocks hast du wahrscheinlich die Warnstufe nicht hoch genug für den Compiler eingestellt.



  • @Th69 Danke. Das hab ich grad eben auch herausgefunden. Hab Vector nun eingebunden und der gesammte korrigierte block funzt jetzt ohne probleme.

    #include <tchar.h>
    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include<cstring>
    #include <vector>

    #define FILE_MENU_NEW 1
    #define FILE_MENU_OPEN 2
    #define FILE_MENU_SAVE 3
    #define FILE_MENU_EXIT 4
    #define GENERATE_BUTTON 5
    #define OPEN_FILE_BUTTON 6
    #define SAVE_FILE_BUTTON 7
    #define FILE_MENU_INFO 8
    using namespace std;
    using std::vector;

    allerdings muss ich im dialog immer noch 2x auf öffnen (oder abbrechen) klicken damit der dialog schliesst....
    ich komme der sache dank eurer hilfe näher.

    und was mach ich falsch beim windows titel? da bin ich völlig im schilf. ich hab die sache mit einem anderen tutorial verglichen welches ich nachgebaut hab und dort funktioniert es. hab keinen unterschied gefunden.



  • @Th69 sagte in Anfänger - Programm funktioniert, aber....:

    Außerdem ist C4715 eine Warnung, kein expliziter Compiler-Fehler. Jedoch solltest du, gerade als Anfänger, alle Warnungen wie einen Fehler behandeln, d.h. verstehen und eliminieren.

    :daumenhoch:

    Bei CodeBlocks hast du wahrscheinlich die Warnstufe nicht hoch genug für den Compiler eingestellt.
    ooh...kann man das? muss ich mal nachsehen wo man das einstellt.



  • hier der komplette code, so wie er JETZT nach div korrekturen dasteht (dank eurer hilfe - geile sache!! bin total dankbar)

    #include <tchar.h>
    #include <windows.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include<cstring>
    #include <vector>
    
    
    #define FILE_MENU_NEW 1
    #define FILE_MENU_OPEN 2
    #define FILE_MENU_SAVE 3
    #define FILE_MENU_EXIT 4
    #define GENERATE_BUTTON 5
    #define OPEN_FILE_BUTTON 6
    #define SAVE_FILE_BUTTON 7
    #define FILE_MENU_INFO 8
    using namespace std;
    using std::vector;
    
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    void AddMenus(HWND);
    void AddControls(HWND);
    void loadImages();
    void registerDialogClass(HINSTANCE);
    void displayDialog(HWND);
    
    HWND hName,hAge,hOut,hLogo, hMemo;
    HMENU hMenu;
    HBITMAP hLogoImage, hGenerateImage;
    
    
    int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR args, int ncmdshow)
    {
       WNDCLASSW wc = {0};
    
       wc.hbrBackground = (HBRUSH)COLOR_WINDOW ;
       wc.hCursor = LoadCursor(NULL, IDC_ARROW);
       wc.hInstance = hInst;
       wc.lpszClassName = L"myWindowClass";
       wc.lpfnWndProc = WindowProcedure;
    
       if (!RegisterClassW(&wc))
    
          return -1;
    
       registerDialogClass(hInst);
    
       CreateWindowW(L"myWindowClass", L"My Window", WS_OVERLAPPEDWINDOW|WS_VISIBLE,0,0,900,600,NULL,NULL,NULL,NULL);
    
       MSG msg ={0};
    
       while ( GetMessageW(&msg,NULL,0,0))
       {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
    
       return 0;
    }
    
    
    void display_file(const char* path)
    {
       FILE *file = fopen(path,"rb");
       fseek(file,0,SEEK_END);
       int _size = ftell(file);
       rewind(file);
       std::vector<char> data(_size+1);
       fread(data.data(),_size,1,file);
       SetWindowTextA(hMemo,data.data());
       fclose(file);
    }
    
    void openFile(HWND hwnd)
    {
       OPENFILENAME ofn;
       char file_name[100];
    
       ZeroMemory(&ofn,sizeof(OPENFILENAME));
       ofn.lStructSize = sizeof(OPENFILENAME);
       ofn.hwndOwner = hwnd;
       ofn.lpstrFile = file_name;
       ofn.lpstrFile[0] = '\0';
       ofn.nMaxFile = 100;
       ofn.lpstrFilter = "All Files\0*.*\0Text Files\0*.TXT\0";
       ofn.nFilterIndex =1;
       GetOpenFileName(&ofn);
        if(GetOpenFileName(&ofn))
         display_file(ofn.lpstrFile);
    
    }
    
    void write_file(char* path)
    {
    
       FILE *file = fopen(path,"w");
       int _size = GetWindowTextLength(hMemo);
       char *data = new char[_size+1];
       GetWindowText(hMemo,data,_size+1);
       fwrite(data,_size+1,1,file);
       fclose(file);
    }
    
    void save_file(HWND hwnd)
    {
       OPENFILENAME ofn;
       char file_name[100];
    
       ZeroMemory(&ofn,sizeof(OPENFILENAME));
       ofn.lStructSize = sizeof(OPENFILENAME);
       ofn.hwndOwner = hwnd;
       ofn.lpstrFile = file_name;
       ofn.lpstrFile[0] = '\0';
       ofn.nMaxFile = 100;
       ofn.lpstrFilter = "All Files\0*.*\0Text Files\0*.TXT\0";
       ofn.nFilterIndex =2;
       GetSaveFileName(&ofn);
       if(GetSaveFileName(&ofn)) // Returnwert prüfen?
         write_file(ofn.lpstrFile);
    
    }
    
    
    
    
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
       int val;
        switch (message)
        {
          case WM_COMMAND:
    
             switch(wParam)
             {
             case FILE_MENU_NEW:
                MessageBeep(MB_OK);
             break;
    
             case FILE_MENU_OPEN:
                openFile(hwnd);
             break;
    
             case FILE_MENU_SAVE:
                save_file(hwnd);
             break;
    
             case FILE_MENU_INFO:
                displayDialog(hwnd);
             break;
    
             case SAVE_FILE_BUTTON:
                   save_file(hwnd);
             break;
    
             case FILE_MENU_EXIT:
             val = MessageBoxW(hwnd, L"Are you sure?",L"Wait", MB_YESNO| MB_ICONEXCLAMATION);
             if(val==IDYES)
             {
                DestroyWindow(hwnd);
             }
             else {
                // do nothing
             }
             break;
             case GENERATE_BUTTON:
             char name[30], age[10], out[50];
             GetWindowText(hName, name,30);
             GetWindowText(hAge, age,10);
             if(strcmp(name,"")==0 || strcmp(age,"")==0)
             {
             val =  MessageBoxW(hwnd, L"You did enter nothing", NULL, MB_ABORTRETRYIGNORE|MB_ICONERROR);
             switch(val)
                {
               case IDABORT:
                DestroyWindow(hwnd);
                break;
               case IDRETRY:
                return 0;
                break;
               case IDIGNORE:
                break;
                }
             }
             strcpy(out, name);
             strcat(out, " is ");
             strcat(out, age);
             strcat(out, " Years old ");
    
             SetWindowText(hOut,out);
             break;
             }
          break;
    
          case WM_CREATE:  // Loads the Content in Created Window
    
          loadImages();     // images MUST ALWAYS be loaded BEFORE controls!!
          AddMenus(hwnd);
          AddControls(hwnd);
          break;
    
          case WM_DESTROY:
                PostQuitMessage (0);       // send a WM_QUIT to the message queue */
                break;
          default:
                return DefWindowProc (hwnd, message, wParam, lParam);
    
          case WM_KEYDOWN:
    
    		if( wParam == VK_ESCAPE ){
    			if(MessageBox(0, "Are you sure you want to exit?",
                   	"Really?", MB_YESNO | MB_ICONQUESTION) == IDYES)
    				DestroyWindow(hwnd);
    		}
        }
        return 0;
    }
    
    void AddMenus(HWND hwnd)
    {
       hMenu = CreateMenu();
       HMENU hFileMenu1 = CreateMenu();
       HMENU hFileMenu2 = CreateMenu();
       HMENU hSubMenu1 = CreateMenu();
       HMENU hSubMenu2 = CreateMenu();
    
    
    
       // first menu row
       AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hFileMenu1,"File");
       AppendMenu(hFileMenu1, MF_STRING,FILE_MENU_NEW, "New");
       AppendMenu(hFileMenu1, MF_POPUP,FILE_MENU_OPEN, "Open File");
       AppendMenu(hFileMenu1, MF_POPUP,(UINT_PTR)hSubMenu2 , "Open Submenu 2");
       AppendMenu(hFileMenu1, MF_STRING,FILE_MENU_SAVE, "Save");
       AppendMenu(hFileMenu1, MF_SEPARATOR, NULL, NULL);
       AppendMenu(hFileMenu1, MF_STRING,FILE_MENU_EXIT, "Exit");
       // the sub menus for 1 row
       AppendMenu(hSubMenu1, MF_STRING,NULL, "Sub Menu Item 1");
       AppendMenu(hSubMenu1, MF_STRING,NULL, "Sub Menu Item 2");
    
       AppendMenu(hSubMenu2, MF_STRING,NULL, "Sub Menu Item 1");
       AppendMenu(hSubMenu2, MF_STRING,NULL, "Sub Menu Item 2");
    
    
       // second menu row
       AppendMenu(hMenu, MF_POPUP, (UINT_PTR)hFileMenu2,"Options");
       AppendMenu(hFileMenu2, MF_STRING,NULL, "Options");
    
    
       // third menu row
       AppendMenu(hMenu, MF_STRING, FILE_MENU_INFO,"Info");
    
       SetMenu(hwnd, hMenu);
    }
    
    void AddControls(HWND hwnd)
    {
    
                CreateWindowW(L"STATIC", L"Name:", WS_VISIBLE|WS_CHILD,100,55,98,38,hwnd,NULL,NULL,NULL);
       hName =  CreateWindowW(L"EDIT", L"", WS_VISIBLE|WS_CHILD | WS_BORDER,200,50,98,25,hwnd,NULL,NULL,NULL);
                CreateWindowW(L"STATIC", L"Age:", WS_VISIBLE|WS_CHILD,100,85,98,38,hwnd,NULL,NULL,NULL);
       hAge =   CreateWindowW(L"EDIT", L"", WS_VISIBLE|WS_CHILD | WS_BORDER,200,80,98,25,hwnd,NULL,NULL,NULL);
    
       // Orig Button
       //HWND hBut = CreateWindowW(L"BUTTON", L"Generate", WS_VISIBLE|WS_CHILD | WS_BORDER,100,120,98,25,hwnd,(HMENU)GENERATE_BUTTON,NULL,NULL);
    
       // Img Button
       HWND hBut = CreateWindowW(L"BUTTON", NULL, WS_VISIBLE|WS_CHILD|BS_BITMAP,100,120,98,25,hwnd,(HMENU)GENERATE_BUTTON,NULL,NULL);
    
       SendMessageW(hBut, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hGenerateImage);
    
                CreateWindowW(L"BUTTON", L" Entry Data ", WS_VISIBLE|WS_CHILD | BS_GROUPBOX,20,10,450,230,hwnd,NULL,NULL,NULL);
       hOut =   CreateWindowW(L"EDIT", L"", WS_VISIBLE|WS_CHILD | WS_BORDER,40,160,400,30,hwnd,NULL,NULL,NULL);
       hLogo =  CreateWindowW(L"STATIC", NULL, WS_VISIBLE|WS_CHILD|SS_BITMAP,500,20,367,300,hwnd,NULL,NULL,NULL);
       SendMessageW(hLogo, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hLogoImage);
    
       // teil 3 - open dialog etc
       hMemo = CreateWindowW(L"EDIT", L"...", WS_VISIBLE|WS_CHILD|WS_BORDER|ES_MULTILINE|WS_VSCROLL|WS_HSCROLL,20,250,450,250,hwnd,NULL,NULL,NULL);
       CreateWindowW(L"BUTTON", L" Save ", WS_VISIBLE|WS_CHILD,500,450,100,50,hwnd,(HMENU)SAVE_FILE_BUTTON,NULL,NULL);
    
    
    }
    
    void loadImages()
    {
       hLogoImage = (HBITMAP)LoadImageW(NULL, L"img\\randy1.bmp", IMAGE_BITMAP, 367, 300, LR_LOADFROMFILE);
       hGenerateImage = (HBITMAP)LoadImageW(NULL, L"img\\b_button.bmp", IMAGE_BITMAP, 98,25, LR_LOADFROMFILE);
    }
    
    LRESULT CALLBACK DialogProcedure(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
    {
       switch(msg)
       {
       case WM_COMMAND:
       switch(wp)
       {
       case 1:
          DestroyWindow(hwnd);
          break;
    
       }
       break;
       case WM_CLOSE:
       DestroyWindow(hwnd);
       break;
    
       default:
          return DefWindowProcW(hwnd,msg,wp,lp);
       }
    }
    
    void registerDialogClass(HINSTANCE hThisInstance)
    {
       WNDCLASSW dialog = {0};
       dialog.hbrBackground = (HBRUSH)COLOR_WINDOW;
       dialog.hCursor = LoadCursor(NULL,IDC_CROSS);
       dialog.hInstance = hThisInstance;
       dialog.lpszClassName = L"myDialogClass";
       dialog.lpfnWndProc = DialogProcedure;
    
       RegisterClassW(&dialog);
    
    }
    
    void displayDialog(HWND hwnd)
    {
       HWND hDlg = CreateWindowW(L"myDialogClass", L"Info",WS_VISIBLE|WS_OVERLAPPEDWINDOW, 400,400,300,300,(hwnd),NULL,NULL,NULL);
       CreateWindowW(L"BUTTON",L"Close",WS_VISIBLE|WS_CHILD,80,180,100,28,hDlg, (HMENU)1,NULL,NULL);
       CreateWindowW(L"STATIC",L"Info\n\nMy First Win32 Program\nWritten in C++",WS_VISIBLE|WS_CHILD,20,20,300,300,hDlg, (HMENU)1,NULL,NULL);
    }
    
    
    


  • @peroja sagte in Anfänger - Programm funktioniert, aber....:

    GetOpenFileName(&ofn);
    if(GetOpenFileName(&ofn))
        display_file(ofn.lpstrFile);
    

    Du darfst natürlich nur einmal GetOpenFileName(&ofn) aufrufen (gilt analog auch für GetSaveFileName(&ofn))!!!

    PS: Wegen Warnungen s. Einstellungen für Code::Blocks ("Compiler-Flags einstellen")



  • @yahendrik Ah ja besten Dank, ja dass ich mit Unicode das kompilieren wollte war natürlich ein grober Schnitzer.



  • Du darfst natürlich nur einmal GetOpenFileName(&ofn) aufrufen (gilt analog auch für GetSaveFileName(&ofn))!!!

    Ja klar... autsch jetzt wo es ... oh mann (peinlich)
    ok, hab ne faire aurede: ich hab erst vor ca 2 wochen angefangen mit C++ und bin aber etwa 3std. am tag dabei



  • nextsteps:
    1)
    ich versuche herauszufinden wie ich PNG und JPG anstelle BMP images einbinden kann. (nicht so wichtig)

    ich erzeuge ein modalfenster mit checkbox, radio und ein select dropdown und speichere die values in ein txt file.
    dieses soll beim nächsten aufruf des modals wieder gelesen werden und die checkbox, radio und select mit den entsprechenden values wieder geladen werden. (ein versuch später ein config file zu basteln)

    ich geh mal davon aus dass ich fopen() und fread() auch ohne dialogfenster nutzen kann....
    ich versuche erst mal und wenns nicht klappt frage ich.



  • @peroja sagte in Anfänger - Programm funktioniert, aber....:

    ich nutze die IDE CODEBLOCKS

    Selber schuld.

    Ne, ernsthaft? Vergiss die WinAPI und lern' erstmal C++.



  • @Swordfish ganz bestimmt werd ich das tun nur weil DU es sagst. ironieoff
    ich hab anständig gefragt und auch anständig geantwortet. und was ist an CODE::BLOCKS so schlimm?
    ich hab es eben jetzt als meine IDE zum lernen gewählt und nicht VS , obwohl ich das auch hab.
    wenn du mir beim lernen helfen willst dann dankeschön. wenn nicht, dann geh bitte wo anders stänkern. bei mir funzt sowas nicht.



  • @peroja sagte in Anfänger - Programm funktioniert, aber....:

    wenn nicht, dann geh bitte wo anders stänkern.

    ok

    // edit: Heck, alleine schon an dem Code oben sieht man wie viel blödsinn Du Dir mit der WinAPI "beibringst". Aber ist ja Dein Bier. Wer nicht hören will ...



  • @peroja sagte in Anfänger - Programm funktioniert, aber....:

       while ( GetMessageW(&msg,NULL,0,0))
       {
          TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
    

    ist übrigens kaput.



  • / edit: Heck, alleine schon an dem Code oben sieht man wie viel blödsinn Du Dir mit der WinAPI "beibringst". Aber ist ja Dein Bier. Wer nicht hören will ...

    ja? wirklich? weil du seit einigen jahren codest und sicher mehr erfahrung hast als einer der grad mal 2 wochen dabei ist, bedeutet für dich dass du mich von oben herab behandeln kannst? bevor du einen auf lehrer machst, lern gefälligst etwas anstand und respekt. du hast auch mal angefangen.
    auch wenn du recht hast und mein code vielleicht nicht optimal ist, anstatt zu kritisieren kannst du mir freundlich zeigen WO ich WAS falsch mache und erklären warum was wie ist. die anderen konnten es doch auch, oder?
    im übrigen bin ich einem tutorial von einem inder gefolgt. wenn mein kompiler meinen code zwar mit warnungen kompiliert und die exe dann auch macht was sie soll, wie soll ich wissen dass ich etwas falsch mache? ich bin totaler anfänger. und C++ konsolensachen hab ich übrigens n ganzen monat gebastelt und die grundsachen kennen zu lernen. aus einem buch "Grundkurs C" von Jürgen Wolf

    also... mein code ist "kaputt", kann sein. sag mir bitte (freundlich) was kaputt ist und weshalb. und wenn du mir ein beispiel geben könntest wie man es richtig macht, dann wäre ich sogar dankbar und hätte, stell dir mal vor, etwas von dir gelernt.



  • Hör bitte auf mit dieser trotzigen Art.

    Globale Variablen sind gaga und schau Dir an was GetMessage() zurückgibt.

    @peroja sagte in Anfänger - Programm funktioniert, aber....:

    aus einem buch "Grundkurs C" von Jürgen Wolf

    Ja, wegwerfen. (Kannst auch freundlich wegwerfen und dabei lächeln, aber bitte wegwerfen.)


Anmelden zum Antworten