📄 setup.c
字号:
{ LPSETUPDLG lpsetupdlg; lpsetupdlg = (LPSETUPDLG)GetWindowLong(hdlg, DWL_USER); // Retrieve dialog values if (!lpsetupdlg->fDefault) GetDlgItemText(hdlg, IDC_DSNAME, lpsetupdlg->aAttr[KEY_DSN].szAttr, sizeof(lpsetupdlg->aAttr[KEY_DSN].szAttr)); GetDlgItemText(hdlg, IDC_DESC, lpsetupdlg->aAttr[KEY_DESC].szAttr, sizeof(lpsetupdlg->aAttr[KEY_DESC].szAttr)); GetDlgItemText(hdlg, IDC_DB, lpsetupdlg->aAttr[KEY_DB].szAttr, sizeof(lpsetupdlg->aAttr[KEY_DB].szAttr)); GetDlgItemText(hdlg, IDC_SERVER, lpsetupdlg->aAttr[KEY_SERVER].szAttr, sizeof(lpsetupdlg->aAttr[KEY_SERVER].szAttr)); GetDlgItemText(hdlg, IDC_USER, lpsetupdlg->aAttr[KEY_USER].szAttr, sizeof(lpsetupdlg->aAttr[KEY_USER].szAttr)); GetDlgItemText(hdlg, IDC_PASSWORD, lpsetupdlg->aAttr[KEY_PASSWORD].szAttr, sizeof(lpsetupdlg->aAttr[KEY_PASSWORD].szAttr)); GetDlgItemText(hdlg, IDC_PORT, lpsetupdlg->aAttr[KEY_PORT].szAttr, sizeof(lpsetupdlg->aAttr[KEY_PORT].szAttr)); GetDlgItemText(hdlg, IDC_FLAG, lpsetupdlg->aAttr[KEY_FLAG].szAttr, sizeof(lpsetupdlg->aAttr[KEY_FLAG].szAttr)); // Update ODBC.INI SetDSNAttributes(hdlg, lpsetupdlg); } // Return to caller case IDCANCEL: Ctl3dUnregister (s_hModule); EndDialog(hdlg, wParam); return TRUE; } break; } // Message not processed return FALSE;}/* ParseAttributes --------------------------------------------------------- Description: Parse attribute string moving values into the aAttr array Input : lpszAttributes - Pointer to attribute string Output : None (global aAttr normally updated)--------------------------------------------------------------------------*/void INTFUNC ParseAttributes(LPCSTR lpszAttributes, LPSETUPDLG lpsetupdlg){ LPCSTR lpsz; LPCSTR lpszStart; char aszKey[MAXKEYLEN]; int iElement; int cbKey; DBUG_ENTER("ParseAttributes"); DBUG_PRINT("enter",("attributes: %s",lpszAttributes)); for (lpsz=lpszAttributes; *lpsz;) { // Extract key name (e.g., DSN), it must be terminated by an equals lpszStart = lpsz; if (!(lpsz=strchr(lpsz,'='))) DBUG_VOID_RETURN; // Determine the keys index in the key table (-1 if not found) iElement = -1; cbKey = lpsz - lpszStart; if (cbKey < sizeof(aszKey)) { register int j; _fmemcpy(aszKey, lpszStart, cbKey); aszKey[cbKey] = '\0'; for (j = 0; *s_aLookup[j].szKey; j++) { if (!lstrcmpi(s_aLookup[j].szKey, aszKey)) { iElement = s_aLookup[j].iKey; break; } } } // Locate end of key value lpszStart = ++lpsz; lpsz=strcend(lpsz,';'); // Save value if key is known // NOTE: This code assumes the szAttr buffers in aAttr have been // zero initialized if (iElement >= 0) { lpsetupdlg->aAttr[iElement].fSupplied = TRUE; strmake(lpsetupdlg->aAttr[iElement].szAttr,lpszStart, min(lpsz-lpszStart, sizeof(lpsetupdlg->aAttr[0].szAttr)-1)); } if (*lpsz) lpsz++; /* Skipp ';' */ } DBUG_VOID_RETURN;}void set_attributes(LPSETUPDLG lpsetupdlg){ LPCSTR lpszDSN=lpsetupdlg->aAttr[KEY_DSN].szAttr; if (!lpsetupdlg->aAttr[KEY_DESC].fSupplied) SQLGetPrivateProfileString(lpszDSN, INI_KDESC, EMPTYSTR, lpsetupdlg->aAttr[KEY_DESC].szAttr, sizeof(lpsetupdlg->aAttr[KEY_DESC].szAttr), ODBC_INI); if (!lpsetupdlg->aAttr[KEY_DB].fSupplied) SQLGetPrivateProfileString(lpszDSN, INI_KDB, lpszDSN, lpsetupdlg->aAttr[KEY_DB].szAttr, sizeof(lpsetupdlg->aAttr[KEY_DB].szAttr), ODBC_INI); if (!lpsetupdlg->aAttr[KEY_SERVER].fSupplied) SQLGetPrivateProfileString(lpszDSN, INI_KSERVER, EMPTYSTR, lpsetupdlg->aAttr[KEY_SERVER].szAttr, sizeof(lpsetupdlg->aAttr[KEY_SERVER].szAttr), ODBC_INI); if (!lpsetupdlg->aAttr[KEY_USER].fSupplied) SQLGetPrivateProfileString(lpszDSN, INI_KUSER, EMPTYSTR, lpsetupdlg->aAttr[KEY_USER].szAttr, sizeof(lpsetupdlg->aAttr[KEY_USER].szAttr), ODBC_INI); if (!lpsetupdlg->aAttr[KEY_PASSWORD].fSupplied) SQLGetPrivateProfileString(lpszDSN, INI_KPASSWORD, EMPTYSTR, lpsetupdlg->aAttr[KEY_PASSWORD].szAttr, sizeof(lpsetupdlg->aAttr[KEY_PASSWORD]. szAttr), ODBC_INI); if (!lpsetupdlg->aAttr[KEY_PORT].fSupplied) { char buff[10]; int2str(MYSQL_PORT,buff,10); SQLGetPrivateProfileString(lpszDSN, INI_KPORT, buff, lpsetupdlg->aAttr[KEY_PORT].szAttr, sizeof(lpsetupdlg->aAttr[KEY_PORT]. szAttr), ODBC_INI); } if (!lpsetupdlg->aAttr[KEY_FLAG].fSupplied) SQLGetPrivateProfileString(lpszDSN, INI_KFLAG, "0", lpsetupdlg->aAttr[KEY_FLAG].szAttr, sizeof(lpsetupdlg->aAttr[KEY_FLAG]. szAttr), ODBC_INI);}/* SetDSNAttributes -------------------------------------------------------- Description: Write data source attributes to ODBC.INI Input : hwnd - Parent window handle (plus globals) Output : TRUE if successful, FALSE otherwise--------------------------------------------------------------------------*/BOOL INTFUNC SetDSNAttributes(HWND hwndParent, LPSETUPDLG lpsetupdlg){ LPCSTR lpszDSN=lpsetupdlg->aAttr[KEY_DSN].szAttr; // Pointer to data source name // Validate arguments if (lpsetupdlg->fNewDSN && !*lpsetupdlg->aAttr[KEY_DSN].szAttr) return FALSE; // Write the data source name if (!SQLWriteDSNToIni(lpszDSN, lpsetupdlg->lpszDrvr)) { if (hwndParent) { char szBuf[MAXPATHLEN]; char szMsg[MAXPATHLEN]; LoadString(s_hModule, IDS_BADDSN, szBuf, sizeof(szBuf)); wsprintf(szMsg, szBuf, lpszDSN); LoadString(s_hModule, IDS_MSGTITLE, szBuf, sizeof(szBuf)); MessageBox(hwndParent, szMsg, szBuf, MB_ICONEXCLAMATION | MB_OK); } return FALSE; } // Update ODBC.INI // Save the value if the data source is new, if it was edited, or if // it was explicitly supplied if (hwndParent || lpsetupdlg->aAttr[KEY_DESC].fSupplied ) SQLWritePrivateProfileString(lpszDSN, INI_KDESC, lpsetupdlg->aAttr[KEY_DESC].szAttr, ODBC_INI); if (hwndParent || lpsetupdlg->aAttr[KEY_DB].fSupplied ) SQLWritePrivateProfileString(lpszDSN, INI_KDB, lpsetupdlg->aAttr[KEY_DB].szAttr, ODBC_INI); if (hwndParent || lpsetupdlg->aAttr[KEY_SERVER].fSupplied ) SQLWritePrivateProfileString(lpszDSN, INI_KSERVER, lpsetupdlg->aAttr[KEY_SERVER].szAttr, ODBC_INI); if (hwndParent || lpsetupdlg->aAttr[KEY_USER].fSupplied ) SQLWritePrivateProfileString(lpszDSN, INI_KUSER, lpsetupdlg->aAttr[KEY_USER].szAttr, ODBC_INI); if (hwndParent || lpsetupdlg->aAttr[KEY_PASSWORD].fSupplied ) SQLWritePrivateProfileString(lpszDSN, INI_KPASSWORD, lpsetupdlg->aAttr[KEY_PASSWORD].szAttr, ODBC_INI); if (hwndParent || lpsetupdlg->aAttr[KEY_PORT].fSupplied ) { SQLWritePrivateProfileString(lpszDSN, INI_KPORT, lpsetupdlg->aAttr[KEY_PORT].szAttr, ODBC_INI); } if (hwndParent || lpsetupdlg->aAttr[KEY_FLAG].fSupplied ) { SQLWritePrivateProfileString(lpszDSN, INI_KFLAG, lpsetupdlg->aAttr[KEY_FLAG].szAttr, ODBC_INI); } // If the data source name has changed, remove the old name if (lpsetupdlg->aAttr[KEY_DSN].fSupplied && lstrcmpi(lpsetupdlg->szDSN, lpsetupdlg->aAttr[KEY_DSN].szAttr)) { SQLRemoveDSNFromIni(lpsetupdlg->szDSN); } return TRUE;}/******************************************************************************* Connect dialog for driver connect*****************************************************************************/BOOL FAR PASCAL DriverConnectProc(HWND hdlg,WORD wMsg, WPARAM wParam, LPARAM lParam){ LPSETUPDLG lpsetupdlg; switch (wMsg) { case WM_INITDIALOG: Ctl3dRegister (s_hModule); SetWindowLong(hdlg, DWL_USER, lParam);#ifdef WIN32 Ctl3dSubclassDlg(hdlg, CTL3D_ALL);#else Ctl3dSubclassDlgEx(hdlg, CTL3D_ALL);#endif CenterDialog(hdlg); lpsetupdlg = (LPSETUPDLG) lParam; set_attributes(lpsetupdlg); SetDlgItemText(hdlg, IDC_DSNAME, lpsetupdlg->aAttr[KEY_DSN].szAttr); SetDlgItemText(hdlg, IDC_DB, lpsetupdlg->aAttr[KEY_DB].szAttr); SetDlgItemText(hdlg, IDC_SERVER, lpsetupdlg->aAttr[KEY_SERVER].szAttr); SetDlgItemText(hdlg, IDC_USER, lpsetupdlg->aAttr[KEY_USER].szAttr); SetDlgItemText(hdlg, IDC_PASSWORD, lpsetupdlg->aAttr[KEY_PASSWORD].szAttr); SetDlgItemText(hdlg, IDC_PORT, lpsetupdlg->aAttr[KEY_PORT].szAttr); SetDlgItemText(hdlg, IDC_FLAG, lpsetupdlg->aAttr[KEY_FLAG].szAttr); SendDlgItemMessage(hdlg, IDC_DSNAME, EM_LIMITTEXT, (WPARAM)(MAXDSNAME-1), 0L); SendDlgItemMessage(hdlg, IDC_DESC, EM_LIMITTEXT, (WPARAM)(MAXDESC-1), 0L); SendDlgItemMessage(hdlg, IDC_DB, EM_LIMITTEXT, (WORD)(NAME_LEN), 0L); SendDlgItemMessage(hdlg, IDC_SERVER, EM_LIMITTEXT, (WORD)(MAXSERVER-1), 0L); SendDlgItemMessage(hdlg, IDC_USER, EM_LIMITTEXT, (WORD)(MAXUSER-1), 0L); SendDlgItemMessage(hdlg, IDC_PASSWORD, EM_LIMITTEXT, (WORD)(MAXPASSWORD-1), 0L); SendDlgItemMessage(hdlg, IDC_PORT, EM_LIMITTEXT, (WORD)5, 0L); SendDlgItemMessage(hdlg, IDC_FLAG, EM_LIMITTEXT, (WORD)5, 0L); return TRUE;#ifdef WIN32 case WM_CTLCOLORBTN: case WM_CTLCOLORDLG: case WM_CTLCOLOREDIT: case WM_CTLCOLORLISTBOX: case WM_CTLCOLORMSGBOX: case WM_CTLCOLORSCROLLBAR: case WM_CTLCOLORSTATIC: return (BOOL)Ctl3dCtlColorEx(wMsg, wParam, lParam); case WM_SETTEXT: case WM_NCPAINT: case WM_NCACTIVATE: SetWindowLong(hdlg, DWL_MSGRESULT, Ctl3dDlgFramePaint(hdlg, wMsg, wParam, lParam)); return TRUE;#endif case WM_SYSCOLORCHANGE: return Ctl3dColorChange(); case WM_COMMAND: switch (GET_WM_COMMAND_ID(wParam, lParam)) { case IDC_DSNAME: if (GET_WM_COMMAND_CMD(wParam, lParam) == EN_CHANGE) { char szItem[MAXDSNAME]; EnableWindow(GetDlgItem(hdlg, IDOK), GetDlgItemText(hdlg, IDC_DSNAME,szItem, sizeof(szItem))); return TRUE; } break; case IDOK: lpsetupdlg = (LPSETUPDLG)GetWindowLong(hdlg, DWL_USER); GetDlgItemText(hdlg, IDC_DSNAME, lpsetupdlg->aAttr[KEY_DSN].szAttr, sizeof(lpsetupdlg->aAttr[KEY_DSN].szAttr)); GetDlgItemText(hdlg, IDC_DB, lpsetupdlg->aAttr[KEY_DB].szAttr, sizeof(lpsetupdlg->aAttr[KEY_DB].szAttr)); GetDlgItemText(hdlg, IDC_SERVER, lpsetupdlg->aAttr[KEY_SERVER].szAttr, sizeof(lpsetupdlg->aAttr[KEY_SERVER].szAttr)); GetDlgItemText(hdlg, IDC_USER, lpsetupdlg->aAttr[KEY_USER].szAttr, sizeof(lpsetupdlg->aAttr[KEY_USER].szAttr)); GetDlgItemText(hdlg, IDC_PASSWORD, lpsetupdlg->aAttr[KEY_PASSWORD].szAttr, sizeof(lpsetupdlg->aAttr[KEY_PASSWORD].szAttr)); GetDlgItemText(hdlg, IDC_PORT, lpsetupdlg->aAttr[KEY_PORT].szAttr, sizeof(lpsetupdlg->aAttr[KEY_PORT].szAttr)); GetDlgItemText(hdlg, IDC_FLAG, lpsetupdlg->aAttr[KEY_FLAG].szAttr, sizeof(lpsetupdlg->aAttr[KEY_FLAG].szAttr)); case IDCANCEL: Ctl3dUnregister (s_hModule); EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK); return TRUE; } } return FALSE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -