?? dialog.c
字號:
for(i=0; i<pDlgHeader->NumOfItems; i++)
{
pCtrlData = pDlgHeader->pCtrlData + i;
if((pCtrlData->wID) == IDCANCEL)
return TRUE;
}
return FALSE;
}
/*
* Function: PCTRLDATA GUIAPI GetControlData( PDLGHEADER pDlgHeader, WORD wID ).
* This function get the pointer to CONTROLDATA struct
* according to control's ID.
* Parameters:
* wID: ID of control;
* Return:
* success----the pointer to CONTROLDATA struct;
* failure----NULL.
*/
PCTRLDATA GUIAPI GetControlData( PDLGHEADER pDlgHeader, WORD wID )
{
short i;
PCTRLDATA pCtrlData;
for(i=0; i<pDlgHeader->NumOfItems; i++)
{
pCtrlData = pDlgHeader->pCtrlData + i;
if((pCtrlData->wID) == wID)
return pCtrlData;
}
return NULL;
}
void GUIAPI GetControlRect( PDLGHEADER pDlgHeader, WORD wID, LPRECT lpRect)
{
PCTRLDATA pCtrlData = GetControlData(pDlgHeader, wID);
if(pCtrlData == NULL)
return;
lpRect->left = pCtrlData->lx;
lpRect->top = pCtrlData->ty;
lpRect->right = pCtrlData->rx;
lpRect->bottom = pCtrlData->by;
}
/*
* Function: static PCTRLDATA GetNextTabstop( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData ).
* This function get the next control with style of WS_TABSTOP.
* Parameters:
* pCtrlData: given control's pointer;
* Return:
* success----pointer to expect control;
* failure----given pointer.
*/
static PCTRLDATA GetNextTabstop( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData )
{
short i;
PCTRLDATA pFirst = NULL;
for(i=0; i<pDlgHeader->NumOfItems; i++)
{
if(((pDlgHeader->pCtrlData + i)->lStyle) & WS_TABSTOP)
{
pFirst = pDlgHeader->pCtrlData + i;
break;
}
}
if(pFirst == NULL)
return pCtrlData;
while(pCtrlData != (pDlgHeader->pCtrlData + pDlgHeader->NumOfItems-1))
{
pCtrlData++;
if((pCtrlData->lStyle) & WS_TABSTOP)
return pCtrlData;
}
return pFirst;
}
/*
* Function: static PCTRLDATA GetLastTabstop( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData ).
* This function get the previous control with style of WS_TABSTOP.
* Parameters:
* pCtrlData: given control's pointer;
* Return:
* success----pointer to expect control;
* failure----pointer to given pointer.
*/
static PCTRLDATA GetLastTabstop( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData )
{
short i;
PCTRLDATA pLast = NULL;
for(i=0; i<pDlgHeader->NumOfItems; i++)
{
if(((pDlgHeader->pCtrlData + i)->lStyle) & WS_TABSTOP)
pLast = pDlgHeader->pCtrlData + i;
}
if(pLast == NULL)
return pCtrlData;
while( pCtrlData != pDlgHeader->pCtrlData )
{
pCtrlData--;
if((pCtrlData->lStyle) & WS_TABSTOP)
return pCtrlData;
}
return pLast;
}
/*
* Function: static PCTRLDATA GetNextItemInGroup( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData ).
* This function get the next control that is in a group with
* given control.
* Parameters:
* pCtrlData: given control's pointer;
* Return:
* success----pointer to expect control;
* failure----given pointer.
*/
static PCTRLDATA GetNextItemInGroup( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData )
{
short i = 0;
PCTRLDATA pFirstInGrp = NULL;
do
{
if(((pDlgHeader->pCtrlData+i)->lStyle) & WS_GROUP)
pFirstInGrp = pDlgHeader->pCtrlData + i;
i++;
}while((pDlgHeader->pCtrlData+i) != pCtrlData);
if(pCtrlData->lStyle & WS_GROUP)
pFirstInGrp = pCtrlData;
if(pFirstInGrp == NULL)
return pCtrlData;
pCtrlData++;
if(pCtrlData == (pDlgHeader->pCtrlData + pDlgHeader->NumOfItems))
return pFirstInGrp;
if(!(pCtrlData->lStyle & WS_GROUP))
return pCtrlData;
return pFirstInGrp;
}
/*
* Function: static PCTRLDATA GetLastItemInGroup( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData ).
* This function get the previous control that is a group with
* given control.
* Parameters:
* pCtrlData: given control's pointer;
* Return:
* success----pointer to expect control;
* failure----given pointer
*/
static PCTRLDATA GetLastItemInGroup( PDLGHEADER pDlgHeader, PCTRLDATA pCtrlData )
{
short i = 1;
PCTRLDATA pLastInGrp = NULL;
while((pCtrlData + i) != (pDlgHeader->pCtrlData + pDlgHeader->NumOfItems))
{
if(((pCtrlData + i)->lStyle) & WS_GROUP)
{
pLastInGrp = pCtrlData + i - 1;
break;
}
i++;
}
if(pLastInGrp == NULL)
return pCtrlData;
if(pCtrlData->lStyle & WS_GROUP)
return pLastInGrp;
else
return --pCtrlData;
}
/*
* Function: void GUIAPI GrayDlgItem( PDLGHEADER pDlgHeader, WORD wID ).
* This function gray/disable the given control.
* Parameters:
* pDlgHeader: the pointer to DLGHEADER structure
* wID: given control's ID;
* Return:
* None.
*/
void GUIAPI GrayDlgItem( PDLGHEADER pDlgHeader, WORD wID)
{
PCTRLDATA pCtrlData;
if(!(pCtrlData = GetControlData(pDlgHeader, wID)))
return;
if(pCtrlData->lStyle & WS_DISABLED)
return;
if(pCtrlData->lStyle & WS_CHECKED)
{
pCtrlData->lStyle &= 0xffffefffL;
_setcolor(7);
_ellipse(_GFILLINTERIOR, pCtrlData->lx + 4, pCtrlData->ty + 4,pCtrlData->lx + 12,pCtrlData->ty + 12);
pCtrlData->lStyle &= 0xffffefffL;
}
pCtrlData->lStyle |= WS_DISABLED;
_setcolor(COLOR_lightgray);
_rectangle(_GFILLINTERIOR, pCtrlData->lx - 1, pCtrlData->ty - 1, pCtrlData->rx + 1, pCtrlData->by + 1);
DrawCtrl(pCtrlData->bClass, pCtrlData->lStyle,
pCtrlData->lx, pCtrlData->ty, pCtrlData->rx, pCtrlData->by);
DrawCtrlClientArea(pCtrlData);
}
/*
* Function: void GUIAPI UngrayDlgItem( PDLGHEADER pDlgHeader, WORD wID ).
* This function ungray/enable the given control.
* Parameters:
* pDlgHeader: the pointer to DLGHEADER structure;
* wID: given control's ID;
* Return:
* None.
*/
void GUIAPI UngrayDlgItem( PDLGHEADER pDlgHeader, WORD wID)
{
PCTRLDATA pCtrlData;
if(!(pCtrlData = GetControlData(pDlgHeader, wID)))
return;
if(!(pCtrlData->lStyle & WS_DISABLED))
return;
pCtrlData->lStyle &= 0xf7ffffffL;
DrawCtrl(pCtrlData->bClass, pCtrlData->lStyle,
pCtrlData->lx, pCtrlData->ty, pCtrlData->rx, pCtrlData->by);
DrawCtrlClientArea(pCtrlData);
}
void GUIAPI ShowDlgItem( PDLGHEADER pDlgHeader, WORD wID )
{
PCTRLDATA pCtrlData;
if(!(pCtrlData = GetControlData(pDlgHeader, wID)))
return;
pCtrlData->lStyle &= 0xf7ffffffL;
DrawCtrl(pCtrlData->bClass, pCtrlData->lStyle,
pCtrlData->lx, pCtrlData->ty, pCtrlData->rx, pCtrlData->by);
DrawCtrlClientArea(pCtrlData);
}
void GUIAPI HideDlgItem( PDLGHEADER pDlgHeader, WORD wID )
{
PCTRLDATA pCtrlData;
if(!(pCtrlData = GetControlData(pDlgHeader, wID)))
return;
pCtrlData->lStyle |= WS_DISABLED;
_setcolor(COLOR_lightgray);
_rectangle(_GFILLINTERIOR, pCtrlData->lx - 1, pCtrlData->ty - 1, pCtrlData->rx + 1, pCtrlData->by + 1);
}
/*
* Function: void GUIAPI DrawTextInStaticItem( PDLGHEADER pDlgHeader, WORD wID, LPSTR lpStr )
* This function output text in the specified static control.
* Parameters:
* pDlgHeader: the pointer to DLGHEADER structure;
* wID: given control's ID;
* lpStr: the text that want to output;
* Return:
* None.
*/
void GUIAPI DrawTextInStaticItem( PDLGHEADER pDlgHeader, WORD wID, LPCSTR lpStr )
{
PCTRLDATA pCtrlData;
short buttonx, buttony;
if(!(pCtrlData = GetControlData(pDlgHeader, wID)))
return;
set_cliprgn(pCtrlData->lx, pCtrlData->ty, pCtrlData->rx, pCtrlData->by);
_setcolor(7);
_rectangle(_GFILLINTERIOR, pCtrlData->lx, pCtrlData->ty, pCtrlData->rx, pCtrlData->by);
buttony = (pCtrlData->ty
+ pCtrlData->by)/2
- 8;
switch((pCtrlData->lStyle) & 0x0000000fL)
{
case ES_RIGHT:
buttonx = pCtrlData->rx
- _fstrlen(lpStr) * 8;
break;
case ES_LEFT:
buttonx = pCtrlData->lx;
break;
case ES_CENTER:
buttonx = (pCtrlData->lx
+ pCtrlData->rx)/2
- _fstrlen(lpStr) * 4;
break;
default:
buttonx = pCtrlData->lx;
break;
}
set_color(0);
if(pCtrlData->lStyle & WS_DISABLED)
SetGrayTextMask();
cc_printf(lpStr, buttonx, buttony);
if(pCtrlData->lStyle & WS_DISABLED)
RemoveDisplayMask();
set_cliprgn(0, 0, vc.numxpixels - 1, vc.numypixels - 1);
}
static BOOL bIsSysMsgBox = FALSE;
/*
* Function: int GUIAPI SysMessageBox( PGUIINFO pGUIInfo, int Index, LPSTR lpImpMsg).
* This function manage a system message box.
* Parameters:
* Index: the index of MessageBox;
* lpImpMsg: the pointer to important message string.
* Return:
* the choice of MessageBox, such as OK, CANCEL etc..
*/
int GUIAPI SysMessageBox( PGUIINFO pGUIInfo, LPCSTR lpszText, LPCSTR lpszCaption, DWORD lStyle)
{
int iRet;
bIsSysMsgBox = TRUE;
iRet = MessageBox(pGUIInfo, lpszText, lpszCaption, lStyle);
bIsSysMsgBox = FALSE;
return iRet;
}
/*
* Function: int GUIAPI MessageBox( PGUIINFO pGUIInfo, int Index, LPSTR lpImpMsg).
* This function manage a message box.
* Parameters:
* Index: the index of MessageBox;
* lpImpMsg: the pointer to important message string.
* Return:
* the choice of MessageBox, such as OK, CANCEL etc..
*/
int GUIAPI MessageBox( PGUIINFO pGUIInfo, LPCSTR lpszText, LPCSTR lpszCaption, DWORD lStyle)
{
int i;
int iNumOfRow, iMaxCol, iCol;
short Width, Height;
_vmhnd_t hdlImage;
int iRetCtrl = 0;
int CtrlRet[3];
int RetValue;
MSG Msg;
BOOL fEND = FALSE;
CTRLDATA CtrlData[3] = {
{BS_PUSHBUTTON | WS_TABSTOP,
0, 0, 0, 0, 1, BUTTON, NULL, NULL},
{BS_PUSHBUTTON | WS_TABSTOP,
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -