Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.174] |
|
Сообщ.
#1
,
|
|
|
Добрый вечер! У меня возникла одна проблемка надеюсь вы мне поможите ее решить (в поиске искала, но ничего не нашла). Мне необходимо создать тектовый редактор который открывает единственный текстовый документ (по умолчанию) в окне созданого в ручную(уже реализовано - окошко), при этом текст должен быть Arial, выровненный по левому краю, а также необходимо что бы слова не вмешающиеся на строку целиком переносились на новую (перенос должен работать при изменении размера окна)! И еще самое главное - все должно быть реализовано без использование комапонентов осуществляющих форматирование текста!
Заранее СПАСИБ! Жду вашей помощи! |
Сообщ.
#2
,
|
|
|
Могу коротко перевести содержание первого поста: напишите мне текстовый редактор.
А какие уже усилия были предприняты для реализации вышесказанного? |
Сообщ.
#3
,
|
|
|
Знаю как осуществить чтение данных из файла(Из книги)
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; } } Добавлено Так же как осуществить выравнивание pDC-> SetTextAlign(TA_LEFT); |
Сообщ.
#4
,
|
|
|
Цитата Zayka @ Знаю как осуществить чтение данных из файла Ну это уже пол-дела |
Сообщ.
#5
,
|
|
|
Цитата Zayka @ Знаю как осуществить чтение данных из файла(Из книги) Мдяя, как-то маловато для текстового редактора Ну, создай студийным визардом проект на основе ричедита и будет тебе готовый текстовый редактор с минимальными возможностями без написания единой строчки кода А все самому и ручками это долго и много... Есть проблемы задавай вопросы, народ поможет, а писать редактор с нуля самому эт вряд-ли кто-то захочет, ну на крайний счет есть раздел разовой подработке, мож туда |
Сообщ.
#6
,
|
|
|
Еще отображение текста с переходом на новую строку
//отобразить первую строку. ClientDC.TextOut (x,y, lpszHello, strlen(lpszHello)); //вычислить размер первой строки CSize sizeString= ClientDC.GetTextExtent (lpszHello, strlen(lpszHello)); //откорректировать кординату у y+=sizeString.cy; //отобразить вторую строку ClientDC.TextOut(x,y, lpszWorld, strlen (lpszWorld)) |
Сообщ.
#7
,
|
|
|
Цитата Zayka @ Еще отображение текста с переходом на новую строку Ну вот и отлично, знаешь и то и то, так в чем вопрос, поконкретнее моно? О проблеме конкретной |
Сообщ.
#8
,
|
|
|
А может всетаки поможете все мои знания собрать в что-то единое, а главное работающее!! Не ужели я так мало знаю! А еще мне вчера помогли создать окошко
#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; } Добавлено ПОМОГИТЕ пожалуйта собрать все в кучу! Очень надо! |
Сообщ.
#9
,
|
|
|
дело было вечером делать было нечего...
#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; } |
Сообщ.
#10
,
|
|
|
Спасибочки! Но почему-то компилировать не хочет (ругается)!
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. Может быть подскажете... |
Сообщ.
#11
,
|
|
|
зайди в свойстава проекта->
Цитата С/С++->Precompiled Headers->Create/Use Precompiled Header->Not Using Precompiled Headers |
Сообщ.
#12
,
|
|
|
Почему то не хочет работать!
В свойствах поставила переключатель в Not Using Precompiled Headers А в полях Create/Use Precompiled Header прописала Not Using Precompiled Headers! Правильно? |
Сообщ.
#13
,
|
|
|
правильно. выложи свой свой проект. я посмотрю
|
Сообщ.
#14
,
|
|
|
Подскажи как! Че та у меня не получается!
|
Сообщ.
#16
,
|
|
|
Цитата 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"); А надо так: 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"); |
Сообщ.
#17
,
|
|
|
Цитата B.V., 30.12.2006, 14:32:48, 1396430 А надо так: а разница? что у тя что у меня всё равно ариал а свой код я из MSDN взял |
Сообщ.
#18
,
|
|
|
ВОТ!
Добавлено Даже так не хочет работать! 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) |
Сообщ.
#20
,
|
|
|
СПАСИБО, СПАСИБО, СПАСИБО! Кстати, всех с наступающим! Счастья, любви и удачи в Новом году!
|
Сообщ.
#21
,
|
|
|
Да там просто надо было #include "windows.h" на #include <windows.h>
B.V.,зачем в папку проекта запихал windows.h и ещё чёто...? качается долго(GPRS) ну ладно...С Новым Годом!!! |
Сообщ.
#22
,
|
|
|
Цитата ElcnU @ зачем в папку проекта запихал windows.h и ещё чёто...? Собирал второпях, не посмотрел чего там среда накидала С Новым Годом! |