📄 fdemo.c
字号:
break;
default:
StatusMsg(hwnd, "Unhandled event 0x%x", evttype);
break;
}
// These two calls will cause MDI child window to be updated. ChildOnPaint()
// updates the information on the screen.
InvalidateRect(hwnd, NULL, TRUE);
UpdateWindow(hwnd);
return 0;
}
/************************************************************
* NAME: ChildDefProc()
* DESCRIPTION: Our default Child proc that takes 4 normal windows
* parameters. Needed so we can use FORWARD_XX_XXXX
* macro.
************************************************************/
long WINAPI ChildDefProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
// call real default MDI child procedure, passing in window handle
return DefMDIChildProc(hwnd, msg, wParam, lParam);
}
/************************************************************
* NAME: ChildWndProc()
* DESCRIPTION: Child window procedure for MDI child windows
************************************************************/
long WINAPI ChildWndProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
switch (msg) {
HANDLE_MSG(hwnd, WM_PAINT, ChildOnPaint);
HANDLE_MSG(hwnd, WM_CREATE, ChildOnCreate);
HANDLE_MSG(hwnd, WM_DESTROY, ChildOnDestroy);
HANDLE_MSG(hwnd, WM_SYSCOMMAND, ChildOnSysCommand);
HANDLE_MSG(hwnd, WM_SRLNOTIFYEVENT, ChildOnSRLNotifyEvent);
break;
default:
return ChildDefProc(hwnd, msg, wParam, lParam);
}
}
/************************************************************
* NAME: DevOptsDlgProc()
* DESCRIPTION: Update Device settings dialog
************************************************************/
BOOL WINAPI DevOptsDlgProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
static LPDEVDATA lpDevData; // static pointer used thru life of dialog
HWND hwndCtl;
int i;
char szBuff[80];
switch (msg) {
case WM_INITDIALOG:
if ((lpDevData = GetDevPtr((HWND) lParam)) == NULL) {
// This is an error condition
return TRUE;
}
SetWindowContextHelpId(hwnd, IDD_DEVOPTS);
sprintf(szBuff, "Device Options For %s", lpDevData->devname);
SetWindowText(hwnd, szBuff);
// initialize controls with data from DEVDATA structure and firmware
// Note: strtrim() function is used to remove leading/trailing spaces
// before placing them in edit controls. This makes it easier to
// use the editcontrol.
// device information string
SetDlgItemText(hwnd, IDC_DEVINFO, lpDevData->devname);
// local ID edit control
fx_getparm(lpDevData->faxhandle, FC_LOCALID, szBuff);
Edit_LimitText(GetDlgItem(hwnd, IDC_LOCALID), MAXIDLEN);
SetDlgItemText(hwnd, IDC_LOCALID, strtrim(szBuff));
// fax header parameter
if (lpDevData->chtype >= DFS_FAX40) {
fx_getparm(lpDevData->faxhandle, FC_HDRUSER, szBuff);
Edit_LimitText(GetDlgItem(hwnd, IDC_FAXHEADER), MAXHDRLEN);
SetDlgItemText(hwnd, IDC_FAXHEADER, strtrim(szBuff));
}
else {
Static_Enable(GetDlgItem(hwnd, IDS_FAXHEADER), FALSE);
Edit_Enable(GetDlgItem(hwnd, IDC_FAXHEADER), FALSE);
}
// transmit and receive storage coding
if (lpDevData->chtype >= DFS_FAX40E) {
hwndCtl = GetDlgItem(hwnd,IDC_TXCODING);
ComboBox_ResetContent(hwndCtl);
for (i=0;i<sizeof(Coding)/sizeof(Coding[0]);i++) {
ComboBox_AddString(hwndCtl,Coding[i]);
}
i=0;
fx_getparm(lpDevData->faxhandle, FC_TXCODING, &i);
i&= 0x7fff;
ComboBox_SetCurSel(hwndCtl, i);
// receive storage coding
hwndCtl = GetDlgItem(hwnd,IDC_RXCODING);
ComboBox_ResetContent(hwndCtl);
ComboBox_AddString(hwndCtl,Coding[0]);
ComboBox_AddString(hwndCtl,Coding[2]);
i=0;
fx_getparm(lpDevData->faxhandle, FC_RXCODING, &i);
i&= 0x7fff;
ComboBox_SetCurSel(hwndCtl, (i == 0) ? 0 : 1);
}
else {
// tx/rx coding not supported
Static_Enable(GetDlgItem(hwnd, IDS_TXCODING), FALSE);
hwndCtl = GetDlgItem(hwnd,IDC_TXCODING);
ComboBox_AddString(hwndCtl,Coding[0]);
ComboBox_SetCurSel(hwndCtl, 0);
ComboBox_Enable(hwndCtl, FALSE);
Static_Enable(GetDlgItem(hwnd, IDS_RXCODING), FALSE);
hwndCtl = GetDlgItem(hwnd,IDC_RXCODING);
ComboBox_AddString(hwndCtl,Coding[0]);
ComboBox_SetCurSel(hwndCtl, 0);
ComboBox_Enable(hwndCtl, FALSE);
}
// Baud rate combo box
hwndCtl = GetDlgItem(hwnd,IDC_BAUDRATE);
ComboBox_ResetContent(hwndCtl);
// add only supported baud rates to combo box
for (i=(lpDevData->chtype >= DFS_FAX40E) ? 0 : 2;
i<sizeof(BaudRates)/sizeof(BaudRates[0]);
i++) {
ComboBox_AddString(hwndCtl,BaudRates[i]);
}
fx_getparm(lpDevData->faxhandle, FC_TXBAUDRATE, &i);
wsprintf(szBuff, "%d", i);
ComboBox_SelectString(hwndCtl, -1, szBuff);
return(TRUE);
case WM_COMMAND:
if (wParam == IDOK) {
// validate data and update all firmware parameters
// local ID
GetDlgItemText(hwnd, IDC_LOCALID, szBuff, MAXIDLEN);
fx_setparm(lpDevData->faxhandle, FC_LOCALID, szBuff);
// fax header
if (lpDevData->chtype >= DFS_FAX40) {
GetDlgItemText(hwnd, IDC_FAXHEADER, szBuff, MAXHDRLEN);
fx_setparm(lpDevData->faxhandle, FC_HDRUSER, szBuff);
}
// transmit/ receive coding
if (lpDevData->chtype >= DFS_FAX40E) {
i = ComboBox_GetCurSel(GetDlgItem(hwnd, IDC_TXCODING));
fx_setparm(lpDevData->faxhandle, FC_TXCODING, &i);
i = ComboBox_GetCurSel(GetDlgItem(hwnd, IDC_RXCODING));
if (i == 1) {
i = DF_MMR;
}
fx_setparm(lpDevData->faxhandle, FC_RXCODING, &i);
}
// Baud rate, update both TX and RX
hwndCtl = GetDlgItem(hwnd, IDC_BAUDRATE);
i = ComboBox_GetCurSel(hwndCtl);
if (i >= 0) {
ComboBox_GetLBText(hwndCtl, i, szBuff);
}
i = atol(szBuff);
fx_setparm(lpDevData->faxhandle, FC_TXBAUDRATE, &i);
fx_setparm(lpDevData->faxhandle, FC_RXBAUDRATE, &i);
// close dialog box
EndDialog(hwnd, wParam);
}
if (wParam == IDCANCEL) {
// canceled, no changes
EndDialog(hwnd, wParam);
}
break;
}
return FALSE;
}
/************************************************************
* NAME: DevOpenDlgProc()
* DESCRIPTION: Get new device to open
************************************************************/
BOOL WINAPI DevOpenDlgProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
HWND hwndCtl;
int i,j,chcount,bddev;
char szBuff[MAXDEVNAMELEN];
char **lpChName;
switch (msg) {
case WM_INITDIALOG:
SetWindowContextHelpId(hwnd, IDD_OPENDEV);
// initialize controls with fields from DEVDATA structure
// init global field device name will be returned in
szNewDevName[0] = 0;
// device listbox
hwndCtl = GetDlgItem(hwnd, IDC_FAXLIST);
ComboBox_ResetContent(hwndCtl);
// during startup, FaxBoardArray is populated with board names
// that contain fax devices. For each board in the array, get
// the list of fax device names and add then to the combobox.
for (i=0;i<FaxBoardCount;i++) {
if ((bddev = dx_open(FaxBoardArray[i], 0)) != -1) {
chcount = 0;
chcount = ATDV_SUBDEVS(bddev);
lpChName = ATDX_CHNAMES(bddev);
for (j=0;j<chcount;j++) {
ComboBox_AddString(hwndCtl, *lpChName);
lpChName++;
}
dx_close(bddev);
}
}
// select the first one
ComboBox_SetCurSel(hwndCtl, 0);
return(TRUE);
case WM_COMMAND:
if (wParam == IDOK) {
// get the current selection and store it in global variable
hwndCtl = GetDlgItem(hwnd, IDC_FAXLIST);
i = ComboBox_GetCurSel(hwndCtl);
ComboBox_GetLBText(hwndCtl, i, szBuff);
strcpy(szNewDevName, szBuff);
// close dialog box
EndDialog(hwnd, wParam);
}
if (wParam == IDCANCEL) {
// canceled, no changes
EndDialog(hwnd, wParam);
}
break;
}
return FALSE;
}
/************************************************************
* NAME: ASCIIOptsDlgProc()
* DESCRIPTION: Update DF_ASCIIDATA structure
************************************************************/
BOOL WINAPI ASCIIOptsDlgProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
{
static LPDEVDATA lpDevData; // static pointer used thru life of dialog
static fUnits;
char szBuff[80];
switch (msg) {
case WM_INITDIALOG:
// Initialize fields in dialog
if ((lpDevData = GetDevPtr((HWND) lParam)) == NULL) {
// This is an error condition
return TRUE;
}
SetWindowContextHelpId(hwnd, IDD_ASCIIOPTS);
sprintf(szBuff, "ASCII Page Options For %s", lpDevData->devname);
SetWindowText(hwnd, szBuff);
// initialize controls with fields from DEVDATA structure
// Move ASCIIDATA fields to controls
SetDlgItemInt(hwnd, IDC_MARGTOP, lpDevData->asciidata.topmargin, FALSE);
SetDlgItemInt(hwnd, IDC_MARGBOTTOM, lpDevData->asciidata.botmargin, FALSE);
SetDlgItemInt(hwnd, IDC_MARGLEFT, lpDevData->asciidata.leftmargin, FALSE);
SetDlgItemInt(hwnd, IDC_MARGRIGHT, lpDevData->asciidata.rightmargin, FALSE);
SetDlgItemInt(hwnd, IDC_PAGELEN, lpDevData->asciidata.pagelength, FALSE);
// setup automatic buttons
if (lpDevData->asciidata.font == DF_FONT_0) {
Button_SetCheck(GetDlgItem(hwnd,IDC_FONTNORM), 1);
}
else {
Button_SetCheck(GetDlgItem(hwnd,IDC_FONTCOMP), 1);
}
if (lpDevData->asciidata.units == DF_UNITS_IN10) {
Button_SetCheck(GetDlgItem(hwnd,IDC_UNIT10INCH), 1);
fUnits = DF_UNITS_IN10;
}
else {
Button_SetCheck(GetDlgItem(hwnd,IDC_UNITMM), 1);
fUnits = DF_UNITS_MM;
}
return(TRUE);
case WM_COMMAND:
if ((LOWORD(wParam) == IDC_UNIT10INCH) && (fUnits == DF_UNITS_MM)) {
fUnits = DF_UNITS_IN10;
break;
}
if ((LOWORD(wParam) == IDC_UNITMM) && (fUnits == DF_UNITS_IN10)) {
fUnits = DF_UNITS_MM;
break;
}
if (wParam == IDOK) {
// validate and move data back to devdata structure
lpDevData->asciidata.topmargin =
(unsigned short) GetDlgItemInt(hwnd, IDC_MARGTOP, NULL, FALSE);
lpDevData->asciidata.botmargin =
(unsigned short) GetDlgItemInt(hwnd, IDC_MARGBOTTOM, NULL, FALSE);
lpDevData->asciidata.leftmargin =
(unsigned short) GetDlgItemInt(hwnd, IDC_MARGLEFT, NULL, FALSE);
lpDevData->asciidata.rightmargin =
(unsigned short) GetDlgItemInt(hwnd, IDC_MARGRIGHT, NULL, FALSE);
lpDevData->asciidata.pagelength =
(unsigned short) GetDlgItemInt(hwnd, IDC_PAGELEN, NULL, FALSE);
if (IsDlgButtonChecked(hwnd, IDC_FONTNORM) == 0) {
// not checked
lpDevData->asciidata.font = DF_FONT_3;
}
else {
lpDevData->asciidata.font = DF_FONT_0;
}
if (IsDlgButtonChecked(hwnd, IDC_UNIT10INCH) == 0) {
// not checked
lpDevData->asciidata.units = DF_UNITS_MM;
}
else {
lpDevData->asciidata.units = DF_UNITS_IN10;
}
// close dialog box
EndDialog(hwnd, wParam);
}
if (wParam == IDCANCEL) {
// canceled, no changes
EndDialog(hwnd, wParam);
}
break;
}
return FALSE;
}
/************************************************************
* NAME: FileOpenButtonUpdate
* DESCRIPTION: Set Enable/Disable state for add/delete buttons
* INPUT: FileOpen dialog box handle
* OUTPUT: nothing
* CAUTIONS: only call from FileOpenHookProc()
************************************************************/
void FileOpenButtonUpdate(HWND hwnd)
{
int i;
// update Add/Delete button status
i = ListBox_GetCount(GetDlgItem(hwnd, IDC_IOTTLIST));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -