Syntaxhervorhebung



  • Hallo bin neu hier und
    ziemlicher Anfänger in c/c++. Möchte aber
    einen Editor für .uc dateien (UnrealScript für die unreal engine)
    machen.

    Den Texteditor habe ich, brauche nur noch Syntaxhervorhebung
    und das der keine .txt dateien öffnet sondern .uc dateien.

    Habe erstmal das text - Editor beispiel von Bloodshed dev-cpp genommen.
    Das besteht aus

    -Menu.rc
    -Main.c
    -Main.h

    hier die quellcodes:

    Menu.rc :

    #include "Main.h"
    
    MAINMENU MENU 
    {
     POPUP "&File"
     {
      MENUITEM "&Open...", CM_FILE_OPEN
      MENUITEM "Save &As...", CM_FILE_SAVEAS
      MENUITEM SEPARATOR
      MENUITEM "E&xit", CM_FILE_EXIT
     }
    
     POPUP "&Help"
     {
      MENUITEM "&About", CM_ABOUT
     }
    }
    

    Main.c :

    #include <windows.h>
    
    #include "Main.h"
    
    static char g_szClassName[] = "MyWindowClass";
    static HINSTANCE g_hInst = NULL;
    
    #define IDC_MAIN_TEXT   1001
    
    BOOL LoadFile(HWND hEdit, LPSTR pszFileName)
    {
       HANDLE hFile;
       BOOL bSuccess = FALSE;
    
       hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
          OPEN_EXISTING, 0, 0);
       if(hFile != INVALID_HANDLE_VALUE)
       {
          DWORD dwFileSize;
          dwFileSize = GetFileSize(hFile, NULL);
          if(dwFileSize != 0xFFFFFFFF)
          {
             LPSTR pszFileText;
             pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1);
             if(pszFileText != NULL)
             {
                DWORD dwRead;
                if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
                {
                   pszFileText[dwFileSize] = 0; // Null terminator
                   if(SetWindowText(hEdit, pszFileText))
                      bSuccess = TRUE; // It worked!
                }
                GlobalFree(pszFileText);
             }
          }
          CloseHandle(hFile);
       }
       return bSuccess;
    }
    
    BOOL SaveFile(HWND hEdit, LPSTR pszFileName)
    {
       HANDLE hFile;
       BOOL bSuccess = FALSE;
    
       hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, 0,
          CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
       if(hFile != INVALID_HANDLE_VALUE)
       {
          DWORD dwTextLength;
          dwTextLength = GetWindowTextLength(hEdit);
          if(dwTextLength > 0)// No need to bother if there's no text.
          {
             LPSTR pszText;
             pszText = (LPSTR)GlobalAlloc(GPTR, dwTextLength + 1);
             if(pszText != NULL)
             {
                if(GetWindowText(hEdit, pszText, dwTextLength + 1))
                {
                   DWORD dwWritten;
                   if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL))
                      bSuccess = TRUE;
                }
                GlobalFree(pszText);
             }
          }
          CloseHandle(hFile);
       }
       return bSuccess;
    }
    
    BOOL DoFileOpenSave(HWND hwnd, BOOL bSave)
    {
       OPENFILENAME ofn;
       char szFileName[MAX_PATH];
    
       ZeroMemory(&ofn, sizeof(ofn));
       szFileName[0] = 0;
    
       ofn.lStructSize = sizeof(ofn);
       ofn.hwndOwner = hwnd;
       ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0\0";
       ofn.lpstrFile = szFileName;
       ofn.nMaxFile = MAX_PATH;
       ofn.lpstrDefExt = "txt";
    
       if(bSave)
       {
          ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY |
             OFN_OVERWRITEPROMPT;
    
          if(GetSaveFileName(&ofn))
          {
             if(!SaveFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
             {
                MessageBox(hwnd, "Save file failed.", "Error",
                   MB_OK | MB_ICONEXCLAMATION);
                return FALSE;
             }
          }
       }
       else
       {
          ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
          if(GetOpenFileName(&ofn))
          {
             if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
             {
                MessageBox(hwnd, "Load of file failed.", "Error",
                   MB_OK | MB_ICONEXCLAMATION);
                return FALSE;
             }
          }
       }
       return TRUE;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
    {
       switch(Message)
       {
          case WM_CREATE:
             CreateWindow("EDIT", "",
                WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE |
                   ES_WANTRETURN,
                CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    
                hwnd, (HMENU)IDC_MAIN_TEXT, g_hInst, NULL);
    
             SendDlgItemMessage(hwnd, IDC_MAIN_TEXT, WM_SETFONT,
                (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
          break;
          case WM_SIZE:
             if(wParam != SIZE_MINIMIZED)
                MoveWindow(GetDlgItem(hwnd, IDC_MAIN_TEXT), 0, 0, LOWORD(lParam),
                   HIWORD(lParam), TRUE);
          break;
          case WM_SETFOCUS:
             SetFocus(GetDlgItem(hwnd, IDC_MAIN_TEXT));
          break;
          case WM_COMMAND:
             switch(LOWORD(wParam))
             {
                case CM_FILE_OPEN:
                   DoFileOpenSave(hwnd, FALSE);
                break;
                case CM_FILE_SAVEAS:
                   DoFileOpenSave(hwnd, TRUE);
                break;
                case CM_FILE_EXIT:
                   PostMessage(hwnd, WM_CLOSE, 0, 0);
                break;
                case CM_\1:
                   MessageBox (NULL, "File Editor for Windows !\n Using the Win32 API" , "About...", 0);
             }
          break;
          case WM_CLOSE:
             DestroyWindow(hwnd);
          break;
          case WM_DESTROY:
             PostQuitMessage(0);
          break;
          default:
             return DefWindowProc(hwnd, Message, wParam, lParam);
       }
       return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
       LPSTR lpCmdLine, int nCmdShow)
    {
       WNDCLASSEX WndClass;
       HWND hwnd;
       MSG Msg;
    
       g_hInst = hInstance;
    
       WndClass.cbSize        = sizeof(WNDCLASSEX);
       WndClass.style         = 0;
       WndClass.lpfnWndProc   = WndProc;
       WndClass.cbClsExtra    = 0;
       WndClass.cbWndExtra    = 0;
       WndClass.hInstance     = g_hInst;
       WndClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
       WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
       WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
       WndClass.lpszMenuName  = "MAINMENU";
       WndClass.lpszClassName = g_szClassName;
       WndClass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
    
       if(!RegisterClassEx(&WndClass))
       {
          MessageBox(0, "Window Registration Failed!", "Error!",
             MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
          return 0;
       }
    
       hwnd = CreateWindowEx(
          WS_EX_CLIENTEDGE,
          g_szClassName,
          "File Editor Example Program",
          WS_OVERLAPPEDWINDOW,
          CW_USEDEFAULT, CW_USEDEFAULT, 320, 240,
          NULL, NULL, g_hInst, NULL);
    
       if(hwnd == NULL)
       {
          MessageBox(0, "Window Creation Failed!", "Error!",
             MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
          return 0;
       }
    
       ShowWindow(hwnd, nCmdShow);
       UpdateWindow(hwnd);
    
       while(GetMessage(&Msg, NULL, 0, 0))
       {
          TranslateMessage(&Msg);
          DispatchMessage(&Msg);
       }
       return Msg.wParam;
    }
    

    Main.h

    #define CM_FILE_SAVEAS	9072
    #define CM_FILE_EXIT	9071
    #define CM_FILE_OPEN	9070
    #define CM_ABOUT        9069
    

    Kann mir vllt. jemand ein
    beispiel für eine Syntaxhervorhebung
    posten das ich nur noch die codes und
    die farben ändern muss? Und mir schreiben wie
    ich das da einfüge?

    Und kann mir jemand sagen wie ich das machen kann das
    der .uc dateien öffnet und keine txt dateien?

    Hoffe ich habe ins richtige Forum gepostet 😃
    und danke im voraus für alle Antworten!!
    Hoffe mir kann jemand helfen

    Also wie gesagt, das text programm ist ein
    beispiel von Bloodshed Dev-cpp, findet ihr unter
    \Dev-Cpp\Examples\FileEditor falls jemand das Programm hat.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Lukas.. schrieb:

    Hallo bin neu hier und
    ziemlicher Anfänger in c/c++. Möchte aber
    einen Editor für .uc dateien (UnrealScript für die unreal engine)
    machen.

    Den Texteditor habe ich, brauche nur noch Syntaxhervorhebung
    und das der keine .txt dateien öffnet sondern .uc dateien.

    Habe erstmal das text - Editor beispiel von Bloodshed dev-cpp genommen.
    Das besteht aus
    [...]
    Kann mir vllt. jemand ein
    beispiel für eine Syntaxhervorhebung
    posten das ich nur noch die codes und
    die farben ändern muss? Und mir schreiben wie
    ich das da einfüge?

    Und kann mir jemand sagen wie ich das machen kann das
    der .uc dateien öffnet und keine txt dateien?

    Programmieren 2008: Man kopiert sich Code den man überhaupt nicht versteht und postet ihn dann in einem Forum, damit andere den Rest der Arbeit für einen machen... 🙄



  • warum immer alles selber machen 🙄
    [url]
    http://notepad-plus.sourceforge.net/de/site.htm[/url] :xmas2:



  • Nein ist nicht so das ich nix versteh, bin halt noch
    anfänger. Das is ja längst nicht alles was geändert wird, das
    ist nur das was ich nicht kann.
    Und ich muss den selber machen weil ich bis jetzt
    keinen Editor gefunden hat der Syntaxhervorhebung für
    UnrealScript hat.



  • Jo, würde txt++ zustimmen und dir empfehlen, Notepad++ zu nehmen. Da kann man relativ einfach neue Sprachen definieren.

    Und dann fängst du mit was einfacherem an. Sonst wird das nämlich erfahrungsgemäß nichts 🙂



  • mad_martin schrieb:

    Jo, würde txt++ zustimmen und dir empfehlen, Notepad++ zu nehmen. Da kann man relativ einfach neue Sprachen definieren.

    Und dann fängst du mit was einfacherem an. Sonst wird das nämlich erfahrungsgemäß nichts 🙂

    Ja ok, suche dann mal nach tutorials dafür. Danke für eure Hilfe!

    Edit: Habe jetzt gesucht aber nix brauchbares gefunden an Tutorials.
    Wenn jemand ein leicht verständliches Tutorial weiß, bitte link
    posten. Danke im voraus.


  • Mod

    Einen Editor zu bauen mit Syntaxcheck gehört mit Sicherheit nicht zu Dingen die Anfänger anzuraten sind. Das ist wirklich komplex!
    Insofern findest Du garantiert kein Tutorial sondern höchstens fertigen Code.



  • Meinen Vorrednern kann ich im Prinzip nur zustimmen.

    Es gibt jedoch ein Tutorial als absolute Ausnahme:
    "Design and Implementation of a Win32 Text Editor" http://www.catch22.net/tuts/neatpad

    Dieses mehrteilige Tutorial ist zwar leicht verständlich, setzt aber weiterhin grundlegende Vorkenntnisse des Win32 API voraus!

    Martin



  • Mmacher schrieb:

    Meinen Vorrednern kann ich im Prinzip nur zustimmen.

    Es gibt jedoch ein Tutorial als absolute Ausnahme:
    "Design and Implementation of a Win32 Text Editor" http://www.catch22.net/tuts/neatpad

    Dieses mehrteilige Tutorial ist zwar leicht verständlich, setzt aber weiterhin grundlegende Vorkenntnisse des Win32 API voraus!

    Martin

    Danke. Ich kann ja mal gucken wie weit ich komme,
    ich lern ja auch schön weiter, also werd ich das vllt.
    bald können 😉


Anmelden zum Antworten