📄 vhosts.cpp
字号:
if ( IsWindowEnabled( hWndAdd ) ) EnableWindow( hWndAdd, FALSE );
if ( !IsWindowEnabled( hWndReplace ) ) EnableWindow( hWndReplace, TRUE );
}
else /* --- disable replace, enable add --- */
{
if ( !IsWindowEnabled( hWndAdd ) ) EnableWindow( hWndAdd, TRUE );
if ( IsWindowEnabled( hWndReplace ) ) EnableWindow( hWndReplace, FALSE );
};
};
/*
** If there is a selected item in the listbox then
** enable delete, otherwise disable delete
*/
if ( SendMessage( hWndList, LB_GETCURSEL, 0, 0 )==LB_ERR )
{ EnableWindow( hWndDelete, FALSE ); }
else
{ EnableWindow( hWndDelete, TRUE ); };
};
BOOL CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
enum { BUF_SIZE=1023 };
char szBuf[BUF_SIZE+1];
int aTabstop[4];
switch (uMsg)
{
case WM_INITDIALOG:
HourglassOn();
{
const char *pTmp;
int iTmp;
hWndList = GetDlgItem( hDlg, IDC_LIST );
if ( iIsIP )
{
hWndIPAddress = GetDlgItem( hDlg, IDC_IPADDRESS );
};
hWndHostname = GetDlgItem( hDlg, IDC_HOSTNAME );
hWndDocumentRoot= GetDlgItem( hDlg, IDC_DOCUMENTROOT );
hWndAdd = GetDlgItem( hDlg, IDC_ADD );
hWndReplace = GetDlgItem( hDlg, IDC_REPLACE );
hWndDelete= GetDlgItem( hDlg, IDC_DELETE );
hWndAdministrator= GetDlgItem( hDlg, IDC_ADMINISTRATOR );
if ( iIsIP )
{
assert( hWndIPAddress );
};
assert( hWndList && hWndHostname && hWndDocumentRoot );
assert( hWndAdd && hWndReplace && hWndDelete &&
hWndAdministrator );
EnableWindow( hWndAdd, FALSE );
EnableWindow( hWndReplace, FALSE );
EnableWindow( hWndDelete, FALSE );
/*
** Limit edit field lengths, really just a sanity thing
*/
if ( iIsIP )
{
SendMessage( hWndIPAddress, EM_SETLIMITTEXT, 256, 0 );
};
SendMessage( hWndHostname, EM_SETLIMITTEXT, 256, 0 );
SendMessage( hWndDocumentRoot, EM_SETLIMITTEXT, 256, 0 );
SendMessage( hWndAdministrator, EM_SETLIMITTEXT, 256, 0 );
/*
** Setup tabstops
*/
aTabstop[0] = 0;
aTabstop[1] = 60;
aTabstop[2] = 120;
aTabstop[3] = 170;
SendMessage( hWndList, LB_SETTABSTOPS, 4, (LPARAM)&aTabstop );
/*
** Load all data into the listbox
*/
iTmp = 0;
for(;; iTmp++ )
{
pTmp = M_LookupValueEx( pConfig, SECTION,
sVariable, iTmp );
if ( !pTmp )
{ break; };
SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)pTmp );
};
Internal_reloadArrays();
}
HourglassOff();
break;
case WM_DESTROY:
Internal_clearArrays();
break;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDC_ADD:
{
/*
** Verify fields are valid
*/
if ( !Internal_verifyFields( hDlg, szBuf, BUF_SIZE ) )
{ break; };
int i, j;
*szBuf = '\0';
i = 0;
if ( iIsIP )
{
SendMessage( hWndIPAddress, WM_GETTEXT, BUF_SIZE,
(LPARAM)szBuf );
for( i=0; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';
i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lIPs.Append( (DblList::type)PI_NEW(
PIString(szBuf )));
szBuf[i++] = '\t';
};
SendMessage( hWndHostname, WM_GETTEXT, BUF_SIZE-i,
(LPARAM)&(szBuf[i]) );
for(j=i;i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';i++);
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lHostnames.Append( (DblList::type)PI_NEW(
PIString( &(szBuf[j]) ) ) );
szBuf[i++] = '\t';
SendMessage( hWndDocumentRoot, WM_GETTEXT, BUF_SIZE-i,
(LPARAM)&(szBuf[i]) );
for(j=i;i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';i++);
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lDocumentRoots.Append( (DblList::type)PI_NEW(
PIString( &(szBuf[j]) ) ) );
szBuf[i++] = '\t';
SendMessage( hWndAdministrator, WM_GETTEXT, BUF_SIZE-i,
(LPARAM)&(szBuf[i]) );
for(j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++);
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lAdministrators.Append( (DblList::type)PI_NEW(
PIString( &(szBuf[j]) ) ) );
SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)szBuf );
/*
** Clear edit fields, focus to list
*/
if ( iIsIP )
{
SendMessage( hWndIPAddress, WM_SETTEXT, 0,
(LPARAM)"" );
};
SendMessage( hWndHostname, WM_SETTEXT, 0,
(LPARAM)"" );
SendMessage( hWndDocumentRoot, WM_SETTEXT, 0,
(LPARAM)"" );
SendMessage( hWndAdministrator, WM_SETTEXT, 0,
(LPARAM)"" );
Internal_reloadArrays();
int iIndex = SendMessage( hWndList,
LB_FINDSTRINGEXACT, 0, (LPARAM)szBuf );
if ( iIndex!=LB_ERR )
SendMessage( hWndList, LB_SETTOPINDEX, iIndex, 0 );
SetFocus( hWndList );
Changed( hDlg );
};
break;
case IDC_REPLACE:
{
/*
** Verify fields are valid
*/
if ( !Internal_verifyFields( hDlg, szBuf, BUF_SIZE ) )
{ break; };
/*
** Get selected item index
*/
int iCurSel = SendMessage( hWndList, LB_GETCURSEL,
0, 0 );
/*
** Get text to add and add it to internal lists only
*/
int i, j;
*szBuf = '\0';
i = 0;
if ( iIsIP )
{
SendMessage( hWndIPAddress, WM_GETTEXT, BUF_SIZE,
(LPARAM)szBuf );
for( i=0; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';
i++ );
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lIPs.Append( (DblList::type)PI_NEW(
PIString(szBuf )));
szBuf[i++] = '\t';
};
SendMessage( hWndHostname, WM_GETTEXT, BUF_SIZE-i,
(LPARAM)&(szBuf[i]) );
for(j=i;i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';i++);
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lHostnames.Append( (DblList::type)PI_NEW(
PIString( &(szBuf[j]) ) ) );
szBuf[i++] = '\t';
SendMessage( hWndDocumentRoot, WM_GETTEXT, BUF_SIZE-i,
(LPARAM)&(szBuf[i]) );
for(j=i;i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t';i++);
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lDocumentRoots.Append( (DblList::type)PI_NEW(
PIString( &(szBuf[j]) ) ) );
szBuf[i++] = '\t';
SendMessage( hWndAdministrator, WM_GETTEXT, BUF_SIZE-i,
(LPARAM)&(szBuf[i]) );
for(j=i; i<BUF_SIZE && szBuf[i] && szBuf[i]!='\t'; i++);
if ( szBuf[i] ) { szBuf[i] = '\0'; };
lAdministrators.Append( (DblList::type)PI_NEW(
PIString( &(szBuf[j]) ) ) );
/*
** Delete the item from the list and internal lists
*/
SendMessage( hWndList, LB_DELETESTRING, iCurSel, 0 );
if ( iIsIP )
{
PI_DELETE( (PIString *)lIPs.Detach( iCurSel) );
};
PI_DELETE( (PIString *)lHostnames.Detach( iCurSel) );
PI_DELETE( (PIString *)lDocumentRoots.Detach( iCurSel));
PI_DELETE( (PIString *)lAdministrators.Detach(iCurSel));
/*
** Add new item to listbox
*/
SendMessage( hWndList, LB_ADDSTRING, 0, (LPARAM)szBuf );
/*
** Clear edit fields, focus to list
*/
if ( iIsIP )
{
SendMessage( hWndIPAddress, WM_SETTEXT, 0,
(LPARAM)"" );
};
SendMessage( hWndHostname, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndDocumentRoot, WM_SETTEXT,0,(LPARAM)"");
SendMessage( hWndAdministrator,WM_SETTEXT,0,(LPARAM)"");
Internal_reloadArrays();
int iIndex = SendMessage( hWndList, LB_FINDSTRINGEXACT,
0, (LPARAM)szBuf );
if ( iIndex!=LB_ERR ) SendMessage( hWndList,
LB_SETTOPINDEX, iIndex, 0 );
SetFocus( hWndList );
Changed( hDlg );
};
break;
case IDC_DELETE:
{
int iCurSel = SendMessage( hWndList, LB_GETCURSEL,
0, 0 );
SendMessage( hWndList, LB_DELETESTRING, iCurSel, 0 );
if ( iIsIP )
{
PI_DELETE( (PIString *)lIPs.Detach( iCurSel) );
};
PI_DELETE( (PIString *)lHostnames.Detach( iCurSel) );
PI_DELETE( (PIString *)lDocumentRoots.Detach(iCurSel));
PI_DELETE( (PIString *)lAdministrators.Detach(iCurSel));
/*
** Clear edit fields, focus to list
*/
if ( iIsIP )
{
SendMessage( hWndIPAddress, WM_SETTEXT, 0,
(LPARAM)"" );
};
SendMessage( hWndHostname, WM_SETTEXT, 0, (LPARAM)"" );
SendMessage( hWndDocumentRoot, WM_SETTEXT, 0,
(LPARAM)"" );
SendMessage( hWndAdministrator, WM_SETTEXT, 0,
(LPARAM)"" );
SetFocus( hWndList );
Changed( hDlg );
};
break;
case IDC_IPADDRESS:
if ( iIsIP )
{
*szBuf = '\0';
SendMessage( hWndIPAddress, WM_GETTEXT, BUF_SIZE,
(LPARAM)szBuf );
Internal_updateButtons( wParam, lParam, hWndIPAddress,
hWndHostname, szBuf );
};
break;
case IDC_HOSTNAME:
*szBuf = '\0';
SendMessage(
iIsIP ? hWndIPAddress : hWndHostname,
WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
Internal_updateButtons( wParam, lParam, hWndHostname,
iIsIP ? hWndIPAddress : hWndDocumentRoot, szBuf );
break;
case IDC_DOCUMENTROOT:
*szBuf = '\0';
SendMessage(
iIsIP ? hWndIPAddress : hWndHostname,
WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
Internal_updateButtons( wParam, lParam, hWndDocumentRoot,
hWndHostname, szBuf );
break;
case IDC_ADMINISTRATOR:
*szBuf = '\0';
SendMessage(
iIsIP ? hWndIPAddress : hWndHostname,
WM_GETTEXT, BUF_SIZE, (LPARAM)szBuf );
Internal_updateButtons( wParam, lParam, hWndHostname,
hWndDocumentRoot, szBuf );
break;
case IDC_LIST:
if ( GET_WM_COMMAND_CMD(wParam, lParam)==LBN_SELCHANGE )
{
int iSel = SendMessage( hWndList, LB_GETCURSEL, 0, 0 );
if ( iSel!=LB_ERR )
{
assert( iSel>=0 && iSel<lHostnames.Size() );
EnableWindow( hWndDelete, TRUE );
if ( iIsIP )
{
SendMessage( hWndIPAddress, WM_SETTEXT, 0,
(LPARAM)(const char *)*((PIString *)
lIPs[iSel]) );
};
SendMessage( hWndHostname, WM_SETTEXT, 0,
(LPARAM)(const char *)*((PIString *)
lHostnames[iSel]) );
SendMessage( hWndDocumentRoot, WM_SETTEXT, 0,
(LPARAM)(const char *)*((PIString *)
lDocumentRoots[iSel]) );
SendMessage( hWndAdministrator, WM_SETTEXT, 0,
(LPARAM)(const char *)*((PIString *)
lAdministrators[iSel]) );
};
};
break;
default:;
}
break;
case WM_NOTIFY:
switch( ((NMHDR *)lParam)->code )
{
case PSN_QUERYCANCEL:
return SHEET->Cancel(pInterface, hDlg);
case PSN_KILLACTIVE:
{
int i;
int iCount = SendMessage( hWndList, LB_GETCOUNT, 0, 0 );
/*
** Save all date
*/
/* --- remove old ones first --- */
M_DeleteValue( pConfig, SECTION, sVariable );
for( i=0; i<iCount; i++ )
{
*szBuf = '\0';
szBuf[BUF_SIZE] = '\0';
SendMessage( hWndList, LB_GETTEXT, i, (LPARAM)szBuf );
M_AddValue( pConfig, SECTION, sVariable, szBuf );
};
};
SetWindowLong( hDlg, DWL_MSGRESULT, FALSE );
break;
default:
return (FALSE);
};
break;
default:
return (FALSE);
};
return (TRUE);
};
};
/*____________________________________________________________________________*\
*
Function:
Synopsis:
Description:
\*____________________________________________________________________________*/
static BOOL CALLBACK fnDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam,
LPARAM lParam)
{
if ( uMsg==WM_INITDIALOG )
{
::SetWindowLong( hDlg, DWL_USER, ((LPPROPSHEETPAGE)lParam)->lParam );
};
VHostsPage *pPage = (VHostsPage *)::GetWindowLong( hDlg, DWL_USER );
return pPage ? pPage->DialogProc( hDlg, uMsg, wParam, lParam ) : FALSE;
}
/*____________________________________________________________________________*\
*
Function:
Synopsis:
Description:
\*____________________________________________________________________________*/
PUBLIC_PIAPI int VHostsPage_constructor( PIObject *pObj,
int iArgc, const char *ppArgv[] )
{
return IFaceBase_constructor( pObj, PI_NEW( VHostsPage( pObj,
iArgc, ppArgv ) ) );
}
#if 0
/*___+++CNF_BEGIN+++___*/
<Class>
Name VHostsPageClass
Type LogicExtension
Library IntrFace
OnClassLoad IFaceBase_onClassLoad
Constructor VHostsPage_constructor
CopyConstructor IFaceBase_copyConstructor
Destructor IFaceBase_destructor
Execute IFaceBase_execute
</Class>
<Object>
Name IPVHostsPage
Class VHostsPageClass
Flag "IP"
</Object>
<Object>
Name NonIPVHostsPage
Class VHostsPageClass
Flag "NonIP"
</Object>
/*___+++CNF_END+++___*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -