?? ch2.htm
字號(hào):
<html>
<head>
<title>第二章:從Hello World 程序開始</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="keywords" content="hello world, Hello,world,從Hello World 程序開始">
</head>
<body leftmargin=40 bgcolor="#DAFFFF" text="black" link="#0000ff" alink="blue" vlink="#940084">
<div align="center"><a href="index.htm"><font size="5">
<strong>
回 目 錄
</strong>
</font></a></div>
<div align="right">
<font size="5">
<a href="ch1.htm">
<strong>
上 一 章
</strong>
</a>
<a href="ch3.htm">
<strong>
下 一 章
</strong>
</a>
</font>
</div>
<br>
<br>
<br>
<h1 align="center">
第二章:從Hello World 程序開始
</h1>
<br>
<br>
<div align="left">
<font size="4">
<p>
<dd>
歡迎來(lái)到NCURSES的世界。在我們踏上學(xué)習(xí)NCURSES的路途之前,讓我們先寫一個(gè)小程序,來(lái)了解一下NCURSES的執(zhí)行結(jié)構(gòu)。
</dd>
</p>
<h3 align="left">
<a name="#compile">
2.1 編譯包含NCURSES函數(shù)的程序
</a>
</h3>
<p>
<dd>
如果要調(diào)用NCURSES庫(kù)中的函數(shù),你必須在代碼中加載ncurses.h文件,就是在C或C++程序中添加“#include <ncurses.h>”這一行。然后在連接程序中標(biāo)記出NCURSES。(注:NCURSES庫(kù)已經(jīng)包含了“stdio.h”)
</dd>
</p>
<font color="Maroon">
<xmp>
#include <ncurses.h>
.
.
.
compile and link: gcc <程序文件> -lncurses
</xmp>
</font>
<strong>
例1:Hello World !!!程序
</strong>
<br>
<font color="Maroon">
<xmp>
#include <ncurses.h>
int main()
{
initscr(); /* 初始化,進(jìn)入NCURSES模式 */
printw("Hello World !!!"); /* 在虛擬屏幕上打印Hello, World!!! */
refresh(); /* 將虛擬屏幕上的內(nèi)容寫到顯示器上,并刷新*/
getch(); /* 等待用戶輸入 */
endwin(); /* 退出NCURSES模式 */
return 0;
}
</xmp>
</font>
<h3 align="left">
<a name="#example">
2.2 示例剖析(Dissection)
</a>
</h3>
<br>
<p>
<dd>
這個(gè)程序在顯示器屏幕上打印“Hello World !!!”后等待用戶按任意鍵退出。這個(gè)小程序展示了如何初始化并進(jìn)入curses模式、處理屏幕操作和退出curses模式。讓我們逐行的分析這個(gè)小程序:
</dd>
</p>
<br>
<strong>
2.2.1 關(guān)于 initscr() 函數(shù)
</strong>
<p>
<dd>
initscr()函數(shù)將終端屏幕初始化為curses模式。它用來(lái)清除屏幕上所有的字符,使屏幕變?yōu)榭瞻祝却乱徊刻幚怼K栽谡{(diào)用其它的NCURSES函數(shù)前,都要先調(diào)用initscr()函數(shù)初始化屏幕。這個(gè)函數(shù)初始化了curses系統(tǒng)并且為當(dāng)前屏幕,也就是一個(gè)叫做被“stdscr”的窗口以及其它的數(shù)據(jù)結(jié)構(gòu)分配內(nèi)存。在以前的計(jì)算機(jī)上曾經(jīng)出現(xiàn)過一個(gè)非常極端的例子:因?yàn)橄到y(tǒng)中的可用內(nèi)存太小,以至于initscr()函數(shù)無(wú)法分配足夠的內(nèi)存給相關(guān)的數(shù)據(jù)結(jié)構(gòu),從而導(dǎo)致curses系統(tǒng)初始化失敗。我們將在以后的章節(jié)中詳細(xì)介紹如何定制屏幕的初始化模式。
</dd>
</p>
<br>
<strong>
2.2.2 神秘的refresh() 函數(shù)
</strong>
<br>
<p>
<dd>
第二行的printw函數(shù)用于把字符串“Hello,World!!!”輸出到虛擬的屏幕上。這個(gè)函數(shù)用法上和printf()函數(shù)很像。但是區(qū)別在于,printw函數(shù)把字符串輸出到被稱作“stdscr”的虛擬坐標(biāo)(0,0)上。從顯示的結(jié)果來(lái)看,坐標(biāo)(0,0)在屏幕的左上角上。
</dd>
</p>
<p>
<dd>
現(xiàn)在該說(shuō)說(shuō)這個(gè)神秘的refresh()函數(shù)了。在我們使用printw函數(shù)打印“Hello World!!!”時(shí),實(shí)際上這個(gè)數(shù)據(jù)被打印到一個(gè)叫作“stdscr”的虛擬窗口上,沒有被直接輸出到屏幕上。printw()函數(shù)的作用是不斷將一些顯示標(biāo)記和相關(guān)的數(shù)據(jù)結(jié)構(gòu)寫在虛擬顯示器上,并將這些數(shù)據(jù)寫入stdscr的緩沖區(qū)內(nèi)。所以,為了顯示這些緩沖區(qū)中的數(shù)據(jù)我們必須使用refresh()函數(shù)告訴curses系統(tǒng)將緩沖區(qū)的內(nèi)容輸出到屏幕上。
</dd>
</p>
<p>
<dd>
這種機(jī)制可以使程序員不斷在虛擬屏幕上寫入數(shù)據(jù),而調(diào)用refresh()函數(shù)時(shí)讓一切看起來(lái)似乎是一次完成的。因?yàn)閞efresh()函數(shù)只核查窗口和數(shù)據(jù)中變動(dòng)的部分,這種富有彈性的設(shè)計(jì)提供了一個(gè)高效的反饋機(jī)制。但是這有時(shí)很打擊初學(xué)者的積極性。因?yàn)閷?duì)于初學(xué)者來(lái)說(shuō)忘記在輸出后調(diào)用refresh()函數(shù)是很惱人的錯(cuò)誤。不過不用擔(dān)心,因?yàn)楹芏嗳艘步?jīng)常犯這樣的錯(cuò)誤。
</dd>
</p>
<br>
<strong>
2.2.3關(guān)于endwin()函數(shù)(About endwin())
</strong>
<p>
<dd>
最后,別忘了要結(jié)束curses顯示模式才可以返回到普通字符行模式。否則,在程序結(jié)束后你的終端可能會(huì)運(yùn)轉(zhuǎn)得不正常。endwin()函數(shù)釋放了curses子系統(tǒng)和相關(guān)數(shù)據(jù)結(jié)構(gòu)的內(nèi)存,使你的終端回到普通字符模式。這個(gè)函數(shù)必須是在你完成所有的curses操作以后才可以調(diào)用。(譯者注:如果你在endwin()函數(shù)后再調(diào)用curses的函數(shù)。很顯然,那些語(yǔ)句不會(huì)執(zhí)行。說(shuō)到這里,順便提醒一下。如果你的程序不能正常地顯示東西了。請(qǐng)務(wù)必看看initscr()函數(shù)和endwin()函數(shù)是不是在不該被調(diào)用的地方調(diào)用了。)
</dd>
</p>
<p>
<dd>
說(shuō)到這里,順便提醒一下。如果你的程序不顯示東西了。請(qǐng)務(wù)必看看initscr()函數(shù)和endwin()函數(shù)是不是在不該被調(diào)用的地方調(diào)用了!
</dd>
</p>
</font>
</div>
<br>
<br>
<br>
<div align="center"><a href="index.htm"><font size="5">
<strong>
回 目 錄
</strong>
</font></a></div>
<div align="right">
<font size="5">
<a href="ch1.htm">
<strong>
上 一 章
</strong>
</a>
<a href="ch3.htm">
<strong>
下 一 章
</strong>
</a>
</font>
</div>
<br>
<br>
<br>
</body>
</html>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -