📄 proppage.c
字号:
/********************************************************************/
/* uLan property page - Roman Bartosinski (C)2003 */
/********************************************************************/
#include "proppage.h"
#include <devioctl.h>
DWORD baud_tbl[] = { 75,110,134,150,300,600,1200,1800,2400,4800,7200,
9600,14400,19200,38400,57600,115200,128000,0};
LPCTSTR debug_tbl[] = { L"none", L"Lowest", L"Lower", L"Normal", L"Higher", L"Highest", NULL};
HANDLE g_hInst = NULL;
TCHAR applet_name[] = TEXT("General Property Page");
/********************************************************************/
/*
TCHAR sz_evbousb_help[] = _T("evbousb.hlp");
const DWORD HelpIDs[]=
{
PP_PORT_NAME, IDH_PORTSET_NAME, // "" (ComboBox)
PP_ULAN_BAUD, IDH_PORTSET_BAUDRATE, // "" (ComboBox)
PP_ULAN_ADDR, IDH_PORTSET_ADDRESS, // "" (ComboBox)
PP_ULAN_DEBUG, IDH_PORTSET_DEBUGLEVEL, // "" (ComboBox)
PP_ULAN_PMODE, IDH_PORTSET_PROMODE, // "" (ComboBox)
IDC_RESTORE, IDH_PORTSET_DEFAULTS, // "&Restore Defaults" (Button)
IDC_REFRESH, IDH_PORTSET_DEFAULTS, // "&Refresh Defaults" (Button)
IDC_STATIC, IDH_NONE, // no help
0, 0
};
*/
/********************************************************************/
/********************************************************************/
BOOL APIENTRY LibMain( HANDLE hDll, DWORD dwReason, LPVOID lpReserved)
{
switch( dwReason ) {
case DLL_PROCESS_ATTACH:
g_hInst = hDll;
DisableThreadLibraryCalls(hDll);
break;
case DLL_PROCESS_DETACH:
break;
default:
break;
}
return TRUE;
}
/********************************************************************/
void InitPortParams( IN OUT PPORT_PARAMS Params, IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData)
{
SP_DEVINFO_LIST_DETAIL_DATA detailData;
ZeroMemory( Params, sizeof(PORT_PARAMS));
Params->DeviceInfoSet = DeviceInfoSet;
Params->DeviceInfoData = DeviceInfoData;
Params->ChangesEnabled = TRUE;
detailData.cbSize = sizeof(SP_DEVINFO_LIST_DETAIL_DATA);
if ( SetupDiGetDeviceInfoListDetail( DeviceInfoSet, &detailData) &&
detailData.RemoteMachineHandle != NULL) {
Params->ChangesEnabled = FALSE;
}
}
/********************************************************************/
HPROPSHEETPAGE InitSettingsPage(PROPSHEETPAGE *psp, OUT PPORT_PARAMS Params)
{
// debugPrint("InitSetting");
psp->dwSize = sizeof( PROPSHEETPAGE);
psp->dwFlags = PSP_USECALLBACK; // | PSP_HASHELP;
psp->hInstance = g_hInst;
psp->pszTemplate = MAKEINTRESOURCE(DLG_PPAGE);
psp->pfnDlgProc = PortSettingsDlgProc;
psp->lParam = (LPARAM) Params;
psp->pfnCallback = PortSettingsDlgCallback;
return CreatePropertySheetPage( psp);
}
/********************************************************************/
UINT CALLBACK PortSettingsDlgCallback( HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp)
{
PPORT_PARAMS params;
switch (uMsg) {
case PSPCB_CREATE:
return TRUE; // return TRUE to continue with creation of page
case PSPCB_RELEASE:
params = (PPORT_PARAMS) ppsp->lParam;
if ( params)
LocalFree(params);
return 0; // return value ignored
default:
break;
}
return TRUE;
}
/********************************************************************/
void Port_OnCommand( HWND hDlg, int ControlId, HWND ControlHwnd, UINT NotifyCode)
{
PPORT_PARAMS params = (PPORT_PARAMS)GetWindowLongPtr( hDlg, DWLP_USER);
DWORD i;
BYTE j;
TCHAR str[20];
BYTE changed = 0;
switch( ControlId) {
case PP_ULAN_BAUD:
if ( NotifyCode == CBN_SELCHANGE) {
//debugPrint("Select Baudrate");
GetWindowText( GetDlgItem( hDlg, PP_ULAN_BAUD), str, 20);
params->PortSettings.BaudRate = (DWORD) myatoi( str);
changed = 1;
}
break;
case PP_ULAN_DEBUG:
if ( NotifyCode == CBN_SELCHANGE) {
//debugPrint("Select Debug");
params->PortSettings.Debug = SendMessage( ControlHwnd, CB_GETCURSEL, 0, 0);
changed = 1;
}
break;
case PP_ULAN_ADDR:
if ( NotifyCode == EN_KILLFOCUS) {
//debugPrint("KillFocus");
GetWindowText( GetDlgItem( hDlg, PP_ULAN_ADDR), str, 20);
params->PortSettings.Address = (DWORD) myatoi( str);
if ( params->PortSettings.Address < ULANADDR_MIN || params->PortSettings.Address > ULANADDR_MAX) {
params->PortSettings.Address = params->PortSettings.DefAddress;
wsprintf( str, TEXT("%d"), params->PortSettings.Address);
SetWindowText( GetDlgItem( hDlg, PP_ULAN_ADDR), str);
}
changed = 1; // there is some bug, maybe.
}
break;
case PP_ULAN_PMODE:
if ( NotifyCode == BN_CLICKED) {
//debugPrint("Clicked");
if ( IsDlgButtonChecked( hDlg, PP_ULAN_PMODE) == BST_CHECKED)
params->PortSettings.ProMode = 1;
else
params->PortSettings.ProMode = 0;
changed = 1;
}
break;
case IDC_REFRESH:
MessageBox( hDlg, TEXT("Here will be IOCTL driver call."), TEXT("uLan Property Page"), MB_OK | MB_ICONINFORMATION);
break;
case IDC_RESTORE:
//debugPrint("ChangeData");
RestorePortSettings( hDlg, params);
EnableWindow( GetDlgItem( hDlg, IDC_RESTORE), FALSE);
PropSheet_Changed( GetParent(hDlg), hDlg);
break;
case IDCANCEL: // ??? redundant control
EndDialog( hDlg, 0);
return;
case IDC_APPLY:
PropSheet_Apply( GetParent( hDlg));
params->PortSettings.DefBaudRate = params->PortSettings.BaudRate;
params->PortSettings.DefAddress = params->PortSettings.Address;
params->PortSettings.DefDebug = params->PortSettings.Debug;
params->PortSettings.DefProMode = params->PortSettings.ProMode;
EnableWindow( GetDlgItem( hDlg, IDC_RESTORE), FALSE);
break;
}
if ( changed) {
if(( params->PortSettings.DefBaudRate != params->PortSettings.BaudRate) ||
( params->PortSettings.DefAddress != params->PortSettings.Address) ||
( params->PortSettings.DefDebug != params->PortSettings.Debug) ||
( params->PortSettings.DefProMode != params->PortSettings.ProMode)) {
PropSheet_Changed( GetParent( hDlg), hDlg);
EnableWindow( GetDlgItem( hDlg, IDC_RESTORE), TRUE);
} else {
EnableWindow( GetDlgItem( hDlg, IDC_RESTORE), FALSE);
}
}
}
/********************************************************************/
BOOL Port_OnInitDialog( HWND hDlg, HWND FocusHwnd, LPARAM Lparam)
{
PPORT_PARAMS params;
if ( Lparam) {
params = (PPORT_PARAMS) ((LPPROPSHEETPAGE)Lparam)->lParam;
SetWindowLongPtr(hDlg, DWLP_USER, (ULONG_PTR) params);
FillSettingCommDlg( hDlg, params);
}
return TRUE; // No need for us to set the focus.
}
/********************************************************************/
BOOL Port_OnNotify( HWND hDlg, LPNMHDR NmHdr)
{
PPORT_PARAMS params = (PPORT_PARAMS)GetWindowLongPtr( hDlg, DWLP_USER);
switch ( NmHdr->code) { // user click on Apply or OK
case PSN_APPLY:
//debugPrint("Apply");
if ( SetPortSettings( hDlg, params)) {
//debugPrint( "changed");
// SetupDiCallClassInstaller( DIF_PROPERTYCHANGE, params->DeviceInfoSet, params->DeviceInfoData);
PropSheet_Changed( GetParent( hDlg), hDlg);
}
SetWindowLongPtr( hDlg, DWLP_MSGRESULT, PSNRET_NOERROR);
return TRUE;
default:
return FALSE;
}
}
/********************************************************************/
INT_PTR APIENTRY PortSettingsDlgProc( IN HWND hDlg, IN UINT uMessage, IN WPARAM wParam, IN LPARAM lParam)
{
switch(uMessage) {
case WM_COMMAND:
Port_OnCommand(hDlg, (int) LOWORD(wParam), (HWND)lParam, (UINT)HIWORD(wParam));
break;
// case WM_CONTEXTMENU:
// WinHelp( (HWND)wParam, sz_evbousb_help, HELP_CONTEXTMENU, (ULONG_PTR) HelpIDs);
// return FALSE;
// case WM_HELP:
// if ( ((LPHELPINFO)lParam)->iContextType == HELPINFO_WINDOW) {
// WinHelp((HWND) ((LPHELPINFO)lParam)->hItemHandle, sz_evbousb_help, HELP_WM_HELP, (ULONG_PTR) HelpIDs);
// }
// break;
case WM_INITDIALOG:
return Port_OnInitDialog(hDlg, (HWND)wParam, lParam);
case WM_NOTIFY:
return Port_OnNotify(hDlg, (NMHDR *)lParam);
}
return FALSE;
} /* PortSettingsDialogProc */
/********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -