PDA

Просмотр полной версии : класс - окно для вывода текстовой информации


crawler
26.12.2007, 20:17
Привет всем. Нужна помощь - надо создать вспомогательное текстовое окошко (желательно с вертикальной прокруткой) и выводить в него небольшие текстовые сообщения.

Я сделал класс, который будет скомпилирован в ДЛЛ, а чужая прога дает фейс и будет вызывать мой класс. Внутри моего класса один из членов будет этот логгер. Мой класс сегодня никак не трогает ГУИ.

Окошко логгера должно будет создаваться в конструкторе моего класса (который создается при старте аппликации), и будет создана только 1 копия моего класса (если это важно).

Код должен быть в С/С++, и желательно юзать ВинАПИ.

Декларация - чтото вроде такого:

class LogWindow
{
public:
LogWindow ();
~LogWindow ();
bool AddMsgToWindow (char *msg);
bool ClearWindow (); { m_szMsgBuffer[0] = '\0'; return Update(); }

private:
bool Update();
HWND m_hwnd;
char m_szMsgBuffer[10000];
};

PSyton
27.12.2007, 07:15
А в чем собственно проблема-то?
Создай в ресурсах окошко, например с RichEdit'ом, а в конструкторе класса делай CreateWindow(), потом когда надо ShowWindow(SW_SHOw/SW_HIDE).
После создания получаешь хендл RichEdit'а и
когда надо что-то вставить в текстовую облать, отсылаешь RichEdit'у сообщение через SendMessage(), какие параметры можно посмотреть в MSDN... Очистка тоже через SendMessage.

crawler
27.12.2007, 10:03
проблема собсно в "создать". RichEdit даже не нужен, достаточно обычного TextEdit ( или StaticText ).
Создай в ресурсах окошко, можно примерчик плиз? а то я с ГУИ не особо в ладах

И еще - как создать это окошко чтобы оно висело "поверх" всего остального?

BillyIII
27.12.2007, 11:24
все просто:
1 регишь класс
2 создаешь окно
3 добавляешь дочернее класса "EDIT" - это текст-бокс
4 стиль WS_EX_TOPMOST - поверх окон

crawler
27.12.2007, 12:09
1 регишь класс - зачем? и как?
2 создаешь окно - ну с этим вроде как понятно
3 добавляешь дочернее класса "EDIT" - это текст-бокс -как?

ooooxxx ;( я понимаю что все просто. В теории даже понятно. Но я этого никогда не делал.

Если все так просто - накидай эти 10 строк кода.

BillyIII
27.12.2007, 12:17
если есть VisualStudio - создай проект из шаблона Win32 App

посмотри в MSDN:
RegisterClassEx()
CreateWindowEx()

и ещё вариант:
создать консоль, вызвав AllocConsole()
далее получить хэндл стдаут через GetStdHandle(STD_OUTPUT_HANDLE)
теперь использовать WriteFile для записи в консоль

PSyton
27.12.2007, 12:20
Вечером отпишу, если никто не напишет.
Конслоь тоже кстати вариант.

crawler
27.12.2007, 13:42
консоль - самое то. WriteConsole() удобнее WriteFile . Спасибо большое.