C下面的图形编程,刷新屏幕用哪种方式比较快?

freespider 2003-11-19 12:07:41
C++中可以通过memdc提供速度,c中怎么做呢?

另现在要用c编写图形程序,手边资料不够,请各位推荐一些。

谢谢!
...全文
46 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
freespider 2003-11-19
  • 打赏
  • 举报
回复
怎么写啊?
Meyer 2003-11-19
  • 打赏
  • 举报
回复
内存拷贝应该比较快了
freespider 2003-11-19
  • 打赏
  • 举报
回复
up
freespider 2003-11-19
  • 打赏
  • 举报
回复
up
zxftdm 2003-11-19
  • 打赏
  • 举报
回复
initscr()

initscr() 是一般 curses 程式必须先呼叫的函数, 一但这个函数
被呼叫之後, 系统将根据终端机的形态并启动 curses 模式.


□ endwin()

curses 通常以呼叫 endwin() 来结束程式. endwin() 可用来关闭
curses 模式, 或是暂时的跳离 curses 模式.如果您在程式中须要
call shell ( 如呼叫 system() 函式 ) 或是需要做 system call,
就必须先以 endwin() 暂时跳离 curses 模式. 最後再以
wrefresh() doupdate() 来重返 curses 模式.


□ cbreak()
nocbreak()

当 cbreak 模式被开启後, 除了 DELETE 或 CTRL 等仍被视为特殊
控制字元外一切输入的字元将立刻被一一读取.当处於 nocbreak 模
式时, 从键盘输入的字元将被储存在 buffer 里直到输入 RETURN
或 NEWLINE.在较旧版的 curses 须呼叫 crmode(),nocrmode() 来
取代 cbreak(),nocbreak()


□ nl()
nonl()

用来决定当输入资料时, 按下 RETURN 键是否被对应为 NEWLINE 字
元 ( 如 \n ).
而输出资料时, NEWLINE 字元是否被对应为 RETURN 和 LINDFEED
系统预设是开启的.



□ echo()
noecho()

此函式用来控制从键盘输入字元时是否将字元显示在终端机上.系统
预设是开启的.


□ intrflush(win,bf)

呼叫 intrflush 时须传入两个值:
win 为一 WINDOW 型态指标, 通常传入标准输出入萤幕 stdscr
bf 为 TRUE 或 FALSE

当 bf 为 true 时, 当输入中断字元 ( 如 break) 时, 中断的反应
将较为快速.但可能会造成萤幕的错乱.



□ keypad(win,bf)

呼叫 keypad 时须传入两个值:
win 为一 WINDOW 型态指标, 通常传入标准输出入萤幕 stdscr
bf 为 TRUE 或 FALSE

当开启 keypad 後, 可以使用键盘上的一些特殊字元, 如上下左右
等方向键, curses 会将这些特殊字元转换成 curses.h 内定义的一
些特殊键. 这些定义的特殊键通常以 KEY_ 开头.



□ refresh()

refresh() 为 curses 最常呼叫的一个函式.

curses 为了使萤幕输出入达最佳化, 当您呼叫萤幕输出函式企图改
变萤幕上的画面时, curses 并不会立刻对萤幕做改变, 而是等到
refresh() 呼叫後, 才将刚才所做的变动一次完成. 其馀的资料将
维持不变. 以尽可能送最少的字元至萤幕上. 减少萤幕重绘的时间.
如果是 initscr() 後第一次呼叫 refresh(), curses 将做清除萤
幕的工作.




■ 游标的控制

move(y,x) 将游标移动至 x,y 的位置
getyx(win,y,x) 得到目前游标的位置
(请注意! 是 y,x 而不是 &y,&x )


■ 有关清除萤幕的函式

clear()
erase() 将整个萤幕清除
(请注意配合refresh() 使用)


■ 如何在萤幕上显示字元

echochar(ch) 显示某个字元

addch(ch) 显示某个字元
mvaddch(y,x,ch) 在(x,y) 上显示某个字元
相当於呼叫 move(y,x);addch(ch);

addstr(str) 显示一串字串
mvaddstr(y,x,str) 在(x,y) 上显示一串字串
相当於呼叫 move(y,x);addstr(str);

printw(format,str) 类似 printf() , 以一定的格式输出至萤幕
mvprintw(y,x,format,str) 在(x,y) 位置上做 printw 的工作.
相当於呼叫 move(y,x);printw(format,str);



■ 如何从键盘上读取字元

getch() 从键盘读取一个字元 (注意! 传回的是
整数值)
getstr() 从键盘读取一串字元
scanw(format,&arg1,&arg2...) 如同 scanf, 从键盘读取一串字元

□例:

int ch;
char string1[80]; /* 请注意! 不可宣告为 char *string1; */
char string2[80];

echo(); /* 开启 echo 模式, 使输入立刻显示在萤幕上 */
ch=getch();
string1=getstr();
scanw("%s",string2);
mvprintw(10,10,"String1=%s",string1);
mvprintw(11,10,"String2=%s",string2);

■ 如何利用方向键

curses 将一些如方向键等特殊控制字元, 以 KEY_ 为开头定义在 curses.h

这个档案里头, 如 KEY_UP 即代表方向键的 " ↑ ". 但, 如果您想使用

curses.h 所为您定义的这些特殊键的话, 您就必须将 keypad 设定为

TRUE. 否则, 您就必须自己为所有的特殊键定义了.

curses.h 为一些特殊键的定义如下:

KEY_UP 0403 ↑
KEY_DOWN 0402 ↓
KEY_LEFT 0404 ←
KEY_RIGHT 0405 →
KEY_HOME 0406 Home key (upward+left arrow)
KEY_BACKSPACE 0407 backspace (unreliable)
KEY_F0 0410 Function keys.
KEY_F(n) (KEY_F0+(n)) formula for f .
KEY_NPAGE 0522 Next page
KEY_PPAGE 0523 Previous page
zxftdm 2003-11-19
  • 打赏
  • 举报
回复
refresh() 为 curses 最常呼叫的一个函式.
curses 为了使萤幕输出入达最佳化, 当您呼叫萤幕输出函式企图改变萤幕上的画面时, curses 并不会立刻对萤幕做改变, 而是等到refresh() 呼叫後, 才将刚才所做的变动一次完成. 其馀的资料将维持不变. 以尽可能送最少的字元至萤幕上. 减少萤幕重绘的时间.如果是 initscr() 後第一次呼叫 refresh(), curses 将做清除萤幕的工作.
freespider 2003-11-19
  • 打赏
  • 举报
回复
up
catowl 2003-11-19
  • 打赏
  • 举报
回复
UP
极速小王子 2003-11-19
  • 打赏
  • 举报
回复
不知道!
freespider 2003-11-19
  • 打赏
  • 举报
回复
up

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧