Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/37: Рейтинг темы: голосов - 37, средняя оценка - 4.81
3 / 3 / 1
Регистрация: 11.10.2009
Сообщений: 19
1

Текст в Edit окне, С++ WinApi

16.11.2009, 17:16. Показов 7471. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно поместить в Edit окно текст и раскрасить его, т.е. у каждого блока текста должен быть разный цвет.

В связи с чем возникли проблемы, если использовать функции:
C++
1
2
3
SetWindowText(g_hEdit, newText.c_str());
// Или
SendMessage(g_hEdit, WM_SETTEXT, NULL, (LPARAM)newText.c_str());
То вместо '\n' и '\n\r' отображаются крякозябры...
Если использовать MessageBox(...); с тем же текстом, то отображается правильно.

Когда попытался раскрасить текст, то получается, что изменяется цвет всего текста, как задать каждому блоку разный цвет не соображу...

Пока использую Edit, с RichEdit не работал и не знаю поможет ли переключение с Edit на RichEdit...
Жду ответов
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2009, 17:16
Ответы с готовыми решениями:

Программа переводящая текст из Edit в ListBox (WinAPI)
Помогите, нужно написать программу, в окне создается Edit, ListBox и кнопка, при нажатии кнопки,...

Выделить текст в RichTextBox в одном окне, сохранив фокус на другом окне
Добрый день! Пытаюсь реализовать поиск с помощью дополнительного окна (в данной теме сам поиск не...

Считать с Edit текст, убрать последний символ из строки и снова записать в Edit
Всем доброго времени суток. У меня тут возник вопрос, как можно считать с Edit текст, а потом...

Перемещение курсора в окне WinAPI C++
Доброго времени суток, нужно сделать окно в котором курсор будет перемещаться за счет mouse move и...

10
19 / 14 / 2
Регистрация: 08.11.2009
Сообщений: 79
16.11.2009, 20:08 2
насчет раскрасить так просто не получится. Надо, однако, самому рисовать.
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
16.11.2009, 20:32 3
SetWindowText() использует Юникод строку - wchar_t ? или char?
Какая среда программирования?
0
3 / 3 / 1
Регистрация: 11.10.2009
Сообщений: 19
16.11.2009, 20:40  [ТС] 4
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
SetWindowText() использует Юникод строку - wchar_t ? или char?
Какая среда программирования?
Кажется там везде _TChar или как его там, то есть он должен сам определять превращаться в wchar или char... В опциях стоит MultiByte character set, IDE Visual Studio 2008 Pro.


Цитата Сообщение от serg.smart Посмотреть сообщение
насчет раскрасить так просто не получится. Надо, однако, самому рисовать.
То есть надо шаманить с GDI++ ? Мне нужно что-то вроде подсветки синтаксиса как в большинстве IDE / Scite / Notepad++. Думал это как-нибудь просто делается.
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
16.11.2009, 20:53 5
Quisnam, приведи код. У меня ощещение, что newText.c_str() - это обычный char


Цитата Сообщение от Quisnam Посмотреть сообщение
_TChar
ну если студия, то TCHAR


Цитата Сообщение от Quisnam Посмотреть сообщение
Когда попытался раскрасить текст, то получается, что изменяется цвет всего текста, как задать каждому блоку разный цвет не соображу...
Пока использую Edit, с RichEdit не работал и не знаю поможет ли переключение с Edit на RichEdit...
Да. Для раскаршивания части текста, использовать надо RichEdit.

Добавлено через 38 секунд
Цитата Сообщение от Quisnam Посмотреть сообщение
Мне нужно что-то вроде подсветки синтаксиса как в большинстве IDE / Scite / Notepad++.
RichEdit


Цитата Сообщение от Quisnam Посмотреть сообщение
Думал это как-нибудь просто делается.
ну не так уж все и просто =)
1
3 / 3 / 1
Регистрация: 11.10.2009
Сообщений: 19
16.11.2009, 21:05  [ТС] 6
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
приведи код.
C++
1
2
3
4
5
6
7
8
9
          // TEXT берётся из другой функции с помощью GetWindowText(...);
          string newText;
          if ((TEXT[i] == '[' || TEXT[i] == ']'))
            {
                newText.append("\n\r");
                newText += TEXT[i];
                newText.append("\n\r");
            }
    SetWindowText(g_hEdit, newText.c_str());
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
Да. Для раскаршивания части текста, использовать надо RichEdit.
Сейчас поколдую и будет RichEdit
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
16.11.2009, 21:17 7
Цитата Сообщение от Quisnam Посмотреть сообщение
string newText;
а зачем собственно применять string ? чем не устраивает TCHAR newText[size]?
0
3 / 3 / 1
Регистрация: 11.10.2009
Сообщений: 19
16.11.2009, 21:25  [ТС] 8
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
а зачем собственно применять string ? чем не устраивает TCHAR newText[size]?
Размер неизвестен в начале, а зачем изобретать колесо когда придумали STL ?
Тут всё же не понятно другое, почему текст нормально отображается в MessageBox, а в Edit вместо символов '\n' и '\r' получаются крякозябры, ведь MessageBox так же бывает в двух вариантах (MessageBoxW, MessageBoxA). Попробую в RichEdit, вдруг там будет нормально...
0
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
16.11.2009, 21:39 9
Цитата Сообщение от Quisnam Посмотреть сообщение
Размер неизвестен в начале, а зачем изобретать колесо когда придумали STL ?
ну как-то я привык.. если WinApi проект - то Си, и использовать фич C++ - не вижу смысла. =)

если используешь Юникод проект - используй тогда wstring
0
3 / 3 / 1
Регистрация: 11.10.2009
Сообщений: 19
17.11.2009, 00:09  [ТС] 10
Пришлось повозится с MSDN, но удалось создать RichEdit, текст форматируется так как надо, с цветом пока не успел до конца разобраться.

Пока возился, обнаружил, что не получается создать RichEdit версии 4. т.е. когда делаю:
C++
1
2
    LoadLibrary(TEXT("Msftedit.dll"));
    HWND hwndEdit= CreateWindowEx(0, RICHEDIT_CLASS.......);
RichEdit не отображается, если же делать LoadLibrary(TEXT("Riched20.dll")); то всё нормально. С чем это может быть связано? Windows XP SP3, по идеи таких проблем не должно быть...
А ещё InitCommonControls и InitCommonControlsEx не работают, ругаются на commctrl32.lib кажется, подключал вручную, но всё равно ругается
0
15 / 15 / 1
Регистрация: 17.10.2012
Сообщений: 98
Записей в блоге: 1
06.04.2013, 02:55 11
Quisnam, поищи в интернете подцветку синтаксиса есть куча таких приколов

Добавлено через 1 час 36 минут
Цитата Сообщение от Quisnam Посмотреть сообщение
RichEdit не отображается
а блин в первом пареметре че тогда ты поставил 0 поставь WS_EX_CLIENTEDGE
и тогда будет отображатся в стилях укажы что ты имено хочеш отнего !
как стандарт : WS_CHILD|WS_VISIBLE(и дальше свои стили которые ты хочеш)
и вообще читай МСДН про фунцию CreateWindow()
SendMessage() есть тоже такая штука...

Добавлено через 3 минуты
Цитата Сообщение от Quisnam Посмотреть сообщение
А ещё InitCommonControls и InitCommonControlsEx не работают, ругаются на commctrl32.lib кажется, подключал вручную, но всё равно ругается
а ты добавь в фнц :
C++
1
int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR    lpCmdLine,int       nCmdShow)
Вот Это :
C++
1
2
3
4
5
//самому верху после скобки
// мне иногда помогает
INITCOMMONCONTROLSEX icc={sizeof(INITCOMMONCONTROLSEX)};
    icc.dwICC=ICC_WIN95_CLASSES;
    InitCommonControlsEx(&icc);
Добавлено через 5 минут
Цитата Сообщение от Quisnam Посмотреть сообщение
А ещё InitCommonControls и InitCommonControlsEx не работают, ругаются на commctrl32.lib кажется, подключал вручную, но всё равно ругается
ты бы знаеш тчо зделал :
1) проверь ли ты подключил самому верху в файле stdafx.h :
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN
 
#include <windows.h>// ЭТО НАДА САМЫМ ПЕРВЫМ ИНАЧЕ ОШИБКИ БУДУТ У ДРУГИХ БИБЛИОТЕКАХ !
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>
#include<CommCtrl.h>
#pragma comment(lib,"comctl32")
// и Зделай Имено Так или Ты просо не поймеш когда не попробуеш
0
06.04.2013, 02:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.04.2013, 02:55
Помогаю со студенческими работами здесь

Отрисовка точек в окне WinApi
Доброго времени суток! В рамках задачи построения графика функции пытался разобраться с...

ТЕКСТ: С Edit'a в масив и обратно в EDIT
вот у меня задание (сам себе захотел научиться) но так и не научился ( зхотел ТЕКСТ перевести в...

Вывести в Edit текст другого Edit
вот из этих двух процедур procedure TForm1.Edit1Change(Sender: TObject); begin a:=Edit1.Text;...

winapi, text edit
Как сделать серый, не редактируемый текст в text edit. Например как на любом сайте или форуме, там...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru