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

📄 rcmenu.c

📁 UNIX 资源文件编译器
💻 C
字号:
/*****************************************************************************    ------------	子系统名称: 界面资源管理器*      RCMENU.H*    ------------	模块名称  : 菜单资源编译程序****************************************************************************/#include	"tools.h"#include	"menu.h"#include	"rc.h"/*****************************************************************************    函数原型: SetMenuHotKey ( PMENUITEM pmiTemp )**    功    能: 设置菜单热键**    编程人员: Zhu haibin**    编码时间: 1994/09/07**    修改时间:**    入口参数: char	*pText		菜单文本**    出口参数: 总为 OK**    实现算法: 1. 前导字符 '&' 表示的字母为热键, 热键必须为字母或数字**    上层调用: CompileMenu**    下层调用: 无****************************************************************************/short	SetMenuHotKey ( PMENUITEM pmiTemp ){	short	i;	pmiTemp->nHotKeyIndex = -1;	for ( i = 0; i < strlen ( pmiTemp->pText ); i++ )	{	  if ( pmiTemp->pText[i] == '&' )	  {	    if ( isalpha ( pmiTemp->pText[i+1] ) || isdigit ( pmiTemp->pText[i+1] ) )	    {	      pmiTemp->nHotKey = pmiTemp->pText[i+1];	      pmiTemp->nHotKeyIndex = i;	    }	    else	      pmiTemp->nHotKeyIndex = -1;	    strcpy ( &pmiTemp->pText[i], &pmiTemp->pText[i+1] );	    break;	  }	}	return ( OK );}/*****************************************************************************    函数原型: JustMenuText ( PMENU pmMenu )**    功    能: 调整菜单字符串长度**    编程人员: Zhu haibin**    编码时间: 1994/09/07**    修改时间:**    入口参数: PMENUITEM	pmiTemp		菜单项指针**    出口参数: 总为 OK**    实现算法:**    上层调用: CompileMenu**    下层调用: 无****************************************************************************/short	JustMenuText ( PMENU pmMenu ){	PMENUITEM	pmiTemp;	short		i, nLen;	char		pText[MAXL_MENUITEM];	for ( i = 0; i < pmMenu->nCount; i++ )	{	  pmiTemp = pmMenu->pmiTable[i];	  if ( pmiTemp->pText[0] != ' ' )	  {	    sprintf ( pText, " %s", pmiTemp->pText );	    if ( pmiTemp->nHotKeyIndex != -1 )	      pmiTemp->nHotKeyIndex ++;	  }	  else	    strcpy ( pText, pmiTemp->pText );	  if ( pmiTemp->nParent == -1 )	  {	    if ( pText[strlen(pText)-1] != ' ' )	      strcat ( pText, " " );	  }	  else if ( pmiTemp->nStyle != MS_SEPARATOR )	  {	    nLen = HIWORD ( pmMenu->pmiTable[pmiTemp->nParent]->lExtData );	    if ( ( nLen % 2 ) != 0 )	    {	      nLen ++;	      pmMenu->pmiTable[pmiTemp->nParent]->lExtData &= 0xFFFF;	      pmMenu->pmiTable[pmiTemp->nParent]->lExtData |= (DWORD)nLen << 16;	    }	    while ( strlen ( pText ) < nLen )	      strcat ( pText, " " );	  }	  else	  {	    pText[0] = 0;	    nLen = HIWORD ( pmMenu->pmiTable[pmiTemp->nParent]->lExtData );	    if ( ( nLen % 2 ) != 0 )	      nLen ++;	    while ( (short)strlen ( pText ) < nLen )#ifdef	HZD	      strcat ( pText, TAB_HLINE(LS_STAND) );#else	      pText[strlen(pText)] = (char*)TAB_HLINE(LS_STAND);#endif			  }	  strcpy ( pmiTemp->pText, pText );	}	return ( OK );}/*****************************************************************************    函数原型: CompilePopupMenu ( char **ppRESBuf, char *pWord, PMENU pmMenu, short nParent )**    功    能: 编译弹出菜单**    编程人员: Zhu haibin**    编码时间: 1994/09/07**    修改时间:**    入口参数: char	**ppRESBuf	资源数据缓冲区*	       char	*pWord		单词缓冲区*	       PMENU	pmMenu		菜单资源指针*	       PMENUITEM pmiMenuItem	弹出菜单项**    出口参数: =0 编译成功*	       <0 编译失败**    实现算法:**    上层调用: CompileMenu**    下层调用: GetWord*	       WordToInt*	       CheckKeyWord****************************************************************************/short	CompilePopupMenu ( char **ppRESBuf, char *pWord, PMENU pmMenu, short nParent ){	PMENUITEM	pmiTemp;	short		nErrorID;	short		nFirst, nPrev, nAction, nStyle;	short		nCount, nLen;	char		pText[MAXL_MENUITEM];	if ( GetWord ( ppRESBuf, pWord ) < OK )	  return ( ERR_RES_SYNTAX );	if ( CheckKeyWord ( pWord ) == ID_BREAK )	{	  if ( nParent < 0 )	    return ( ERR_RES_SYNTAX );	  pmMenu->nRightBreak = nParent;	  if ( GetWord ( ppRESBuf, pWord ) < OK )	    return ( ERR_RES_SYNTAX );	}	if ( CheckKeyWord ( pWord ) != ID_BEGIN )	  return ( ERR_RES_SYNTAX );	nFirst = nPrev = -1;	nCount = nLen = 0;	while ( 1 )	{	  if ( GetWord ( ppRESBuf, pWord ) < OK )	/* 读关键字	*/	    return ( ERR_RES_SYNTAX );	  nErrorID = CheckKeyWord ( pWord );	  if ( nErrorID == ID_END )			/* 关键字 END	*/	    break;	  if ( ( nErrorID != ID_MENUITEM ) && ( nErrorID != ID_POPUP ) )	    return ( ERR_RES_SYNTAX );			/* 非法关键字	*/	  if ( GetWord ( ppRESBuf, pWord ) < OK )	/* 读字符串	*/	    return ( ERR_RES_SYNTAX );	  strcpy ( pText, pWord );	  if ( nErrorID == ID_MENUITEM )		/* 读动作代码	*/	  {	    if ( CheckKeyWord ( pText ) == ID_SEPARATOR )	      nStyle = MS_SEPARATOR;	    else	    {	      if ( GetWord ( ppRESBuf, pWord ) < OK )		return ( ERR_RES_SYNTAX );	      if ( WordToInt ( &nAction, pWord ) < OK )		return ( ERR_RES_DIGIT );	      nStyle = MS_MENUITEM;	    }	  }	  else	    nStyle = MS_POPMENU;	  if ( NewMenuItem ( &pmiTemp ) < OK )		/* 创建菜单项	*/	    return ( ERR_NOMEMORY );	  pmMenu->pmiTable[pmMenu->nCount] = pmiTemp;	  strcpy ( pmiTemp->pText, pText );	  SetMenuHotKey ( pmiTemp );	  if ( strlen ( pmiTemp->pText ) > nLen )	    nLen = strlen ( pmiTemp->pText );	  pmiTemp->nPosX = 2;	  pmiTemp->nPosY = nCount + 1;	  pmiTemp->nStatus = MS_STANDARD;	  pmiTemp->nStyle = nStyle;	  pmiTemp->nAction = nAction;	  pmiTemp->nParent = nParent;	  if ( nFirst == -1 )	  {	    nFirst = nPrev = pmMenu->nCount;	    if ( nParent >=0 )	      pmMenu->pmiTable[nParent]->nSub = nFirst;	  }	  else	  {	    pmiTemp->nPrev = nPrev;	    pmMenu->pmiTable[nPrev]->nNext = pmMenu->nCount;	  }	  nPrev = pmMenu->nCount;	  pmMenu->nCount ++;	  nCount ++;	  if ( nErrorID == ID_POPUP )	  {	    nErrorID = CompilePopupMenu ( ppRESBuf, pWord, pmMenu, nPrev );	    if ( nErrorID < OK )	      return ( nErrorID );	  }	}	if ( nCount > 0 )	{	  pmiTemp->nNext = nFirst;	  pmMenu->pmiTable[nFirst]->nPrev = nPrev;	}	if ( nParent >= 0 )	  pmMenu->pmiTable[nParent]->lExtData = nCount + ( (DWORD)(nLen+2) << 16 );	return ( OK );}/*****************************************************************************    函数原型: CompileMenu ( char **ppRESBuf, char *pWord, void **ppmMenu )**    功    能: 编译菜单资源**    编程人员: Zhu haibin**    编码时间: 1994/09/07**    修改时间:**    入口参数: char	**ppRESBuf	资源数据缓冲区*	       char	*pWord		单词缓冲区**    出口参数: >0 编译成功		本菜单资源标识号*					ppmMenu 为菜单指针*	       <0 编译失败**    实现算法:**    上层调用: CompileResource**    下层调用: GetWord*	       WordToInt*	       CompilePopupMenu****************************************************************************/short	CompileMenu ( char **ppRESBuf, char *pWord, void **ppmMenu ){	PMENU	pmMenu;	short	nErrorID;	short	nMenuID;	short	ch;	/* 取菜单资源标识号 */	if ( GetWord ( ppRESBuf, pWord ) < OK )	  return ( ERR_RES_SYNTAX );	if ( WordToInt ( &nMenuID, pWord ) < OK )	  return ( ERR_RES_DIGIT );	/* 创建菜单资源 */	if ( NewMenu ( &pmMenu ) < OK )	  return ( ERR_NOMEMORY );	pmMenu->nCount = 0;	nErrorID = CompilePopupMenu ( ppRESBuf, pWord, pmMenu, -1 );	if ( nErrorID < OK )	  return ( nErrorID );	pmMenu->pmiHead = pmMenu->pmiTable[0];	JustMenuText ( pmMenu );	*ppmMenu = (void*)pmMenu;	return ( nMenuID );}

⌨️ 快捷键说明

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