?? proppage.cpp
字號:
//
// ComEmulDrv property page
//
// Copyright (c) 2002
// MixW team
// http://www.mixw.net
//
#include "stdafx.h"
#include "resource.h"
#include "PropPage.h"
#define MAXPORT 255
#define MAXPAIR 10
#define MIXREGKEY "SYSTEM\\CurrentControlSet\\Services\\MixWComEmul"
HINSTANCE hInst;
/*
typedef struct {
HKEY drvConfigKey;
BOOL drvConfigKeyValid;
HKEY svcConfigKey;
BOOL svcConfigKeyValid;
ULONG timeoutScaling;
ULONG statusLines;
ULONG activeConnectOnly;
ULONG oldTimeoutScaling;
ULONG oldStatusLines;
ULONG oldActiveConnectOnly;
} PP_PARAMS_STRUCT;
*/
//char sNumber1[10] = "101", sNumber2[10] = "102";
int m_iCom1[MAXPAIR], m_iCom2[MAXPAIR];
BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
hInst = hDll;
DisableThreadLibraryCalls(hDll);
break;
case DLL_PROCESS_DETACH:
break;
default:
break;
}
return TRUE;
}
BOOL CALLBACK PropDialogProc(HWND hwnd, UINT uMessage, WPARAM wParam, LPARAM lParam);
UINT CALLBACK PropPageCallback(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE pPsp);
void ReadConfig(HWND hwnd)
{
HKEY Key;
//MessageBox(0,"rc1","",0);
if (RegOpenKey(HKEY_LOCAL_MACHINE,
MIXREGKEY,
&Key) != ERROR_SUCCESS)
return;
DWORD Len;
/*
if (RegQueryValue(Key, "1", sNumber1, &Len) != ERROR_SUCCESS || Len<=0)
strcpy(sNumber1,"201");
Len = 10;
if (RegQueryValue(Key, "2", sNumber2, &Len) != ERROR_SUCCESS || Len<=0)
strcpy(sNumber2,"202");
*/
char s[100],ss[20]="Pair";
for (int i=0; i<MAXPAIR; i++)
{
itoa(i+1,ss+4,10);
strcat(ss,"-Port1");
Len = 9;
if (RegQueryValueEx(Key, ss, 0,0, (BYTE*)s, &Len) != ERROR_SUCCESS)
strcpy(s,"0");
m_iCom1[i] = atoi(s);
if (m_iCom1[i]<0 || m_iCom1[i]>MAXPORT)
m_iCom1[i] = 0;
itoa(i+1,ss+4,10);
strcat(ss,"-Port2");
Len = 9;
if (RegQueryValueEx(Key, ss, 0,0, (BYTE*)s, &Len) != ERROR_SUCCESS)
strcpy(s,"0");
m_iCom2[i] = atoi(s);
if (m_iCom2[i]<0 || m_iCom2[i]>MAXPORT)
m_iCom2[i] = 0;
}
RegCloseKey(Key);
//MessageBox(0,"rc2","",0);
// MessageBox(0,sNumber1,"",0);
// MessageBox(0,sNumber2,"",0);
}
void WriteConfig(HWND hwnd)
{
HKEY Key;
//MessageBox(0,"rc1","",0);
if (RegOpenKey(HKEY_LOCAL_MACHINE,
MIXREGKEY,
&Key) != ERROR_SUCCESS)
return;
char s[100],ss[20]="Pair";
for (int i=0; i<MAXPAIR; i++)
{
itoa(i+1,ss+4,10);
strcat(ss,"-Port1");
itoa(m_iCom1[i],s,10);
RegSetValueEx(Key, ss, NULL, REG_SZ,
(BYTE*)s, strlen(s));
itoa(i+1,ss+4,10);
strcat(ss,"-Port2");
itoa(m_iCom2[i],s,10);
RegSetValueEx(Key, ss, NULL, REG_SZ,
(BYTE*)s, strlen(s));
}
RegCloseKey(Key);
}
BOOL WINAPI MixPropPageProvider(LPVOID pInfo, LPFNADDPROPSHEETPAGE addProc,
LPARAM lParam)
{
PROPSHEETPAGE psp;
HPROPSHEETPAGE hpsp;
// PP_PARAMS_STRUCT* pParams;
// pParams = (PP_PARAMS_STRUCT*)LocalAlloc(LPTR, sizeof(PP_PARAMS_STRUCT));
// if (pParams == NULL)
// return FALSE;
/*
ReadConfig(pParams);
*/
psp.dwSize = sizeof(PROPSHEETPAGE);
psp.dwFlags = PSP_USECALLBACK;
psp.hInstance = hInst;
psp.pszTemplate = MAKEINTRESOURCE(IDD_PROPPAGE);
psp.pfnDlgProc = PropDialogProc;
psp.lParam = 0; //(LPARAM)pParams;
psp.pfnCallback = PropPageCallback;
hpsp = CreatePropertySheetPage(&psp);
if (hpsp == NULL)
return FALSE;
if (!(*addProc)(hpsp, lParam))
{
DestroyPropertySheetPage(hpsp);
return FALSE;
}
return TRUE;
}
UINT CALLBACK PropPageCallback(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE pPsp)
{
// PP_PARAMS_STRUCT* pParams;
if (uMsg == PSPCB_RELEASE)
{
/*
pParams = (PP_PARAMS_STRUCT*)pPsp->lParam;
if (pParams->drvConfigKeyValid)
RegCloseKey(pParams->drvConfigKey);
if (pParams->svcConfigKeyValid)
RegCloseKey(pParams->svcConfigKey);
LocalFree(pParams);
*/
}
return TRUE;
}
void CheckSettings(HWND hwnd)
{
BOOL bW1 = FALSE;
char s[1000] = "";
for (int i=0; i<MAXPAIR; i++)
{
BOOL bWarning = FALSE;
if ((m_iCom1[i] && (!m_iCom2[i])) || ((!m_iCom1[i]) && m_iCom2[i]))
bWarning = TRUE; // one is 0, other !0
if ( (m_iCom1[i]!=0) && (m_iCom2[i]!=0) && (m_iCom1[i]==m_iCom2[i]) )
bWarning = TRUE; // one == other
for (int j=0; j<i; j++)
{
if ( (m_iCom1[i] == m_iCom2[j]) && (m_iCom1[i]!=0))
bWarning = TRUE; // same numbers
if ( (m_iCom1[j] == m_iCom2[i]) && (m_iCom1[j]!=0))
bWarning = TRUE; // same numbers
if ( (m_iCom1[i] == m_iCom1[j]) && (m_iCom1[i]!=0))
bWarning = TRUE; // same numbers
if ( (m_iCom2[i] == m_iCom2[j]) && (m_iCom2[i]!=0))
bWarning = TRUE; // same numbers
}
if (bWarning)
{
if (!bW1)
{
strcat(s, "Warning! Conflict in pair(s):");
bW1 = TRUE;
}
char ss[10];
itoa(i+1,ss,10);
strcat(s, " ");
strcat(s, ss);
}
}
HWND hwndText = GetDlgItem(hwnd, IDC_TEXT);
SetWindowText(hwndText, s);
}
BOOL CALLBACK PropDialogProc(HWND hwnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
UINT btnState;
char valStr[5];
// PP_PARAMS_STRUCT* pParams;
switch (uMessage)
{
case WM_INITDIALOG:
{
#ifdef _DEBUG
// pParams = (PP_PARAMS_STRUCT*)LocalAlloc(LPTR, sizeof(PP_PARAMS_STRUCT));
// ReadConfig(pParams);
#else // !_DEBUG
// pParams = (PP_PARAMS_STRUCT*)((LPPROPSHEETPAGE)lParam)->lParam;
#endif // _DEBUG
// SetWindowLong(hwnd, DWL_USER, (LONG)pParams);
// SendMessage(GetDlgItem(hwnd, IDC_TIMEOUT_SLIDER), TBM_SETRANGE, FALSE, MAKELONG(1, 10));
// UpdatePropPageControls(hwnd);
ReadConfig(hwnd);
HWND hwndCombo1 = GetDlgItem(hwnd, IDC_COMBO_1);
HWND hwndCombo2 = GetDlgItem(hwnd, IDC_COMBO_2);
HWND hwndComboPair = GetDlgItem(hwnd, IDC_COMBO_PAIR);
// Pairs
for (int i=1; i<=MAXPAIR; i++)
{
char s[20] = "Pair #";
itoa(i,s+6,10);
SendMessage(hwndComboPair, CB_ADDSTRING, 0, (LPARAM) s);
}
SendMessage(hwndComboPair, CB_SETCURSEL, 0, 0);
// Port numbers
SendMessage(hwndCombo1, CB_ADDSTRING, 0, (LPARAM) "Unassigned");
SendMessage(hwndCombo2, CB_ADDSTRING, 0, (LPARAM) "Unassigned");
char s[10] = "COM";
for (i=1; i<=MAXPORT; i++)
{
//sprintf(s, "COM%i",i);
itoa(i,s+3,10);
SendMessage(hwndCombo1, CB_ADDSTRING, 0, (LPARAM) s);
SendMessage(hwndCombo2, CB_ADDSTRING, 0, (LPARAM) s);
}
int n;
SendMessage(hwndCombo1, CB_SETCURSEL, m_iCom1[0], 0);
SendMessage(hwndCombo2, CB_SETCURSEL, m_iCom2[0], 0);
CheckSettings(hwnd);
}
return TRUE;
/*
case WM_HSCROLL:
pParams = (PP_PARAMS_STRUCT*)GetWindowLong(hwnd, DWL_USER);
pParams->timeoutScaling = SendMessage((HWND)lParam, TBM_GETPOS, 0, 0);
sprintf(valStr, "x %d", pParams->timeoutScaling);
SetDlgItemText(hwnd, IDC_SCALING, valStr);
break;
*/
case WM_COMMAND:
// pParams = (PP_PARAMS_STRUCT*)GetWindowLong(hwnd, DWL_USER);
if (HIWORD(wParam) == CBN_SELCHANGE)
{
HWND hwndCombo1 = GetDlgItem(hwnd, IDC_COMBO_1);
HWND hwndCombo2 = GetDlgItem(hwnd, IDC_COMBO_2);
HWND hwndComboPair = GetDlgItem(hwnd, IDC_COMBO_PAIR);
int iPair = SendMessage(hwndComboPair, CB_GETCURSEL, 0, 0);
if (LOWORD(wParam) == IDC_COMBO_PAIR)
{
SendMessage(hwndCombo1, CB_SETCURSEL, m_iCom1[iPair], 0);
SendMessage(hwndCombo2, CB_SETCURSEL, m_iCom2[iPair], 0);
}
else
if (LOWORD(wParam) == IDC_COMBO_1)
{
m_iCom1[iPair] = SendMessage(hwndCombo1, CB_GETCURSEL, 0, 0);
}
else
if (LOWORD(wParam) == IDC_COMBO_2)
{
m_iCom2[iPair] = SendMessage(hwndCombo2, CB_GETCURSEL, 0, 0);
}
CheckSettings(hwnd);
}
switch (LOWORD(wParam))
{
/*
case IDC_ALL_LINES:
if (HIWORD(wParam) == BN_CLICKED)
{
btnState = IsDlgButtonChecked(hwnd, IDC_ALL_LINES);
if (btnState == BST_CHECKED)
{
pParams->statusLines = MS_CTS_ON | MS_DSR_ON |
MS_RING_ON | MS_RLSD_ON;
}
else if (btnState == BST_INDETERMINATE)
{
CheckDlgButton(hwnd, IDC_ALL_LINES, BST_UNCHECKED);
btnState = BST_UNCHECKED;
pParams->statusLines = 0;
}
else
pParams->statusLines = 0;
CheckDlgButton(hwnd, IDC_CTS, btnState);
CheckDlgButton(hwnd, IDC_DSR, btnState);
CheckDlgButton(hwnd, IDC_RI, btnState);
CheckDlgButton(hwnd, IDC_DCD, btnState);
}
break;
case IDC_CTS:
if (HIWORD(wParam) == BN_CLICKED)
{
btnState = IsDlgButtonChecked(hwnd, IDC_CTS);
if (btnState == BST_CHECKED)
pParams->statusLines |= MS_CTS_ON;
else
pParams->statusLines &= ~MS_CTS_ON;
UpdatePropPageControls(hwnd);
}
break;
case IDC_DSR:
if (HIWORD(wParam) == BN_CLICKED)
{
btnState = IsDlgButtonChecked(hwnd, IDC_DSR);
if (btnState == BST_CHECKED)
pParams->statusLines |= MS_DSR_ON;
else
pParams->statusLines &= ~MS_DSR_ON;
UpdatePropPageControls(hwnd);
}
break;
case IDC_RI:
if (HIWORD(wParam) == BN_CLICKED)
{
btnState = IsDlgButtonChecked(hwnd, IDC_RI);
if (btnState == BST_CHECKED)
pParams->statusLines |= MS_RING_ON;
else
pParams->statusLines &= ~MS_RING_ON;
UpdatePropPageControls(hwnd);
}
break;
case IDC_DCD:
if (HIWORD(wParam) == BN_CLICKED)
{
btnState = IsDlgButtonChecked(hwnd, IDC_DCD);
if (btnState == BST_CHECKED)
pParams->statusLines |= MS_RLSD_ON;
else
pParams->statusLines &= ~MS_RLSD_ON;
UpdatePropPageControls(hwnd);
}
break;
case IDC_DEFAULT:
pParams->timeoutScaling = 1;
pParams->statusLines = 0;
pParams->activeConnectOnly = 0;
UpdatePropPageControls(hwnd);
break;
case IDC_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT_DIALOG), hwnd, AboutDialogProc);
break;
*/
}
return TRUE;
case WM_NOTIFY:
if (((LPNMHDR)lParam)->code != PSN_APPLY)
return FALSE;
//pParams = (PP_PARAMS_STRUCT*)GetWindowLong(hwnd, DWL_USER);
WriteConfig(hwnd);
//MessageBox(0,"OK","",0);
// SetWindowLong(hwnd, DWL_MSGRESULT, PSNRET_NOERROR);
return TRUE;
/*
case WM_HELP:
WinHelp((HWND)((LPHELPINFO)lParam)->hItemHandle, IRCOMM2K_HELPFILE, HELP_WM_HELP,
(DWORD)helpIDs);
break;
#ifdef _DEBUG
case WM_CLOSE:
pParams = (PP_PARAMS_STRUCT*)GetWindowLong(hwnd, DWL_USER);
WriteConfig(hwnd, pParams);
if (pParams->drvConfigKeyValid)
RegCloseKey(pParams->drvConfigKey);
LocalFree(pParams);
EndDialog(hwnd, 0);
return TRUE;
#endif // _DEBUG
*/
}
return FALSE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -