⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 在unix下用c编写curses程序的一些常用模块.htm

📁 curses界面编程
💻 HTM
📖 第 1 页 / 共 5 页
字号:
	<tr><td valign=top><br>		总有人问这个问题,下面是整理的模块代码,可以作为编程的参考demo。
<br>
<br>几个部分可以连接起来编译程可执行程序运行。
<br>
<br>初始化资源
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;initial&#40;&#41;&nbsp;/*&nbsp;自定开启&nbsp;curses&nbsp;函式&nbsp;*/&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;initscr&#40;&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;cbreak&#40;&#41;;&nbsp;nonl&#40;&#41;;&nbsp;noecho&#40;&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;intrflush&#40;stdscr,FALSE&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;keypad&#40;stdscr,TRUE&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;refresh&#40;&#41;;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;按键等待函数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;keycont&#40;&#41;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;fprintf&#40;stderr,&nbsp;&quot;按键继续...&quot;&#41;;&nbsp;getchar&#40;&#41;;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;运行可执行程序函数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;execprog&#40;&#41;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;system&#40;&quot;clear&quot;&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;fprintf&#40;stderr,&nbsp;&quot;%s&#58;&nbsp;\n&quot;,&nbsp;scrpos-&gt;item&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;system&#40;scrpos-&gt;prog&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;keycont&#40;&#41;;&nbsp;initial&#40;&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;touchwin&#40;boxwin&#41;;&nbsp;touchwin&#40;curw&#41;;&nbsp;keypad&#40;curw,&nbsp;TRUE&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;wrefresh&#40;boxwin&#41;;&nbsp;wrefresh&#40;curw&#41;;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;清除窗口函数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;clearwin&#40;&#41;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;wmove&#40;boxwin,&nbsp;0,&nbsp;0&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;wclrtobot&#40;boxwin&#41;;&nbsp;wrefresh&#40;boxwin&#41;;&nbsp;delwin&#40;curw&#41;;&nbsp;delwin&#40;boxwin&#41;;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>
<br>/*&nbsp;主函数&nbsp;*/&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>main&#40;&#41;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;initial&#40;&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;getmenuconf&#40;0&#41;;&nbsp;/*&nbsp;取第0号菜单参数&nbsp;*/&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;创建主窗口&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;menuwin=newwin&#40;m_conf.m_lengh,&nbsp;m_conf.m_wight,&nbsp;m_conf.m_bx+1,&nbsp;m_conf.m_by+1&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;curw=menuwin;&nbsp;lastw&#91;wno&#93;=menuwin;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;getitem&#40;&#41;;&nbsp;/*&nbsp;取当前菜单各项内容&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;domenu&#40;head,&nbsp;0&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;endwin&#40;&#41;;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;取菜单各项参数函数&nbsp;*/&nbsp;&nbsp;
<br>
<br>[code:1:b2615b2355]
<br>
<br>void&nbsp;getitem&#40;&#41;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*fp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;buff&#91;0x100&#93;;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;建边框窗口&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;boxwin=newwin&#40;m_conf.m_lengh+2,m_conf.m_wight+2,m_conf.m_bx,m_conf.m_by&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;keypad&#40;curw,&nbsp;TRUE&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;m_conf.bord_flag==1&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	box&#40;boxwin,&nbsp;0,0&nbsp;&#41;;&nbsp;&nbsp;
<br>	wrefresh&#40;boxwin&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;head=NULL;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&#40;fp&nbsp;=&nbsp;fopen&#40;&quot;./menu.def&quot;,&quot;r&quot;&#41;&#41;&nbsp;==&nbsp;NULL&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	fprintf&#40;stderr,&nbsp;&quot;\n不能打开菜单定义文件\n&quot;&#41;;&nbsp;&nbsp;
<br>	return;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;while&#40;&nbsp;fgets&#40;buff,&nbsp;0x100,&nbsp;fp&#41;!=NULL&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	get_m_item&#40;buff&#41;;&nbsp;&nbsp;
<br>
<br>	if&nbsp;&#40;m_item.menu_code&nbsp;!=&nbsp;menu_no&#41;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;continue;&nbsp;&nbsp;
<br>
<br>	new=&#40;struct&nbsp;menu*&#41;malloc&#40;sizeof&#40;struct&nbsp;menu&#41;&#41;;&nbsp;&nbsp;
<br>	if&nbsp;&#40;head&nbsp;==&nbsp;NULL&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;=&nbsp;head;&nbsp;head&nbsp;=&nbsp;new;&nbsp;&nbsp;
<br>	&#125;&nbsp;&nbsp;
<br>	else&nbsp;&#123;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;this-&gt;next&nbsp;=&nbsp;new;&nbsp;last&nbsp;=&nbsp;this;&nbsp;&nbsp;
<br>	&#125;&nbsp;&nbsp;
<br>	this&nbsp;=&nbsp;new;&nbsp;&nbsp;
<br>	this-&gt;menu_code=m_item.menu_code;&nbsp;&nbsp;
<br>	this-&gt;item_order=m_item.item_order;&nbsp;&nbsp;
<br>	strcpy&#40;this-&gt;item,m_item.item&#41;;&nbsp;&nbsp;
<br>	strcpy&#40;this-&gt;prog,m_item.prog&#41;;&nbsp;&nbsp;
<br>	this-&gt;submenu_code=m_item.submenu_code;&nbsp;&nbsp;
<br>	this-&gt;next=NULL;&nbsp;&nbsp;
<br>	this-&gt;prev&nbsp;=&nbsp;last;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;fclose&#40;fp&#41;;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;菜单处理函数&nbsp;*/&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;domenu&#40;curscrp,&nbsp;curp&#41;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;menu&nbsp;*curscrp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;curp;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i,&nbsp;x,&nbsp;y;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;menu&nbsp;*mpos;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;this&nbsp;=&nbsp;head;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;disponepage&#40;this&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;curpos&nbsp;=&nbsp;curp;&nbsp;scrpos&nbsp;=&nbsp;curscrp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;lastcurpos&nbsp;=&nbsp;lastscrcurpos&nbsp;=&nbsp;0;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;revcurpos&#40;&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;for&#40;;;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	switch&nbsp;&#40;wgetch&#40;curw&#41;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;ENT&#58;&nbsp;&nbsp;
<br>		/*&nbsp;有下一级菜单&nbsp;*/&nbsp;&nbsp;
<br>		if&nbsp;&#40;&#40;!strcmp&#40;scrpos-&gt;prog,&nbsp;&quot;0&quot;&#41;&#41;&nbsp;&&&nbsp;&#40;scrpos-&gt;submenu_code&nbsp;!=&nbsp;0&#41;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;lastbegin&nbsp;=&nbsp;begin-&gt;next;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;getmenuconf&#40;scrpos-&gt;submenu_code&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;menu_no&nbsp;=&nbsp;scrpos-&gt;submenu_code;&nbsp;&nbsp;
<br>
<br>		&nbsp;&nbsp;&nbsp;&nbsp;wno++;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;lastmenucur&#91;wno&#93;=curpos;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;lastscr&#91;wno&#93;&nbsp;=&nbsp;scrpos;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;lastw&#91;wno&#93;=curw;&nbsp;&nbsp;
<br>
<br>		&nbsp;&nbsp;&nbsp;&nbsp;workwin=newwin&#40;m_conf.m_lengh,m_conf.m_wight,m_conf.m_bx+1,m_conf.m_by+1&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;curw=workwin;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;getitem&#40;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;domenu&#40;head,&nbsp;0&#41;;&nbsp;&nbsp;
<br>		&#125;&nbsp;&nbsp;
<br>		/*&nbsp;是内部函数&nbsp;*/&nbsp;&nbsp;
<br>		/*&nbsp;是外部可执行程序&nbsp;*/&nbsp;&nbsp;
<br>		else&nbsp;&#123;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;endwin&#40;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;execprog&#40;&#41;;&nbsp;&nbsp;
<br>		&#125;&nbsp;&nbsp;
<br>		break;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;ESC&#58;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'q'&#58;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'Q'&#58;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'0'&#58;&nbsp;&nbsp;
<br>		/*&nbsp;无上级菜单&nbsp;*/&nbsp;&nbsp;
<br>		if&nbsp;&#40;m_conf.last_code&nbsp;==&nbsp;-1&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;clearwin&#40;&#41;;&nbsp;endwin&#40;&#41;;&nbsp;exit&#40;0&#41;;&nbsp;&nbsp;
<br>		&#125;&nbsp;&nbsp;
<br>		/*&nbsp;有上级菜单&nbsp;*/&nbsp;&nbsp;
<br>		else&nbsp;&#123;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;menu_no&nbsp;=&nbsp;m_conf.last_code;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;clearwin&#40;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;getmenuconf&#40;menu_no&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;getitem&#40;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;touchwin&#40;lastw&#91;wno&#93;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;curw=lastw&#91;wno&#93;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;curpos&nbsp;=&nbsp;lastmenucur&#91;wno&#93;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;scrpos&nbsp;=&nbsp;lastscr&#91;wno&#93;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;wno--;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;wrefresh&#40;curw&#41;;&nbsp;&nbsp;
<br>		&#125;&nbsp;&nbsp;
<br>		break;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'r'&#58;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;'R'&#58;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;REFRESH&#58;&nbsp;/*&nbsp;重显屏幕&nbsp;*/&nbsp;&nbsp;
<br>		wrefresh&#40;curscr&#41;;&nbsp;&nbsp;
<br>		break;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;KEY_RIGHT&#58;&nbsp;/*&nbsp;右光标键&nbsp;*/&nbsp;&nbsp;
<br>		if&nbsp;&#40;&nbsp;scrpos-&gt;next&nbsp;!=&nbsp;NULL&nbsp;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;lastcurpos&nbsp;=&nbsp;curpos;&nbsp;lastscrpos&nbsp;=&nbsp;scrpos;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;scrpos=scrpos-&gt;next;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;getyx&#40;curw,&nbsp;x,&nbsp;y&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;if&#40;&#40;x==m_conf.m_lengh-1&#41;&&&#40;curpos%m_conf.m_col==m_conf.m_col-1&#41;&#41;&#123;&nbsp;&nbsp;
<br>			curpos-=&#40;m_conf.m_col-1&#41;;&nbsp;lastcurpos&nbsp;=&nbsp;curpos&nbsp;-&nbsp;1;&nbsp;&nbsp;
<br>			/*&nbsp;实现向上卷屏&nbsp;*/&nbsp;&nbsp;
<br>			wmove&#40;curw,&nbsp;0,&nbsp;0&#41;;&nbsp;wdeleteln&#40;curw&#41;;&nbsp;dispnextline&#40;&quot;R&quot;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;
<br>			curpos++;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&#40;curpos%m_conf.m_col&nbsp;==&nbsp;0&#41;&nbsp;&&&nbsp;&#40;m_conf.m_lengh&nbsp;==&nbsp;1&#41;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>			revcurpos&#40;&#41;;&nbsp;break;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&#123;&nbsp;&nbsp;
<br>			nomlastpos&#40;&#41;;&nbsp;revcurpos&#40;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>		&#125;&nbsp;&nbsp;
<br>		break;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;KEY_LEFT&#58;&nbsp;/*&nbsp;左光标键&nbsp;*/&nbsp;&nbsp;
<br>		if&nbsp;&#40;&nbsp;scrpos-&gt;prev&nbsp;!=&nbsp;NULL&nbsp;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;lastcurpos&nbsp;=&nbsp;curpos;&nbsp;lastscrpos&nbsp;=&nbsp;scrpos;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;scrpos=scrpos-&gt;prev;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;getyx&#40;curw,&nbsp;x,&nbsp;y&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&#40;x==0&#41;&nbsp;&&&nbsp;&#40;curpos%m_conf.m_col&nbsp;==0&#41;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>			curpos+=m_conf.m_col-1;&nbsp;lastcurpos&nbsp;=&nbsp;curpos&nbsp;+&nbsp;1;&nbsp;&nbsp;
<br>			/*&nbsp;实现向下卷屏&nbsp;*/&nbsp;&nbsp;
<br>			winsertln&#40;curw&#41;;&nbsp;dispprevline&#40;&quot;L&quot;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;
<br>			curpos--;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&#40;curpos%m_conf.m_col==m_conf.m_col-1&#41;&&&#40;m_conf.m_lengh==1&#41;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>			revcurpos&#40;&#41;;&nbsp;break;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&#123;&nbsp;&nbsp;
<br>			nomlastpos&#40;&#41;;&nbsp;revcurpos&#40;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>		&#125;&nbsp;&nbsp;
<br>		break;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;KEY_UP&#58;&nbsp;/*&nbsp;上光标键&nbsp;*/&nbsp;&nbsp;
<br>		lastcurpos&nbsp;=&nbsp;curpos;&nbsp;lastscrpos&nbsp;=&nbsp;scrpos;&nbsp;&nbsp;
<br>		mpos&nbsp;=&nbsp;scrpos;&nbsp;&nbsp;
<br>		for&#40;i=0;&nbsp;i&lt;m_conf.m_col;i++&#41;&#123;//无双修改i/td&gt;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&nbsp;mpos-&gt;prev&nbsp;!=&nbsp;NULL&nbsp;&#41;&nbsp;mpos=mpos-&gt;prev;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;break;&nbsp;&nbsp;
<br>		&#125;&nbsp;&nbsp;
<br>		if&nbsp;&#40;&nbsp;i==m_conf.m_col&nbsp;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;getyx&#40;curw,&nbsp;x,&nbsp;y&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;x==0&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>			lastcurpos&nbsp;+=&nbsp;m_conf.m_col;&nbsp;&nbsp;
<br>			/*&nbsp;实现向下卷屏&nbsp;*/&nbsp;&nbsp;
<br>			winsertln&#40;curw&#41;;&nbsp;dispprevline&#40;&quot;U&quot;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&#123;&nbsp;&nbsp;
<br>			curpos-=m_conf.m_col;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;scrpos&nbsp;=&nbsp;mpos;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&nbsp;m_conf.m_lengh!=1&#41;&nbsp;&nbsp;
<br>			nomlastpos&#40;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;revcurpos&#40;&#41;;&nbsp;&nbsp;
<br>		&#125;&nbsp;&nbsp;
<br>		break;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;KEY_DOWN&#58;&nbsp;/*&nbsp;下光标键&nbsp;*/&nbsp;&nbsp;
<br>		lastcurpos&nbsp;=&nbsp;curpos;&nbsp;lastscrpos&nbsp;=&nbsp;scrpos;&nbsp;&nbsp;
<br>		mpos&nbsp;=&nbsp;scrpos;&nbsp;&nbsp;
<br>		for&#40;i=0;i&lt;m_conf.m_col;i++&#41;&#123;//无双修改i/td&gt;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&nbsp;mpos-&gt;next&nbsp;!=&nbsp;NULL&nbsp;&#41;&nbsp;&nbsp;
<br>			mpos=mpos-&gt;next;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;
<br>			break;&nbsp;&nbsp;
<br>		&#125;&nbsp;&nbsp;
<br>		if&nbsp;&#40;&nbsp;i==m_conf.m_col&nbsp;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;getyx&#40;curw,&nbsp;x,&nbsp;y&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;x==m_conf.m_lengh-1&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>			lastcurpos&nbsp;-=&nbsp;m_conf.m_col;&nbsp;&nbsp;
<br>			/*&nbsp;实现向上卷屏&nbsp;*/&nbsp;&nbsp;
<br>			wmove&#40;curw,&nbsp;0,&nbsp;0&#41;;&nbsp;wdeleteln&#40;curw&#41;;&nbsp;dispnextline&#40;&quot;D&quot;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;
<br>			curpos+=m_conf.m_col;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;scrpos&nbsp;=&nbsp;mpos;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&nbsp;m_conf.m_lengh!=1&#41;&nbsp;&nbsp;
<br>			nomlastpos&#40;&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;revcurpos&#40;&#41;;&nbsp;&nbsp;
<br>		&#125;&nbsp;&nbsp;
<br>		break;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;default&#58;&nbsp;&nbsp;
<br>		beep&#40;&#41;;&nbsp;&nbsp;
<br>		break;&nbsp;&nbsp;
<br>	&#125;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;反显当前项函数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;revcurpos&#40;&#41;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;wattrset&#40;curw,&nbsp;A_STANDOUT&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;wmove&#40;curw,&nbsp;curpos/m_conf.m_col,&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;&#40;curpos%m_conf.m_col&#41;*m_conf.m_wight/m_conf.m_col+m_conf.m_col&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;wprintw&#40;curw,&nbsp;&quot;%s&quot;,&nbsp;scrpos-&gt;item&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;wattrset&#40;curw,&nbsp;A_NORMAL&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;wrefresh&#40;boxwin&#41;;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;正常显示上一项函数&nbsp;*/&nbsp;&nbsp;
<br>[code:1:b2615b2355]
<br>&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;nomlastpos&#40;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	wmove&#40;curw,&nbsp;lastcurpos/m_conf.m_col,&nbsp;&#40;lastcurpos%m_conf.m_col&#41;&nbsp;&nbsp;
<br>		*m_conf.m_wight/m_conf.m_col+m_conf.m_col&#41;;&nbsp;&nbsp;
<br>	wprintw&#40;curw,&nbsp;&quot;%s&quot;,&nbsp;lastscrpos-&gt;item&#41;;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;显示一页函数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;disponepage&#40;first&#41;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;menu&nbsp;*first;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;col,&nbsp;row;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;begin=first;&nbsp;/*&nbsp;begin&nbsp;为本页首指针&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;for&#40;row=0;row&lt;m_conf.m_lengh&nbsp;;row++&#41;&#123;//无双修改row/td&gt;&nbsp;&nbsp;
<br>	//这两个地方都不是很清楚,我想这个函数是想打印菜单的,所以照这个意思写
<br>	for&#40;col=0;col&lt;m_conf.m_col;col++&#41;&#123;//无双修改&nbsp;col/td&gt;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;m_conf.m_wight/m_col为每一菜单项应占列数*/&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;wmove&#40;curw,row,col*m_conf.m_wight/m_conf.m_col+m_conf.m_col&#41;;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;wprintw&#40;curw,&nbsp;&quot;%s&quot;,&nbsp;first-&gt;item&#41;;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;wrefresh&#40;curw&#41;;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;=&nbsp;first;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;first&nbsp;=&nbsp;first-&gt;next;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;first&nbsp;==&nbsp;NULL&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		break;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>	&#125;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;显示上一行函数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;dispprevline&#40;flag&#41;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;flag&#91;2&#93;;&nbsp;/*&nbsp;L-左光标引起&nbsp;U-上光标引起&nbsp;*/&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;menu&nbsp;*tmppos;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;tmpcurpos;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;tmpcurpos&nbsp;=&nbsp;curpos;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;tmppos&nbsp;=&nbsp;scrpos;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&nbsp;flag&#91;0&#93;&nbsp;==&nbsp;'U'&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	while&nbsp;&#40;&nbsp;tmpcurpos&nbsp;%&nbsp;m_conf.m_col&nbsp;!=&nbsp;0&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;tmppos&nbsp;=&nbsp;tmppos-&gt;prev;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;tmpcurpos--;&nbsp;&nbsp;
<br>	&#125;&nbsp;&nbsp;
<br>	tmppos&nbsp;=&nbsp;tmppos-&gt;prev;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&#40;tmpcurpos&nbsp;=&nbsp;m_conf.m_col-1;&nbsp;tmpcurpos&nbsp;&gt;=&nbsp;0;&nbsp;tmpcurpos--&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	wmove&#40;curw,&nbsp;0,&nbsp;&#40;tmpcurpos%m_conf.m_col&#41;&nbsp;&nbsp;
<br>		*m_conf.m_wight/m_conf.m_col+m_conf.m_col&#41;;&nbsp;&nbsp;
<br>	wprintw&#40;curw,&nbsp;&quot;%s&quot;,&nbsp;tmppos-&gt;item&#41;;&nbsp;&nbsp;
<br>	begin&nbsp;=&nbsp;tmppos;&nbsp;/*begin&nbsp;为本页首指针*/&nbsp;&nbsp;
<br>	last&nbsp;=&nbsp;tmppos;&nbsp;&nbsp;
<br>	tmppos&nbsp;=&nbsp;tmppos-&gt;prev;&nbsp;&nbsp;
<br>	if&nbsp;&#40;tmppos&nbsp;==&nbsp;NULL&#41;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;wrefresh&#40;curw&#41;;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;显示下一行函数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;dispnextline&#40;flag&#41;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;flag&#91;2&#93;;/*&nbsp;R-右光标引起&nbsp;D-下光标引起&nbsp;*/&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;menu&nbsp;*tmppos;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;tmpcurpos;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;tmpcurpos&nbsp;=&nbsp;curpos;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;tmppos&nbsp;=&nbsp;scrpos;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&nbsp;flag&#91;0&#93;&nbsp;==&nbsp;'D'&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	while&nbsp;&#40;&nbsp;tmpcurpos&nbsp;%&nbsp;m_conf.m_col&nbsp;!=&nbsp;m_conf.m_col-1&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;tmppos&nbsp;=&nbsp;tmppos-&gt;next;&nbsp;tmpcurpos++;&nbsp;&nbsp;
<br>	&#125;&nbsp;&nbsp;
<br>	tmppos&nbsp;=&nbsp;tmppos-&gt;next;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&#40;tmpcurpos&nbsp;=&nbsp;0;&nbsp;tmpcurpos&nbsp;&lt;&nbsp;m_conf.m_col;&nbsp;tmpcurpos++&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	wmove&#40;curw,&nbsp;m_conf.m_lengh-1,&nbsp;&#40;tmpcurpos%m_conf.m_col&#41;&nbsp;&nbsp;
<br>		*m_conf.m_wight/m_conf.m_col+m_conf.m_col&#41;;&nbsp;&nbsp;
<br>	wprintw&#40;curw,&nbsp;&quot;%s&quot;,&nbsp;tmppos-&gt;item&#41;;&nbsp;&nbsp;
<br>	last=tmppos;/*&nbsp;last&nbsp;为本页最后一个结点指针&nbsp;*/&nbsp;&nbsp;
<br>	begin=tmppos;&nbsp;tmppos&nbsp;=&nbsp;tmppos-&gt;next;&nbsp;&nbsp;
<br>	if&nbsp;&#40;tmppos&nbsp;==&nbsp;NULL&#41;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>/*&nbsp;取指定菜单参数函数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;getmenuconf&#40;menu_code&#41;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;menu_code;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*fp;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;menu_buff&#91;0x100&#93;;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&#40;fp&nbsp;=&nbsp;fopen&#40;&quot;menu.conf&quot;,&nbsp;&quot;r&quot;&#41;&#41;==NULL&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	fprintf&#40;stderr,&nbsp;&quot;can&nbsp;not&nbsp;open&nbsp;menu&nbsp;config&nbsp;file&quot;&#41;;&nbsp;&nbsp;
<br>	return;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;while&#40;&nbsp;fgets&#40;menu_buff,&nbsp;0x100,&nbsp;fp&#41;!=NULL&nbsp;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	get_m_conf&#40;menu_buff&#41;;&nbsp;&nbsp;
<br>	if&nbsp;&#40;m_conf.menu_code&nbsp;==&nbsp;menu_code&#41;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>[/code:1:b2615b2355]
<br>
<br>
<br>
<br>
<br>/*&nbsp;取指定菜单参数处理函数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;get_m_conf&#40;menu_conf&#41;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*menu_conf;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;register&nbsp;i,&nbsp;j,&nbsp;k;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;buff&#91;20&#93;;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;k&nbsp;=&nbsp;0;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&#40;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;strlen&#40;menu_conf&#41;;&nbsp;i++&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	if&nbsp;&#40;&nbsp;menu_conf&#91;i&#93;&nbsp;==&nbsp;'!'&nbsp;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;j++;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&nbsp;j&nbsp;==&nbsp;1&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		k&nbsp;=&nbsp;i+1;&nbsp;&nbsp;
<br>		continue;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;switch&#40;j&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		case&nbsp;2&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_conf&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;=0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_conf.menu_code&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;3&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_conf&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;=0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_conf.last_code&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;4&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_conf&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;=0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_conf.bord_flag&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;5&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_conf&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;=0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_conf.m_wight&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;6&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_conf&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;=0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_conf.m_lengh&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;7&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_conf&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;=0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_conf.m_col&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;8&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_conf&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;=0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_conf.m_bx&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;9&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_conf&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;=0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_conf.m_by&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		default&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>	&#125;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>[/code:1:b2615b2355]
<br>
<br>
<br>/*&nbsp;取指定项参数处理函数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;[code:1:b2615b2355]
<br>void&nbsp;get_m_item&#40;menu_item&#41;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*menu_item;&nbsp;&nbsp;
<br>&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;register&nbsp;i,&nbsp;j,&nbsp;k;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;buff&#91;80&#93;;&nbsp;&nbsp;
<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;j&nbsp;=&nbsp;k&nbsp;=&nbsp;0;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;&#40;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;strlen&#40;menu_item&#41;;&nbsp;i++&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	if&nbsp;&#40;&nbsp;menu_item&#91;i&#93;&nbsp;==&nbsp;'!'&nbsp;&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;j++;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;&#40;&nbsp;j&nbsp;==&nbsp;1&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		k&nbsp;=&nbsp;i+1;&nbsp;&nbsp;
<br>		continue;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;switch&#40;j&#41;&nbsp;&#123;&nbsp;&nbsp;
<br>		case&nbsp;2&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_item&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;&nbsp;=&nbsp;0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_item.menu_code&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;3&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_item&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;&nbsp;=&nbsp;0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_item.item_order&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;4&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_item&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;&nbsp;=&nbsp;0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;strcpy&#40;m_item.item,buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;5&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_item&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;&nbsp;=&nbsp;0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;strcpy&#40;m_item.prog,buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		case&nbsp;6&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;memcpy&#40;buff,&nbsp;&menu_item&#91;k&#93;,&nbsp;i-k&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;buff&#91;i-k&#93;&nbsp;=&nbsp;0;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;m_item.submenu_code&nbsp;=&nbsp;atoi&#40;buff&#41;;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;k=i+1;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>		default&#58;&nbsp;&nbsp;
<br>		&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;&nbsp;
<br>	&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>	&#125;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&#125;&nbsp;&nbsp;
<br>&#125;&nbsp;&nbsp;
<br>
<br>[/code:1:b2615b2355]
<br>
<br>数据结构和头文件等初始化信息
<br>[code:1:b2615b2355]
<br>#include&nbsp;&nbsp;
<br>#define&nbsp;ESC&nbsp;27&nbsp;&nbsp;
<br>#define&nbsp;ENT&nbsp;13&nbsp;&nbsp;
<br>#define&nbsp;REFRESH&nbsp;12&nbsp;&nbsp;
<br>#define&nbsp;MAX_M&nbsp;10&nbsp;/*&nbsp;菜单最大层数&nbsp;*/&nbsp;&nbsp;
<br>
<br>void&nbsp;initial&#40;&#41;,nomlastpos&#40;&#41;,revcurpos&#40;&#41;,disponepage&#40;&#41;,dispprevline&#40;&#41;;&nbsp;&nbsp;
<br>void&nbsp;dispnextline&#40;&#41;,domenu&#40;&#41;,getmenuconf&#40;&#41;,keycont&#40;&#41;;&nbsp;&nbsp;
<br>void&nbsp;getitem&#40;&#41;,&nbsp;get_m_conf&#40;&#41;,&nbsp;get_m_item&#40;&#41;,clearwin&#40;&#41;,execprog&#40;&#41;;&nbsp;&nbsp;
<br>/*&nbsp;标识每一菜单项的结构&nbsp;*/&nbsp;&nbsp;
<br>struct&nbsp;menu&nbsp;&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;menu_code;&nbsp;/*&nbsp;所属菜单代号&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;item_order;&nbsp;/*&nbsp;项顺序号&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;item&#91;20&#93;;&nbsp;/*&nbsp;菜单项名称&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;prog&#91;80&#93;;&nbsp;/*&nbsp;本项菜单执行程序&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;submenu_code;&nbsp;/*&nbsp;下一级菜单编号&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;menu&nbsp;*next;&nbsp;/*&nbsp;指向上一项的指针&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;menu&nbsp;*prev;&nbsp;/*&nbsp;指向下一项的指针&nbsp;*/&nbsp;&nbsp;
<br>&#125;&nbsp;m_item,*head,*this,*new,*last,*scrpos,*lastscrpos,*begin,*lastbegin,*lastscr&#91;MAX_M&#93;;&nbsp;&nbsp;
<br>/*&nbsp;标识每一菜单内容的结构&nbsp;*/&nbsp;&nbsp;
<br>struct&nbsp;menuconf&nbsp;&#123;&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;menu_code;&nbsp;/*&nbsp;菜单代号&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;last_code;&nbsp;/*&nbsp;上一级菜单代号&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;bord_flag;&nbsp;/*&nbsp;边框标志&nbsp;0--无边框&nbsp;1--有边框&nbsp;**/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;m_wight;&nbsp;/*&nbsp;菜单显示宽度&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;m_lengh;&nbsp;/*&nbsp;每一行项数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;m_col;&nbsp;/*&nbsp;菜单列数&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;m_bx;&nbsp;/*&nbsp;菜单起始横坐标&nbsp;*/&nbsp;&nbsp;
<br>&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;m_by;&nbsp;/*&nbsp;菜单起始纵坐标&nbsp;*/&nbsp;&nbsp;
<br>&#125;&nbsp;m_conf;&nbsp;&nbsp;
<br>WINDOW&nbsp;*menuwin,&nbsp;*boxwin,&nbsp;*curw,&nbsp;*lastw&#91;MAX_M&#93;,&nbsp;*workwin;&nbsp;&nbsp;
<br>long&nbsp;curpos,&nbsp;lastcurpos,&nbsp;lastscrcurpos,&nbsp;lastmenucur&#91;MAX_M&#93;;&nbsp;&nbsp;
<br>short&nbsp;menu_no&nbsp;=&nbsp;0,&nbsp;wno&nbsp;=&nbsp;0;&nbsp;&nbsp;
<br>
<br>[/code:1:b2615b2355]<br>	<br>	</td></tr>	</table></td></tr><tr><td align=center><small>【<a href=http://www.chinaunix.net/forum/posting.php?mode=reply&t=78395>发表回复</a>】【<a href=http://www.chinaunix.net/forum/viewtopic.php?t=78395>查看CU论坛原帖</a>】【<a href="javascript:window.close()">关闭</a>】</small></td></tr></table><!-----------回复-----------><table border="0" width=75%  cellspacing="0" cellpadding="0" ><tr><td bgcolor=#EDF0F5>	<table border="0" width=90% cellspacing="0" cellpadding="0" align=center style='border-collapse: collapse; WORD-BREAK: break-all'>	<tr><td ><hr><small>&nbsp;<a href=http://www.chinaunix.net/forum/profile.php?mode=viewprofile&u=27601 target=_blank>yikaikai</a> 回复于:2003-05-28 08:10:57</small></td></tr><tr><td>版主加为精华啊<br><br></td></tr><tr><td ><hr><small>&nbsp;<a href=http://www.chinaunix.net/forum/profile.php?mode=viewprofile&u=12254 target=_blank>superzhang</a> 回复于:2003-05-28 08:22:31</small></td></tr><tr><td>确实不错,值得收藏.<br><br></td></tr><tr><td ><hr><small>&nbsp;<a href=http://www.chinaunix.net/forum/profile.php?mode=viewprofile&u=57921 target=_blank>win_bigboy</a> 回复于:2003-05-28 14:42:32</small></td></tr><tr><td>实在谢谢你了,我一直有写些&nbsp;窗口函数的念头只是一直没有时间.
<br>还有没有,<br><br></td></tr><tr><td ><hr><small>&nbsp;<a href=http://www.chinaunix.net/forum/profile.php?mode=viewprofile&u=57921 target=_blank>win_bigboy</a> 回复于:2003-05-28 15:22:46</small></td></tr><tr><td>大师,&nbsp;有没有画Line&nbsp;&nbsp;和画&nbsp;box&nbsp;的函数???<br><br></td></tr><tr><td ><hr><small>&nbsp;<a href=http://www.chinaunix.net/forum/profile.php?mode=viewprofile&u=20281 target=_blank>天祥星辰</a> 回复于:2003-05-28 15:32:29</small></td></tr><tr><td>好!&nbsp;&nbsp;&nbsp;收藏!&nbsp;&nbsp;正需要呢!<br><br></td></tr>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -