读书人

C语言实现滚动实现文本解决办法

发布时间: 2012-03-18 13:55:39 作者: rapoo

C语言实现滚动实现文本
LINUX平台的,在窗口实现滚动文本,根据接受到的CAN信息判断显示内容。该如何实现啊?谢谢各位!初学者,大家赐教,最好有点简单的代码~

[解决办法]
这个只需要用些简单的编程小技巧就可以实现。楼主可以自己试着自己写些小函数。或许不能保证性能最优,但是自己写的,会印象深些,以后随着编程实践的积累,可以慢慢的再改进自己。如果什么都是拷贝别人的代码,不加思考。编程技巧可能提高慢些。个人愚见,仅供参考。下面是一段小代码,希望对你有用。
BC下的C代码

#define LINE_ONE 5
#define LINE_TWO 25
#define LINE_THREE 45
#define NEXT_LINE -1
#define SAME_LINE 1

/**********************************************/
/********** output_fabio_message() ************/
/**********************************************/
void output_fabio_message(const char *buffer, int line_number)
{
char stringlength;

settextstyle(SMALL_FONT, HORIZ_DIR, USER_CHAR_SIZE);
settextjustify(LEFT_TEXT, TOP_TEXT);
setusercharsize(3,2,3,2);
getviewsettings(&viewinfo);

if (line_number == NEXT_LINE)
{
line_number = last_line + 20;
if (line_number > 45)
{
line_number = 5;
}
}

if (line_number == SAME_LINE) /* blank and write over the last message */
{
line_number = last_line;
}

setviewport(viewport_table[DIALOG][LEFT]+2,
viewport_table[DIALOG][TOP]+line_number,
viewport_table[DIALOG][RIGHT]-2,
viewport_table[DIALOG][TOP]+line_number+20, 0);
clearviewport();
strcpy(&text_buff[0], buffer);
stringlength = strlen(buffer);

moveto(8, 0);

if (stringlength < 35)
{
outtext(&text_buff[0]);
}
else
{
memcpy(truncated_buff, text_buff, 33);
truncated_buff[33] = 0x00;
outtext(&truncated_buff[0]);
}

last_line = line_number;

setviewport(viewinfo.left, viewinfo.top, viewinfo.right, viewinfo.bottom, 0);
getviewsettings(&viewinfo);
}


使用时

char ccbuff [MAX_TEXT_BUFFER];
if (status == CMD_NOT_PROCESSED)
{
sprintf (ccbuff, "Undefined command: %s\n", cargv [0]);
output_fabio_message(ccbuff, SAME_LINE);
}
else
{
sprintf (ccbuff, "Unknown command: %s\n", cargv [0]);
output_fabio_message(ccbuff, NEXT_LINE);
}
。。。。。

读书人网 >C语言

热点推荐