Jump to content

    

C++ Winapi Окно "Edit"

Recommended Posts

Написал простое приложение с использованием WinApi для работы с железкой STM32. Создал окно Edit в который выводится лог. Прием по COM порту осуществил с использованием триады. Все что принял вывожу в окно Edit:

RetBytes = comstat.cbInQue; 								//и получить из неё количество принятых байтов
if(RetBytes) 												//если действительно есть байты для чтения
{														//
  ReadFile(hComPORT, bRead, RetBytes, &RetBytes, &overlapped); //прочитать байты из порта в буфер программы
  if (RetBytes > 0)									//
  {												//
    bRead[++RetBytes] = 0;						//Завершающий 0
    PrintMultitext(bRead);						//
  }												//

Сам вывод в окно в отдельной функции:

void PrintMultitext(const char* COMString)						//
{																//
static unsigned char NLine = 0;									//
	SendMessage(hTextBOX, EM_SETSEL, 0, -1);					//
	SendMessage(hTextBOX, EM_SETSEL, -1, -1);					//
	SendMessage(hTextBOX, EM_REPLACESEL, 0, (LPARAM)COMString);	//

Работает но криво. Выводит вот так:

Screenshot_1.png.bb85f45b16a710085263b478d5be067d.png

Как - то можно это исправить?

 

Share this post


Link to post
Share on other sites

dimka76
37 minutes ago, Димон Безпарольный said:

Как - то можно это исправить?

Сделайте в STM32 форматированный вывод, например

sprintf(....);

 

Share this post


Link to post
Share on other sites

2 minutes ago, dimka76 said:

Сделайте в STM32 форматированный вывод, например

С самого начала. printf и sprinf используется с \r\n на конце.

Share this post


Link to post
Share on other sites

dimka76
8 minutes ago, Димон Безпарольный said:

С самого начала. printf и sprinf используется с \r\n на конце.

Ну, так с помощью них и форматируйте, добавьте модификатор ширины. 

Share this post


Link to post
Share on other sites

k155la3

Было бы неплохо, чтобы было видно, как должен выглядеть "правильный" вывод. Т.е. без декодирования и додумывания.

Если по интерфейсу все в текстовом формате, можно попробовать открыть файл не в бинарном, а в текстовом режиме.

(не уверен, возможно в текстовом режиме ф-я будет работать в "синхронном" режиме и ждать терминирующего символа \r, как gets() )

Использовать ReadFileEx(...) которая позволяет работать в "блочном" режиме с таймаутом (если лог выдается построчно с временнЫми паузами между строками). Те не читать каждый "прилетевший" байт а ждать блок(строку) и обрабатывать его.

итд

Организовать прием в "поток" и выделять-выводить уже функциями потока. Но это не ко мне.

Организовать суррогат потока - читать-накапливать ввод в строковую переменную, и в зависимости от наличия \r выводить в окно.

 

 

 

Share this post


Link to post
Share on other sites

k155la3

ps

1 hour ago, Димон Безпарольный said:

С самого начала. printf и sprinf используется с \r\n на конце.

Этого недостаточно при выводе HEX

printf("%.08X\n\r", var32);

 

Share this post


Link to post
Share on other sites

AleksBak
19 минут назад, k155la3 сказал:

printf("%.08X\n\r", var32);

А я '\r' не использую. Только '\n' остается. Т.е.

printf("%.08X\n", var32);

т.к. все это передается за какое-то время, а зачем его затягивать ненужными вещами.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.