⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlg_wingui.c

📁 postgresql-odbc,跨平台应用
💻 C
📖 第 1 页 / 共 2 页
字号:
				case IDCANCEL:					EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);					return TRUE;			}	}	return FALSE;}LRESULT			CALLBACKds_options1Proc(HWND hdlg,				   UINT wMsg,				   WPARAM wParam,				   LPARAM lParam){	ConnInfo   *ci;	char	strbuf[128];	switch (wMsg)	{		case WM_INITDIALOG:			SetWindowLongPtr(hdlg, DWLP_USER, lParam);		/* save for OK etc */			ci = (ConnInfo *) lParam;			if (ci && ci->dsn && ci->dsn[0])			{				DWORD	cmd;				char	fbuf[64];				cmd = LoadString(s_hModule,						IDS_ADVANCE_OPTION_DSN1,						fbuf,						sizeof(fbuf));				if (cmd <= 0)					strcpy(fbuf, "Advanced Options (%s) 1/2");				sprintf(strbuf, fbuf, ci->dsn);				SetWindowText(hdlg, strbuf);			}			else			{				LoadString(s_hModule, IDS_ADVANCE_OPTION_CON1, strbuf, sizeof(strbuf)); 				SetWindowText(hdlg, strbuf);				ShowWindow(GetDlgItem(hdlg, IDAPPLY), SW_HIDE);			}			driver_optionsDraw(hdlg, ci, 1, FALSE);			break;		case WM_COMMAND:			ci = (ConnInfo *) GetWindowLongPtr(hdlg, DWLP_USER);			switch (GET_WM_COMMAND_ID(wParam, lParam))			{				case IDOK:					driver_options_update(hdlg, ci, NULL);				case IDCANCEL:					EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);					return TRUE;				case IDAPPLY:					driver_options_update(hdlg, ci, NULL);					SendMessage(GetWindow(hdlg, GW_OWNER), WM_COMMAND, wParam, lParam);					break;				case IDDEFAULTS:					driver_optionsDraw(hdlg, ci, 0, FALSE);					break;				case IDNEXTPAGE:					driver_options_update(hdlg, ci, NULL);					EndDialog(hdlg, FALSE);					DialogBoxParam(s_hModule,						MAKEINTRESOURCE(DLG_OPTIONS_DS),                                                 	hdlg, ds_options2Proc, (LPARAM)ci);					break;			}	}	return FALSE;}LRESULT			CALLBACKds_options2Proc(HWND hdlg,			   UINT wMsg,			   WPARAM wParam,			   LPARAM lParam){	ConnInfo   *ci;	char		buf[128];	DWORD		cmd;	BOOL		enable;	switch (wMsg)	{		case WM_INITDIALOG:			ci = (ConnInfo *) lParam;			SetWindowLongPtr(hdlg, DWLP_USER, lParam);		/* save for OK */			/* Change window caption */			if (ci && ci->dsn && ci->dsn[0])			{				char	fbuf[64];				cmd = LoadString(s_hModule,						IDS_ADVANCE_OPTION_DSN2,						fbuf,						sizeof(fbuf));				if (cmd <= 0)					strcpy(fbuf, "Advanced Options (%s) 2/2");				sprintf(buf, fbuf, ci->dsn);				SetWindowText(hdlg, buf);			}			else			{				LoadString(s_hModule, IDS_ADVANCE_OPTION_CON2, buf, sizeof(buf)); 				SetWindowText(hdlg, buf);				ShowWindow(GetDlgItem(hdlg, IDAPPLY), SW_HIDE);				}			/* Readonly */			CheckDlgButton(hdlg, DS_READONLY, atoi(ci->onlyread));			/* Protocol */			enable = (ci->sslmode[0] == 'd' || ci->username[0] == '\0');			EnableWindow(GetDlgItem(hdlg, DS_PG62), enable);			EnableWindow(GetDlgItem(hdlg, DS_PG63), enable);			EnableWindow(GetDlgItem(hdlg, DS_PG64), enable);			EnableWindow(GetDlgItem(hdlg, DS_PG74), enable);			if (PROTOCOL_62(ci))				CheckDlgButton(hdlg, DS_PG62, 1);			else if (PROTOCOL_63(ci))				CheckDlgButton(hdlg, DS_PG63, 1);			else if (PROTOCOL_64(ci))				CheckDlgButton(hdlg, DS_PG64, 1);			else				/* latest */				CheckDlgButton(hdlg, DS_PG74, 1);			/* How to issue Rollback */			switch (ci->rollback_on_error)			{				case 0:					CheckDlgButton(hdlg, DS_NO_ROLLBACK, 1);					break;				case 1:					CheckDlgButton(hdlg, DS_TRANSACTION_ROLLBACK, 1);					break;				case 2:					CheckDlgButton(hdlg, DS_STATEMENT_ROLLBACK, 1);					break;			}			/* Int8 As */			switch (ci->int8_as)			{				case SQL_BIGINT:					CheckDlgButton(hdlg, DS_INT8_AS_BIGINT, 1);					break;				case SQL_NUMERIC:					CheckDlgButton(hdlg, DS_INT8_AS_NUMERIC, 1);					break;				case SQL_VARCHAR:					CheckDlgButton(hdlg, DS_INT8_AS_VARCHAR, 1);					break;				case SQL_DOUBLE:					CheckDlgButton(hdlg, DS_INT8_AS_DOUBLE, 1);					break;				case SQL_INTEGER:					CheckDlgButton(hdlg, DS_INT8_AS_INT4, 1);					break;				default:					CheckDlgButton(hdlg, DS_INT8_AS_DEFAULT, 1);			}			sprintf(buf, "0x%x", getExtraOptions(ci));			SetDlgItemText(hdlg, DS_EXTRA_OPTIONS, buf);			CheckDlgButton(hdlg, DS_SHOWOIDCOLUMN, atoi(ci->show_oid_column));			CheckDlgButton(hdlg, DS_FAKEOIDINDEX, atoi(ci->fake_oid_index));			CheckDlgButton(hdlg, DS_ROWVERSIONING, atoi(ci->row_versioning));			CheckDlgButton(hdlg, DS_SHOWSYSTEMTABLES, atoi(ci->show_system_tables));			CheckDlgButton(hdlg, DS_DISALLOWPREMATURE, ci->disallow_premature);			CheckDlgButton(hdlg, DS_LFCONVERSION, ci->lf_conversion);			CheckDlgButton(hdlg, DS_TRUEISMINUS1, ci->true_is_minus1);			CheckDlgButton(hdlg, DS_UPDATABLECURSORS, ci->allow_keyset);			CheckDlgButton(hdlg, DS_SERVERSIDEPREPARE, ci->use_server_side_prepare);			CheckDlgButton(hdlg, DS_BYTEAASLONGVARBINARY, ci->bytea_as_longvarbinary);			/*CheckDlgButton(hdlg, DS_LOWERCASEIDENTIFIER, ci->lower_case_identifier);*/			EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), atoi(ci->show_oid_column));			/* Datasource Connection Settings */			SetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings);			break;		case WM_COMMAND:			switch (cmd = GET_WM_COMMAND_ID(wParam, lParam))			{				case DS_SHOWOIDCOLUMN:					mylog("WM_COMMAND: DS_SHOWOIDCOLUMN\n");					EnableWindow(GetDlgItem(hdlg, DS_FAKEOIDINDEX), IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));					return TRUE;				case IDOK:				case IDAPPLY:				case IDPREVPAGE:					ci = (ConnInfo *) GetWindowLongPtr(hdlg, DWLP_USER);					mylog("IDOK: got ci = %x\n", ci);					/* Readonly */					sprintf(ci->onlyread, "%d", IsDlgButtonChecked(hdlg, DS_READONLY));					/* Protocol */					if (IsDlgButtonChecked(hdlg, DS_PG62))						strcpy(ci->protocol, PG62);					else if (IsDlgButtonChecked(hdlg, DS_PG63))						strcpy(ci->protocol, PG63);					else if (IsDlgButtonChecked(hdlg, DS_PG64))						strcpy(ci->protocol, PG64);					else						/* latest */						strcpy(ci->protocol, PG74);					/* Issue rollback command on error */					if (IsDlgButtonChecked(hdlg, DS_NO_ROLLBACK))						ci->rollback_on_error = 0;					else if (IsDlgButtonChecked(hdlg, DS_TRANSACTION_ROLLBACK))						ci->rollback_on_error = 1;					else if (IsDlgButtonChecked(hdlg, DS_STATEMENT_ROLLBACK))						ci->rollback_on_error = 2;					else						/* legacy */						ci->rollback_on_error = 1;					/* Int8 As */					if (IsDlgButtonChecked(hdlg, DS_INT8_AS_DEFAULT))						ci->int8_as = 0;					else if (IsDlgButtonChecked(hdlg, DS_INT8_AS_BIGINT))						ci->int8_as = SQL_BIGINT;					else if (IsDlgButtonChecked(hdlg, DS_INT8_AS_NUMERIC))						ci->int8_as = SQL_NUMERIC;					else if (IsDlgButtonChecked(hdlg, DS_INT8_AS_DOUBLE))						ci->int8_as = SQL_DOUBLE;					else if (IsDlgButtonChecked(hdlg, DS_INT8_AS_INT4))						ci->int8_as = SQL_INTEGER;					else						ci->int8_as = SQL_VARCHAR;					GetDlgItemText(hdlg, DS_EXTRA_OPTIONS, buf, sizeof(buf));					setExtraOptions(ci, buf, NULL);					sprintf(ci->show_system_tables, "%d", IsDlgButtonChecked(hdlg, DS_SHOWSYSTEMTABLES));					sprintf(ci->row_versioning, "%d", IsDlgButtonChecked(hdlg, DS_ROWVERSIONING));					ci->disallow_premature = IsDlgButtonChecked(hdlg, DS_DISALLOWPREMATURE);					ci->lf_conversion = IsDlgButtonChecked(hdlg, DS_LFCONVERSION);					ci->true_is_minus1 = IsDlgButtonChecked(hdlg, DS_TRUEISMINUS1);					ci->allow_keyset = IsDlgButtonChecked(hdlg, DS_UPDATABLECURSORS);					ci->use_server_side_prepare = IsDlgButtonChecked(hdlg, DS_SERVERSIDEPREPARE);					ci->bytea_as_longvarbinary = IsDlgButtonChecked(hdlg, DS_BYTEAASLONGVARBINARY);					/*ci->lower_case_identifier = IsDlgButtonChecked(hdlg, DS_LOWERCASEIDENTIFIER);*/					/* OID Options */					sprintf(ci->fake_oid_index, "%d", IsDlgButtonChecked(hdlg, DS_FAKEOIDINDEX));					sprintf(ci->show_oid_column, "%d", IsDlgButtonChecked(hdlg, DS_SHOWOIDCOLUMN));					/* Datasource Connection Settings */					GetDlgItemText(hdlg, DS_CONNSETTINGS, ci->conn_settings, sizeof(ci->conn_settings));					if (IDAPPLY == cmd)					{						SendMessage(GetWindow(hdlg, GW_OWNER), WM_COMMAND, wParam, lParam);						break;					}					EndDialog(hdlg, cmd == IDOK);					if (IDOK == cmd) 						return TRUE;					DialogBoxParam(s_hModule,						MAKEINTRESOURCE(DLG_OPTIONS_DRV),                                         	hdlg, ds_options1Proc, (LPARAM) ci);					break;				case IDCANCEL:					EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);					return TRUE;			}	}	return FALSE;}typedef	SQLRETURN (SQL_API *SQLAPIPROC)();static intmakeDriversList(HWND lwnd, const ConnInfo *ci){	HMODULE	hmodule;	SQLHENV	henv;	int	lcount = 0;	LRESULT iidx;	char	drvname[64], drvatt[128];	SQLUSMALLINT	direction = SQL_FETCH_FIRST;	SQLSMALLINT	drvncount, drvacount;	SQLRETURN	ret;	SQLAPIPROC	addr;	hmodule = GetModuleHandle("ODBC32");	if (!hmodule)	return lcount;	addr = (SQLAPIPROC) GetProcAddress(hmodule, "SQLAllocEnv");	if (!addr)	return lcount;	ret = (*addr)(&henv);	if (SQL_SUCCESS != ret)	return lcount;	do	{		ret = SQLDrivers(henv, direction,			drvname, sizeof(drvname), &drvncount, 			drvatt, sizeof(drvatt), &drvacount); 		if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret)			break;		if (strnicmp(drvname, "postgresql", 10) == 0)		{			iidx = SendMessage(lwnd, LB_ADDSTRING, 0, (LPARAM) drvname);			if (LB_ERR != iidx && stricmp(drvname, ci->drivername) == 0){				SendMessage(lwnd, LB_SETCURSEL, (WPARAM) iidx, (LPARAM) 0);}			lcount++;		}		direction = SQL_FETCH_NEXT;	} while (1);	addr = (SQLAPIPROC) GetProcAddress(hmodule, "SQLFreeEnv");	if (addr)		(*addr)(henv);	return lcount;}LRESULT		CALLBACKmanage_dsnProc(HWND hdlg, UINT wMsg,		WPARAM wParam, LPARAM lParam){	LPSETUPDLG	lpsetupdlg;	ConnInfo	*ci;	HWND		lwnd;	LRESULT		sidx;	char		drvname[64];	switch (wMsg)	{		case WM_INITDIALOG:			SetWindowLongPtr(hdlg, DWLP_USER, lParam);			lpsetupdlg = (LPSETUPDLG) lParam;			ci = &lpsetupdlg->ci;			lwnd = GetDlgItem(hdlg, IDC_DRIVER_LIST);			makeDriversList(lwnd, ci);			break;		case WM_COMMAND:			switch (GET_WM_COMMAND_ID(wParam, lParam))			{				case IDOK:					lpsetupdlg = (LPSETUPDLG) GetWindowLongPtr(hdlg, DWLP_USER);					lwnd = GetDlgItem(hdlg, IDC_DRIVER_LIST);					sidx = SendMessage(lwnd, LB_GETCURSEL,						(WPARAM) 0, (LPARAM) 0);					if (LB_ERR == sidx)						return FALSE;					sidx = SendMessage(lwnd, LB_GETTEXT,						(WPARAM) sidx, (LPARAM) drvname);					if (LB_ERR == sidx)						return FALSE;					ChangeDriverName(hdlg, lpsetupdlg, drvname);				case IDCANCEL:					EndDialog(hdlg, GET_WM_COMMAND_ID(wParam, lParam) == IDOK);					return TRUE;			}	}	return FALSE;}#endif /* WIN32 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -