📄 rcdlg.c
字号:
/***************************************************************************** ------------ 子系统名称: 界面资源管理器* RCDLG.H* ------------ 模块名称 : 对话框资源编译程序****************************************************************************/#include "typedef.h"#include "dialog.h"#include "rc.h"/***************************************************************************** 函数原型: GetCtrlTypeID ( short nKeyWord )** 功 能: 返回控制所用的关键字值** 编程人员: Zhu haibin** 编码时间: 1994/09/15** 修改时间:** 入口参数: short nKeyWord -- 关键字标识号** 出口参数: > OK 调用成功* < OK 不是控制关键字** 实现算法:** 上层调用: CompileCtrlGroup** 下层调用: 无****************************************************************************/short GetCtrlTypeID ( short nKeyWord ){ switch ( nKeyWord ) { case ID_TEXT : return ( DT_TEXT ); case ID_STATIC : return ( DT_STATIC ); case ID_BUTTON : return ( DT_BUTTON ); case ID_RADIOBUTTON : return ( DT_RADIOBUTTON ); case ID_CHECKBOX : return ( DT_CHECKBOX ); case ID_EDIT : return ( DT_EDIT ); case ID_LISTBOX : return ( DT_LISTBOX ); default : return ( ERR_RES_SYNTAX ); }}/***************************************************************************** 函数原型: GetCtrlStyleID ( short nKeyWord )** 功 能: 返回控制所用的关键字值** 编程人员: Zhu haibin** 编码时间: 1994/09/15** 修改时间:** 入口参数: short nKeyWord -- 关键字标识号** 出口参数: > OK 调用成功* < OK 不是控制关键字** 实现算法:** 上层调用: CompileCtrlGroup** 下层调用: 无****************************************************************************/short GetCtrlStyleID ( short nKeyWord ){ switch ( nKeyWord ) { case ID_DS_TABSTOP : return ( DS_TABSTOP ); case ID_DS_GROUP : return ( DS_GROUP ); case ID_TS_LEFT : return ( TS_LEFT ); case ID_TS_RIGHT : return ( TS_RIGHT ); case ID_TS_CENTER : return ( TS_CENTER ); case ID_TS_HIGHLIGHT: return ( TS_HIGHLIGHT ); case ID_TS_REVERSE : return ( TS_REVERSE ); case ID_TS_UNDERLINE: return ( TS_UNDERLINE ); case ID_SS_FRAME : return ( SS_FRAME ); case ID_SS_HLINE : return ( SS_HLINE ); case ID_SS_VLINE : return ( SS_VLINE ); case ID_SS_HIGHLIGHT: return ( SS_HIGHLIGHT ); case ID_SS_REVERSE : return ( SS_REVERSE ); case ID_BS_DEFAULT : return ( BS_DEFAULT ); case ID_ES_ALPHA : return ( ES_ALPHA ); case ID_ES_DICIMAL : return ( ES_DICIMAL ); case ID_ES_LOWER : return ( ES_LOWER ); case ID_ES_UPPER : return ( ES_UPPER ); case ID_ES_AUTOSKIP : return ( ES_AUTOSKIP ); case ID_ES_PASSWORD : return ( ES_PASSWORD ); case ID_LBS_MULTIPLE: return ( LBS_MULTIPLE ); default : return ( ERR_RES_SYNTAX ); }}/***************************************************************************** 函数原型: CompileCtrlGroup ( char **ppRESBuf, char *pWord, PDIALOG pdDlg )** 功 能: 编译对话框的所有控制** 编程人员: Zhu haibin** 编码时间: 1994/09/15** 修改时间:** 入口参数: char **ppRESBuf 资源数据缓冲区* char *pWord 单词缓冲区* PDIALOG pdDlg 对话框指针** 出口参数: = OK 编译成功* < OK 编译失败** 实现算法:** 上层调用: CompileDialog** 下层调用: GetWord* WordToInt* CheckKeyWord****************************************************************************/short CompileCtrlGroup ( char **ppRESBuf, char *pWord, PDIALOG pdDlg ){ short nErrorID; short nGroup = 0; short nPos[4]; short i, j; pdDlg->nDefButton = -1; /* 获得 ID_BEGIN */ if ( GetWord ( ppRESBuf, pWord ) < OK ) return ( ERR_RES_SYNTAX ); if ( CheckKeyWord ( pWord ) != ID_BEGIN ) return ( ERR_RES_NOTKEYWORD ); /* 获得第一个控制 */ if ( GetWord ( ppRESBuf, pWord ) < OK ) return ( ERR_RES_SYNTAX ); nErrorID = CheckKeyWord ( pWord ); while ( 1 ) { if ( nErrorID == ID_END ) break; /* 获得控制类型 */ if ( ( j = GetCtrlTypeID ( nErrorID ) ) < OK ) return ( ERR_RES_SYNTAX ); /* 创建一个新的控制 */ if ( NewControler ( &(pdDlg->pctrlTable[pdDlg->nCount]) ) < OK ) return ( ERR_NOMEMORY ); i = pdDlg->nCount ++; pdDlg->pctrlTable[i]->nType = j; /* 获得控制的动作标识号 */ if ( GetWord ( ppRESBuf, pWord ) < OK ) return ( ERR_RES_SYNTAX ); if ( WordToInt ( &(pdDlg->pctrlTable[i]->nAction), pWord ) < OK ) return ( ERR_RES_DIGIT ); /* 获得控制的文本字符串 */ if ( GetWord ( ppRESBuf, pdDlg->pctrlTable[i]->pCaption ) < OK ) return ( ERR_RES_SYNTAX ); /* 获得控制的位置和大小 */ for ( j = 0; j < 4; j++ ) { if ( GetWord ( ppRESBuf, pWord ) < OK ) return ( ERR_RES_SYNTAX ); if ( WordToInt ( &nPos[j], pWord ) < OK ) return ( ERR_RES_DIGIT ); } pdDlg->pctrlTable[i]->nX1 = nPos[0]; pdDlg->pctrlTable[i]->nY1 = nPos[1]; pdDlg->pctrlTable[i]->nX2 = nPos[2]; pdDlg->pctrlTable[i]->nY2 = nPos[3]; /* 获得控制的属性 */ pdDlg->pctrlTable[i]->nStyle = 0; do { if ( GetWord ( ppRESBuf, pWord ) < OK ) return ( ERR_RES_SYNTAX ); if ( ( nErrorID = CheckKeyWord ( pWord ) ) < OK ) return ( ERR_RES_NOTKEYWORD ); if ( ( j = GetCtrlStyleID ( nErrorID ) ) > OK ) pdDlg->pctrlTable[i]->nStyle |= j; } while ( j > OK ); if ( pdDlg->pctrlTable[i]->nStyle & DS_GROUP ) { pdDlg->pctrlTable[i]->nGroup = ( i << 8 ) + i; nGroup = i; } else pdDlg->pctrlTable[i]->nGroup = ( nGroup << 8 ) + nGroup; if ( ( pdDlg->pctrlTable[i]->nType == DT_BUTTON ) && ( pdDlg->pctrlTable[i]->nStyle & BS_DEFAULT ) ) { if ( pdDlg->nDefButton != -1 ) pdDlg->pctrlTable[i]->nStyle &= ~BS_DEFAULT ; else pdDlg->nDefButton = i; } } return ( OK );}/***************************************************************************** 函数原型: CompileDialog ( char **ppRESBuf, char *pWord, void **ppdDialog )** 功 能: 编译对话框资源** 编程人员: Zhu haibin** 编码时间: 1994/09/15** 修改时间:** 入口参数: char **ppRESBuf 资源数据缓冲区* char *pWord 单词缓冲区** 出口参数: >0 编译成功 本对话框资源标识号* ppdDialog 为菜单指针* <0 编译失败** 实现算法:** 上层调用: CompileResource** 下层调用: GetWord* WordToInt* CheckKeyWord****************************************************************************/short CompileDialog ( char **ppRESBuf, char *pWord, void **ppdDialog ){ PDIALOG pdDlg; short nErrorID; short nDialogID; short nPos[4]; char pCaption[MAXL_CTRLTEXT]; short i; /* 获得对话框资源标识号 */ if ( GetWord ( ppRESBuf, pWord ) < OK ) return ( ERR_RES_SYNTAX ); if ( WordToInt ( &nDialogID, pWord ) < OK ) return ( ERR_RES_DIGIT ); /* 获得对话框位置和大小 */ for ( i = 0; i < 4; i++ ) { if ( GetWord ( ppRESBuf, pWord ) < OK ) return ( ERR_RES_SYNTAX ); if ( WordToInt ( &nPos[i], pWord ) < OK ) return ( ERR_RES_DIGIT ); } /* 获得关键字 CAPTION */ if ( GetWord ( ppRESBuf, pWord ) < OK ) return ( ERR_RES_SYNTAX ); if ( CheckKeyWord ( pWord ) != ID_CAPTION ) return ( ERR_RES_NOTKEYWORD ); /* 获得标题内容 */ if ( GetWord ( ppRESBuf, pCaption ) < OK ) return ( ERR_RES_SYNTAX ); /* 创建对话框资源 */ if ( NewDialog ( &pdDlg ) < OK ) return ( ERR_NOMEMORY ); pdDlg->nCount = 0; pdDlg->nPosX = nPos[0]; pdDlg->nPosY = nPos[1]; pdDlg->nWidth = nPos[2]; pdDlg->nHigh = nPos[3]; strcpy ( pdDlg->pCaption, pCaption ); /* 编译所有控制 */ nErrorID = CompileCtrlGroup ( ppRESBuf, pWord, pdDlg ); if ( nErrorID < OK ) FreeDialog ( pdDlg ); else *ppdDialog = (void*)pdDlg; return ( nDialogID );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -