?? 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 + -