На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Создание текстового редактора , Без использования компонентов осущ. форматир. тек.
    Добрый вечер! У меня возникла одна проблемка надеюсь вы мне поможите ее решить (в поиске искала, но ничего не нашла). Мне необходимо создать тектовый редактор который открывает единственный текстовый документ (по умолчанию) в окне созданого в ручную(уже реализовано - окошко), при этом текст должен быть Arial, выровненный по левому краю, а также необходимо что бы слова не вмешающиеся на строку целиком переносились на новую (перенос должен работать при изменении размера окна)! И еще самое главное - все должно быть реализовано без использование комапонентов осуществляющих форматирование текста!
    Заранее СПАСИБ! Жду вашей помощи! :huh:
      Могу коротко перевести содержание первого поста: напишите мне текстовый редактор.

      А какие уже усилия были предприняты для реализации вышесказанного?
        Знаю как осуществить чтение данных из файла(Из книги)
        ExpandedWrap disabled
          tru
          {
          CFile*pFile = new CFile("test.txt",
                                   CFile::modeRead
                                   | CFile:typeBinary);
          UNIT count;
          BYTE* pBuffer= new BYTE [255];
          while (0< (count = pFile->Read(pBuffer,205)))
          {
          //
          }
          {
          pFile->Close();
          delete pFile;
          {
          catch (CFileException* pe)
          {
          pe->ReportError();
          if (pFile)
          {
          delete pFile;
          }
          }


        Добавлено
        Так же как осуществить выравнивание
        ExpandedWrap disabled
          pDC-> SetTextAlign(TA_LEFT);
          Цитата Zayka @
          Знаю как осуществить чтение данных из файла

          Ну это уже пол-дела :D
            Цитата Zayka @
            Знаю как осуществить чтение данных из файла(Из книги)

            Мдяя, как-то маловато для текстового редактора :)
            Ну, создай студийным визардом проект на основе ричедита и будет тебе готовый текстовый редактор с минимальными возможностями без написания единой строчки кода :)
            А все самому и ручками это долго и много...
            Есть проблемы задавай вопросы, народ поможет, а писать редактор с нуля самому эт вряд-ли кто-то захочет, ну на крайний счет есть раздел разовой подработке, мож туда ;) :)
              Еще отображение текста с переходом на новую строку
              ExpandedWrap disabled
                //отобразить первую строку.
                ClientDC.TextOut (x,y, lpszHello, strlen(lpszHello));
                //вычислить размер первой строки
                CSize sizeString=
                ClientDC.GetTextExtent (lpszHello, strlen(lpszHello));
                //откорректировать кординату у
                y+=sizeString.cy;
                //отобразить вторую строку
                ClientDC.TextOut(x,y, lpszWorld, strlen (lpszWorld))
                Цитата Zayka @
                Еще отображение текста с переходом на новую строку

                Ну вот и отлично, знаешь и то и то, так в чем вопрос, поконкретнее моно? О проблеме конкретной
                  А может всетаки поможете все мои знания собрать в что-то единое, а главное работающее!! Не ужели я так мало знаю! :'( А еще мне вчера помогли создать окошко
                  ExpandedWrap disabled
                    #include <Windows.h>
                    // #5
                    LRESULT __stdcall WndProc(HWND hwnd,
                                              UINT message,
                                              WPARAM wParam,
                                              LPARAM lParam)
                    {
                        switch(message)
                        {
                        case WM_CLOSE:
                            DestroyWindow(hwnd);
                            break;
                        case WM_DESTROY:
                            PostQuitMessage(0);
                            break;
                        }
                     
                        return DefWindowProc(hwnd, message, wParam, lParam);
                    }
                     
                     
                    // #1
                    int __stdcall WinMain(HINSTANCE hInst,
                                          HINSTANCE hPrev,
                                          char* pszCmdLine,
                                          int nCmdShow)
                    {
                        // #2
                        WNDCLASS wc = {0};
                        wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
                        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
                        wc.hInstance = hInst;
                        wc.lpszClassName = TEXT("MyWndClassName");
                        wc.lpfnWndProc = WndProc;
                     
                        if(RegisterClass(&wc))
                        {
                            // #3
                            HWND hwnd = CreateWindowEx(0, wc.lpszClassName,
                                TEXT("My Window"), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                                CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                                NULL, NULL, wc.hInstance, NULL);
                            if(hwnd)
                            {
                                // #4
                                MSG msg;
                                for(;GetMessage(&msg, NULL, 0, 0);)
                                {
                                    TranslateMessage(&msg);
                                    DispatchMessage(&msg);
                                }
                            }
                        }
                     
                        return 0;
                    }


                  Добавлено
                  ПОМОГИТЕ пожалуйта собрать все в кучу! Очень надо!
                    дело было вечером делать было нечего... :D
                    ExpandedWrap disabled
                      #include "windows.h"
                      BOOL                InitInstance(HINSTANCE, int);
                      LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
                      HWND hWnd;
                      HWND hEdit;
                      HMENU hMenu,hFileMenu;
                      HFONT hFont;
                      OPENFILENAME ofn;
                      char szFile[260];
                      HANDLE hFile;
                      #define ID_EDIT         100
                      #define ID_FILE_OPEN    101
                      #define ID_FILE_SAVE    102
                      #define ID_EXIT         103
                      int APIENTRY WinMain(HINSTANCE hInstance,
                                           HINSTANCE hPrevInstance,
                                           LPTSTR    lpCmdLine,
                                           int       nCmdShow)
                      {
                          MSG msg;
                          if (!InitInstance (hInstance, nCmdShow))
                              return FALSE;
                       
                          while (GetMessage(&msg, NULL, 0, 0))
                          {
                              TranslateMessage(&msg);
                              DispatchMessage(&msg);
                          }
                          return (int) msg.wParam;
                      }
                      BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
                      {
                          WNDCLASSEX wcex;
                          wcex.cbSize = sizeof(WNDCLASSEX);
                          wcex.style          = CS_HREDRAW | CS_VREDRAW;
                          wcex.lpfnWndProc    = (WNDPROC)WndProc;
                          wcex.cbClsExtra     = 0;
                          wcex.cbWndExtra     = 0;
                          wcex.hInstance      = hInstance;
                          wcex.hIcon          = NULL;
                          wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
                          wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
                          wcex.lpszMenuName   = NULL;
                          wcex.lpszClassName  = "FRM_TEXTEDIT";
                          wcex.hIconSm        = NULL;
                          RegisterClassEx(&wcex);    
                          hWnd = CreateWindow(wcex.lpszClassName, "Text Edit", WS_OVERLAPPEDWINDOW,
                            CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
                          if (!hWnd)
                              return FALSE;
                          ShowWindow(hWnd, nCmdShow);
                          UpdateWindow(hWnd);
                      //=====================================================
                          ZeroMemory(&ofn, sizeof(ofn));
                          ofn.lStructSize = sizeof(ofn);
                          ofn.hwndOwner = hWnd;
                          ofn.lpstrFile = szFile;
                          ofn.lpstrFile[0] = '\0';
                          ofn.nMaxFile = sizeof(szFile);
                          ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
                          ofn.nFilterIndex = 1;
                          ofn.lpstrFileTitle = NULL;
                          ofn.nMaxFileTitle = 0;
                          ofn.lpstrInitialDir = NULL;
                          ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
                      //=================================================
                          return TRUE;
                      }
                      LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
                      {
                          int wmId, wmEvent;
                          switch (message)
                          {
                          case WM_CREATE:
                              {
                                  RECT rcClient;
                                  ::GetClientRect(hWnd,&rcClient);
                                  hEdit=CreateWindow("EDIT",NULL,WS_CHILD | WS_VISIBLE | WS_VSCROLL |
                                      ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 0, 0,  
                                      hWnd,(HMENU) ID_EDIT, (HINSTANCE)::GetModuleHandle(NULL), NULL);
                                  hMenu=::CreateMenu();
                                  hFileMenu=::CreatePopupMenu();
                                  ::AppendMenu(hMenu,MF_STRING|MF_POPUP,(UINT)(LONG_PTR)hFileMenu,"Файл");
                                  ::AppendMenu(hFileMenu,MF_STRING,ID_FILE_OPEN,"Открыть");
                                  ::AppendMenu(hFileMenu,MF_STRING,ID_FILE_SAVE,"Сохранить");
                                  ::AppendMenu(hFileMenu,MF_SEPARATOR,0,NULL);
                                  ::AppendMenu(hFileMenu,MF_STRING,ID_EXIT,"Выход");
                                  ::SetMenu(hWnd,hMenu);
                                  hFont=::CreateFont(12,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,
                                      OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
                                      DEFAULT_PITCH | FF_SWISS,"Arial");
                                  ::SendMessage(hEdit,WM_SETFONT,WPARAM(hFont),TRUE);        
                                  ::SendMessage(hEdit,EM_SETLIMITTEXT,WPARAM(-1),0);          
                                  break;
                              }
                          case WM_SIZE:
                              {
                                  MoveWindow(hEdit,0, 0,LOWORD(lParam),HIWORD(lParam),TRUE);
                                  return 0;
                              }
                          case WM_COMMAND:
                              wmId    = LOWORD(wParam);
                              wmEvent = HIWORD(wParam);
                              switch (wmId)
                              {
                              case ID_FILE_OPEN:
                                  {
                                      if (GetOpenFileName(&ofn)==TRUE)
                                      {
                                          hFile = CreateFile(ofn.lpstrFile, GENERIC_READ,
                                              0, (LPSECURITY_ATTRIBUTES) NULL,
                                              OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
                                              (HANDLE) NULL);
                                          if(hFile==NULL)
                                              ::MessageBox(hWnd,"Не могу открыть файл","Ошибка",0x10);
                                          DWORD nBufLen=::GetFileSize(hFile,NULL);
                                          DWORD nBufLenToRead=0;
                                          char* szReadBuf=new char[nBufLen];
                                          if(!::ReadFile(hFile,szReadBuf,nBufLen,&nBufLenToRead,NULL))
                                              ::MessageBox(hWnd,"Не могу прочитать файл","Ошибка",0x10);
                                          ::SetWindowText(hEdit,szReadBuf);
                                          delete[] szReadBuf;
                                          ::CloseHandle(hFile);
                                      }
                                      break;
                                  }
                              case ID_FILE_SAVE:
                                  {
                                      if (GetSaveFileName(&ofn)==TRUE)
                                      {
                                          hFile = CreateFile(ofn.lpstrFile, GENERIC_WRITE,
                                              0, (LPSECURITY_ATTRIBUTES) NULL,
                                              CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
                                              (HANDLE) NULL);
                                          if(hFile==NULL)
                                              ::MessageBox(hWnd,"Не могу открыть файл","Ошибка",0x10);
                                          DWORD nBufLen=(DWORD)SendMessage(hEdit,WM_GETTEXTLENGTH,0,0);
                                          DWORD nBufLenToWrite=0;
                                          char* szWriteBuf=new char[nBufLen];
                                          ::GetWindowText(hEdit,szWriteBuf,nBufLen);
                                          if(!::WriteFile(hFile,szWriteBuf,nBufLen,&nBufLenToWrite,NULL))
                                              ::MessageBox(hWnd,"Не могу записать в файл","Ошибка",0x10);
                                          delete[] szWriteBuf;
                                          ::CloseHandle(hFile);
                                      }
                                      break;
                                  }
                              case ID_EXIT:
                                  {
                                      ::DestroyWindow(hWnd);
                                      break;
                                  }
                              default:
                                  return DefWindowProc(hWnd, message, wParam, lParam);
                              }
                              break;
                          case WM_DESTROY:
                              PostQuitMessage(0);
                              break;
                          default:
                              return DefWindowProc(hWnd, message, wParam, lParam);
                          }
                          return 0;
                      }
                    Сообщение отредактировано: ElcnU -
                      Спасибочки! Но почему-то компилировать не хочет (ругается)!
                      C:\zoya\987\987.cpp(2) : error C2146: syntax error : missing ';' before identifier 'InitInstance'
                      C:\zoya\987\987.cpp(2) : error C2501: 'BOOL' : missing storage-class or type specifiers
                      C:\zoya\987\987.cpp(2) : fatal error C1004: unexpected end of file found
                      Error executing cl.exe.
                      Может быть подскажете... :wall:
                        зайди в свойстава проекта->
                        Цитата
                        С/С++->Precompiled Headers->Create/Use Precompiled Header->Not Using Precompiled Headers
                          Почему то не хочет работать! :(
                          В свойствах поставила переключатель в Not Using Precompiled Headers
                          А в полях Create/Use Precompiled Header прописала Not Using Precompiled Headers!
                          Правильно?
                            правильно. выложи свой свой проект. я посмотрю
                              Подскажи как! Че та у меня не получается! :(
                                нажми ответить а остальное тут объяснял :yes:
                                  Цитата ElcnU @
                                  hFont=::CreateFont(12,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,
                                  OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
                                  DEFAULT_PITCH | FF_SWISS,"Arial");


                                  А надо так:

                                  ExpandedWrap disabled
                                                hFont=CreateFont(-MulDiv(12, GetDeviceCaps(GetDC(0), LOGPIXELSY), 72)
                                                    ,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,
                                                    OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
                                                    DEFAULT_PITCH | FF_SWISS,"Arial");
                                    Цитата B.V., 30.12.2006, 14:32:48, 1396430
                                    А надо так:

                                    а разница? что у тя что у меня всё равно ариал :whistle:
                                    а свой код я из MSDN взял :yes:
                                      ВОТ!

                                      Добавлено
                                      Даже так не хочет работать! :wall:
                                      ExpandedWrap disabled
                                        hFont=CreateFont(-MulDiv(12, GetDeviceCaps(GetDC(0), LOGPIXELSY), 72)
                                                        ,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,
                                                        OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
                                                        DEFAULT_PITCH | FF_SWISS,"Arial");

                                      Прикреплённый файлПрикреплённый файлzoya.zip (63.29 Кбайт, скачиваний: 82)
                                        Нды...

                                        Вот:
                                        Прикреплённый файлПрикреплённый файлBV_ed.rar (202.21 Кбайт, скачиваний: 196)
                                          СПАСИБО, СПАСИБО, СПАСИБО! :D Кстати, всех с наступающим! Счастья, любви и удачи в Новом году! Ж)
                                            Да там просто надо было #include "windows.h" на #include <windows.h>
                                            B.V.,зачем в папку проекта запихал windows.h и ещё чёто...? качается долго(GPRS) :D
                                            ну ладно...С Новым Годом!!! ;)
                                            Сообщение отредактировано: ElcnU -
                                              Цитата ElcnU @
                                              зачем в папку проекта запихал windows.h и ещё чёто...?


                                              Собирал второпях, не посмотрел чего там среда накидала :)

                                              С Новым Годом! :yes:
                                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                              0 пользователей:


                                              Рейтинг@Mail.ru
                                              [ Script execution time: 0,0586 ]   [ 16 queries used ]   [ Generated: 9.12.24, 14:31 GMT ]