home *** CD-ROM | disk | FTP | other *** search
- //-----------------------------------------------------------------------------
- // Microsoft OLE DB TABLECOPY Sample
- // Copyright (C) 1995-1998 Microsoft Corporation
- //
- // @doc
- //
- // @module STEP4.CPP
- //
- //-----------------------------------------------------------------------------
-
- /////////////////////////////////////////////////////////////////////
- // Includes
- //
- /////////////////////////////////////////////////////////////////////
- #include "wizard.h"
- #include "common.h"
- #include "tablecopy.h"
- #include "table.h"
-
-
- /////////////////////////////////////////////////////////////////////
- // Defines
- //
- /////////////////////////////////////////////////////////////////////
- //Enum Type Header for the ListView controls
- enum COL_HEADERS
- {
- //IDL_FROM_TYPES
- //ID_TO_TYPES
- COL_COLNAME = 0, //ColInfo.pwszName
- COL_COLTYPENAME = 1, //TypeInfo.pwszTypeName
- COL_COLTYPE = 2, //ColInfo.wType
- COL_COLORDINAL = 3, //ColInfo.iOrdinal
- COL_COLSIZE = 4, //ColInfo.ulColumnSize
- COL_COLPREC = 5, //ColInfo.bPrecision
- COL_COLSCALE = 6, //ColInfo.bScale
- COL_COLISFIXED = 7, //ColInfo.dwFlags ISFIXEDLENGTH
- COL_COLISLONG = 8, //ColInfo.dwFlags ISLONG
- COL_COLISNULLABLE = 9, //ColInfo.dwFlags ISNULLABLE
- COL_COLWRITE =10, //ColInfo.dwFlags WRITE
- COL_COLISROWID =11, //ColInfo.dwFlags ISROWID
- COL_COLISROWVER =12, //ColInfo.dwFlags ISROWVER
- };
-
- enum EICON
- {
- ICON_COLUMN = 0,
- ICON_READONLY = 1,
- ICON_LONG = 2,
- };
-
- /////////////////////////////////////////////////////////////////////
- // CS4Dialog::CS4Dialog
- //
- /////////////////////////////////////////////////////////////////////
- CS4Dialog::CS4Dialog(HWND hWnd, HINSTANCE hInst, CTableCopy* pCTableCopy)
- : CDialogBase(hWnd, hInst)
- {
- ASSERT(pCTableCopy);
- m_pCTableCopy = pCTableCopy;
- }
-
-
- /////////////////////////////////////////////////////////////////////
- // CS4Dialog::~CS4Dialog
- //
- /////////////////////////////////////////////////////////////////////
- CS4Dialog::~CS4Dialog()
- {
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // ULONG CS4Dialog::Display
- //
- /////////////////////////////////////////////////////////////////////////////
- ULONG CS4Dialog::Display()
- {
- return DialogBoxParam(m_hInst, MAKEINTRESOURCE(IDD_OPTIONS), NULL, DlgProc, (LPARAM)this);
- }
-
-
- /////////////////////////////////////////////////////////////////////
- // CS4Dialog::DlgProc
- //
- /////////////////////////////////////////////////////////////////////
- BOOL WINAPI CS4Dialog::DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch(msg)
- {
- case WM_INITDIALOG:
- {
- Busy();
- //Store the "this" pointer, since this is a static method
- CS4Dialog* pThis = (CS4Dialog*)lParam;
- SetWindowLong(hWnd, GWL_USERDATA, (LONG)pThis);
-
- //On INIT we know we have a valid hWnd to store
- pThis->m_hWnd = hWnd;
-
- pThis->InitControls();
- CenterDialog(hWnd);
- pThis->m_pCTableCopy->m_pCWizard->DestroyPrevStep(WIZ_STEP4);
- return HANDLED_MSG;
- }
-
- case WM_COMMAND:
- {
- //Obtain the "this" pointer
- CS4Dialog* pThis = (CS4Dialog*)GetWindowLong(hWnd, GWL_USERDATA);
-
- // All buttons are handled the same way
- switch(GET_WM_COMMAND_ID(wParam, lParam))
- {
- case IDX_COPY_TABLE:
- case IDX_COPY_INDEXES:
- case IDX_SHOW_SQL:
-
- case IDR_ALL_ROWS:
- case IDR_ROW_COUNT:
- case IDR_PARAM_SETS:
- case IDR_INSERTROW_IMMEDIATE:
- case IDR_INSERTROW_BUFFERED:
- case IDR_BLOB_SIZE:
- case IDR_ISEQ_STREAM:
- Busy();
- pThis->RefreshControls();
- return HANDLED_MSG;
-
-
- case IDOK:
- Busy();
- if(!pThis->RefreshControls())
- return HANDLED_MSG;
-
- pThis->m_pCTableCopy->m_pCWizard->DisplayStep(WIZ_TYPES);
- return HANDLED_MSG;
-
- case IDB_PREV:
- Busy();
- if(!pThis->RefreshControls())
- return HANDLED_MSG;
-
- pThis->m_pCTableCopy->m_pCWizard->DisplayStep(WIZ_STEP3);
- return HANDLED_MSG;
-
- case IDCANCEL:
- Busy();
- EndDialog(hWnd, GET_WM_COMMAND_ID(wParam, lParam));
- return HANDLED_MSG;
- }
- }
- }
-
- return UNHANDLED_MSG;
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // BOOL CS4Dialog::InitControls
- //
- /////////////////////////////////////////////////////////////////////////////
- BOOL CS4Dialog::InitControls()
- {
- CDataSource* pCToDataSource = m_pCTableCopy->m_pCToTable->m_pCDataSource;
-
- //IDX_COPY_TABLE (default-checked)
- EnableWindow(GetDlgItem(m_hWnd, IDX_COPY_TABLE), pCToDataSource->m_pICommandText || pCToDataSource->m_pITableDefinition);
- CheckDlgButton(m_hWnd, IDX_COPY_TABLE, m_pCTableCopy->m_fCopyTables);
- wSetDlgItemText(m_hWnd, IDX_COPY_TABLE, pCToDataSource->m_pwszTableTerm);
-
- //IDX_COPY_INDEXES (default-checked)
- EnableWindow(GetDlgItem(m_hWnd, IDX_COPY_INDEXES), pCToDataSource->m_pICommandText || pCToDataSource->m_pIIndexDefinition);
- CheckDlgButton(m_hWnd, IDX_COPY_INDEXES, m_pCTableCopy->m_fCopyIndexes);
-
- //IDX_COPY_PRIMARYKEYS (default-checked)
- EnableWindow(GetDlgItem(m_hWnd, IDX_COPY_PRIMARYKEYS), pCToDataSource->m_fPrimaryKeysSupported);
- CheckDlgButton(m_hWnd, IDX_COPY_PRIMARYKEYS, m_pCTableCopy->m_fCopyPrimaryKeys);
-
- //IDX_SHOW_SQL (checked)
- EnableWindow(GetDlgItem(m_hWnd, IDX_SHOW_SQL), pCToDataSource->m_pICommandText != NULL);
- CheckDlgButton(m_hWnd, IDX_SHOW_SQL, m_pCTableCopy->m_fShowQuery);
-
- //IDR_ALL_ROWS (default)
- //IDR_MAX_ROWS
- CheckRadioButton(m_hWnd, IDR_ALL_ROWS, IDR_ROW_COUNT, m_pCTableCopy->m_dwRowOpt);
- wSetDlgItemText(m_hWnd, IDE_ROW_COUNT, L"%lu", m_pCTableCopy->m_ulMaxRows);
-
- //IDR_PARAM_SETS (default)
- //If multiple param sets are not supported by this driver, select only 1 set
- if(!pCToDataSource->m_fMultipleParamSets)
- m_pCTableCopy->m_ulParamSets = 1;
- if (pCToDataSource->m_pICommandText == NULL)
- {
- m_pCTableCopy->m_dwInsertOpt = IDR_INSERTROW_IMMEDIATE;
- EnableWindow(GetDlgItem(m_hWnd, IDR_PARAM_SETS), FALSE);
- }
- CheckRadioButton(m_hWnd, IDR_PARAM_SETS, IDR_INSERTROW_BUFFERED, m_pCTableCopy->m_dwInsertOpt);
- wSetDlgItemText(m_hWnd, IDE_PARAM_SETS, L"%lu", m_pCTableCopy->m_ulParamSets);
-
- //Enable IDR_INSERTROW_IMMEDIATE radio button if supported by the provider
- EnableWindow(GetDlgItem(m_hWnd, IDR_INSERTROW_IMMEDIATE), pCToDataSource->m_fIRowsetChange);
-
- //Enable IDR_INSERTROW_BUFFERED radio button if supported by the provider
- EnableWindow(GetDlgItem(m_hWnd, IDR_INSERTROW_BUFFERED), pCToDataSource->m_fIRowsetUpdate);
-
- //IDR_BLOB_SIZE (default)
- //IDR_ISEQ_STREAM
- EnableWindow(GetDlgItem(m_hWnd, IDR_ISEQ_STREAM), pCToDataSource->m_dwStorageObjects & DBPROPVAL_SS_ISEQUENTIALSTREAM);
- CheckRadioButton(m_hWnd, IDR_BLOB_SIZE, IDR_ISEQ_STREAM, m_pCTableCopy->m_dwBlobOpt);
- wSetDlgItemText(m_hWnd, IDE_BLOB_SIZE, L"%lu", m_pCTableCopy->m_ulBlobSize);
-
- //Limit the TextLength of the Edit Controls to 10 chars
- SendDlgItemMessage(m_hWnd, IDE_ROW_COUNT, EM_LIMITTEXT, (WPARAM)10, 0L);
- SendDlgItemMessage(m_hWnd, IDE_PARAM_SETS, EM_LIMITTEXT, (WPARAM)10, 0L);
- SendDlgItemMessage(m_hWnd, IDE_BLOB_SIZE, EM_LIMITTEXT, (WPARAM)10, 0L);
-
- //Only allow "NEXT" button if Some form of INSERT is supported
- EnableWindow(GetDlgItem(m_hWnd, IDOK), pCToDataSource->m_pICommandText || pCToDataSource->m_pITableDefinition);
-
- // Refresh the controls
- RefreshControls();
- return TRUE;
- }
-
-
-
- /////////////////////////////////////////////////////////////////////////////
- // BOOL CS4Dialog::RefreshControls
- //
- /////////////////////////////////////////////////////////////////////////////
- BOOL CS4Dialog::RefreshControls()
- {
- // IDE_ROW_COUNT Get the Copy options first so we can check the row count if given.
- if(IsDlgButtonChecked(m_hWnd, IDR_ROW_COUNT))
- {
- m_pCTableCopy->m_dwRowOpt = IDR_ROW_COUNT;
- EnableWindow(GetDlgItem(m_hWnd, IDE_ROW_COUNT), TRUE);
- }
- else
- {
- m_pCTableCopy->m_dwRowOpt = IDR_ALL_ROWS;
- EnableWindow(GetDlgItem(m_hWnd, IDE_ROW_COUNT), FALSE);
- }
-
- //Verify IDE_ROW_COUNT has legal value
- if(!GetEditBoxValue(GetDlgItem(m_hWnd, IDE_ROW_COUNT), 1, LONG_MAX, &m_pCTableCopy->m_ulMaxRows))
- return FALSE;
-
- //IDE_PARAM_SETS Get the Insert ParamSets options
- if(IsDlgButtonChecked(m_hWnd, IDR_PARAM_SETS))
- {
- m_pCTableCopy->m_dwInsertOpt = IDR_PARAM_SETS;
- EnableWindow(GetDlgItem(m_hWnd, IDE_PARAM_SETS), m_pCTableCopy->m_pCToTable->m_pCDataSource->m_fMultipleParamSets);
- }
- else if(IsDlgButtonChecked(m_hWnd, IDR_INSERTROW_IMMEDIATE))
- {
- //IDR_INSERTROW_IMMEDIATE
- m_pCTableCopy->m_dwInsertOpt = IDR_INSERTROW_IMMEDIATE;
- EnableWindow(GetDlgItem(m_hWnd, IDE_PARAM_SETS), FALSE);
- }
- else
- {
- //IDR_INSERTROW_IMMEDIATE
- m_pCTableCopy->m_dwInsertOpt = IDR_INSERTROW_BUFFERED;
- EnableWindow(GetDlgItem(m_hWnd, IDE_PARAM_SETS), FALSE);
- }
-
- //Verify IDE_PARAM_SETS has legal value
- if(!GetEditBoxValue(GetDlgItem(m_hWnd, IDE_PARAM_SETS), 1, LONG_MAX, &m_pCTableCopy->m_ulParamSets))
- return FALSE;
-
- //IDE_BLOB_SIZE Get the Insert ParamSets options
- if(IsDlgButtonChecked(m_hWnd, IDR_BLOB_SIZE))
- {
- m_pCTableCopy->m_dwBlobOpt = IDR_BLOB_SIZE;
- EnableWindow(GetDlgItem(m_hWnd, IDE_BLOB_SIZE), TRUE);
- }
- else
- {
- m_pCTableCopy->m_dwBlobOpt = IDR_ISEQ_STREAM;
- EnableWindow(GetDlgItem(m_hWnd, IDE_BLOB_SIZE), FALSE);
- }
-
- //Verify IDE_BLOB_SIZE has legal value
- if(!GetEditBoxValue(GetDlgItem(m_hWnd, IDE_BLOB_SIZE), 1, MAX_COL_SIZE, &m_pCTableCopy->m_ulBlobSize))
- return FALSE;
-
- // Get Create options
- m_pCTableCopy->m_fCopyTables = IsDlgButtonChecked(m_hWnd, IDX_COPY_TABLE);
- m_pCTableCopy->m_fCopyIndexes = IsDlgButtonChecked(m_hWnd, IDX_COPY_INDEXES);
- m_pCTableCopy->m_fCopyPrimaryKeys = IsDlgButtonChecked(m_hWnd, IDX_COPY_PRIMARYKEYS);
-
- // Set other Options
- m_pCTableCopy->m_fShowQuery = IsDlgButtonChecked(m_hWnd, IDX_SHOW_SQL);
- return TRUE;
- }
-
-
- /////////////////////////////////////////////////////////////////////
- // CTypesDialog::CTypesDialog
- //
- /////////////////////////////////////////////////////////////////////
- CTypesDialog::CTypesDialog(HWND hWnd, HINSTANCE hInst, CTableCopy* pCTableCopy)
- : CDialogBase(hWnd, hInst)
- {
- ASSERT(pCTableCopy);
- m_pCTableCopy = pCTableCopy;
- }
-
-
- /////////////////////////////////////////////////////////////////////
- // CTypesDialog::~CTypesDialog
- //
- /////////////////////////////////////////////////////////////////////
- CTypesDialog::~CTypesDialog()
- {
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // ULONG CTypesDialog::Display
- //
- /////////////////////////////////////////////////////////////////////////////
- ULONG CTypesDialog::Display()
- {
- return DialogBoxParam(m_hInst, MAKEINTRESOURCE(IDD_DATA_TYPES), NULL, DlgProc, (LPARAM)this);
- }
-
-
- /////////////////////////////////////////////////////////////////////
- // CTypesDialog::DlgProc
- //
- /////////////////////////////////////////////////////////////////////
- BOOL WINAPI CTypesDialog::DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
- {
- switch(msg)
- {
- case WM_INITDIALOG:
- {
- Busy();
- //Store the "this" pointer, since this is a static method
- CTypesDialog* pThis = (CTypesDialog*)lParam;
- SetWindowLong(hWnd, GWL_USERDATA, (LONG)pThis);
-
- //On INIT we know we have a valid hWnd to store
- CenterDialog(hWnd);
- pThis->m_hWnd = hWnd;
-
- //Tell TableCopy to Map the Types from the Source->Target
- //If MapTypes fails, start over, (ie: same as hitting OK)
- if(FAILED(pThis->m_pCTableCopy->MapTypes()))
- {
- EndDialog(hWnd, 0);
- return UNHANDLED_MSG;
- }
-
- pThis->InitControls();
- pThis->RefreshControls();
-
- // Now Display the lists of Mappings
- pThis->ResetTypeLists();
- pThis->m_pCTableCopy->m_pCWizard->DestroyPrevStep(WIZ_TYPES);
- return HANDLED_MSG;
- }
-
- // Now look for WM_NOTIFY messages
- case WM_NOTIFY:
- {
- if(wParam == IDL_FROM_TYPES || wParam == IDL_TO_TYPES)
- {
- //Obtain the "this" pointer
- CTypesDialog* pThis = (CTypesDialog*)GetWindowLong(hWnd, GWL_USERDATA);
- NM_LISTVIEW* pListView = (NM_LISTVIEW*)lParam;
-
- switch(pListView->hdr.code)
- {
- case LVN_ITEMCHANGED:
- {
- if(pListView->uNewState & LVNI_FOCUSED &&
- pListView->uNewState & LVNI_SELECTED)
- {
- if(wParam == IDL_FROM_TYPES)
- {
- Busy();
- SyncSibling(GetDlgItem(hWnd,IDL_TO_TYPES), GetDlgItem(hWnd,IDL_FROM_TYPES));
- return HANDLED_MSG;
- }
-
- if(wParam == IDL_TO_TYPES)
- {
- Busy();
- SyncSibling(GetDlgItem(hWnd,IDL_FROM_TYPES), GetDlgItem(hWnd,IDL_TO_TYPES));
- return HANDLED_MSG;
- }
- return UNHANDLED_MSG; //No return Value
- }
- return UNHANDLED_MSG;
- }//case LVN_ITEMCHANGED
- }
- return UNHANDLED_MSG;
- }//IDL_TABLES
- return UNHANDLED_MSG;
- }//WM_NOTIFY
-
- case WM_COMMAND:
- {
- // All buttons are handled the same way
-
- //Obtain the "this" pointer
- CTypesDialog* pThis = (CTypesDialog*)GetWindowLong(hWnd, GWL_USERDATA);
-
- switch(GET_WM_COMMAND_ID(wParam, lParam))
- {
- case IDOK:
- //Now copy the Tables
- pThis->m_pCTableCopy->CopyTables();
-
- Busy();
- pThis->m_pCTableCopy->m_pCWizard->DisplayStep(WIZ_STEP1);
- return HANDLED_MSG;
-
- case IDB_PREV:
- Busy();
- pThis->m_pCTableCopy->m_pCWizard->DisplayStep(WIZ_STEP4);
- return HANDLED_MSG;
-
- case IDCANCEL:
- Busy();
- EndDialog(hWnd, GET_WM_COMMAND_ID(wParam, lParam));
- return HANDLED_MSG;
- }
- }
- }
-
- return UNHANDLED_MSG;
- }
-
-
- /////////////////////////////////////////////////////////////////////////////
- // BOOL CTypesDialog::InitControls
- //
- /////////////////////////////////////////////////////////////////////////////
- BOOL CTypesDialog::InitControls()
- {
- HWND hWndFrom = GetDlgItem(m_hWnd, IDL_FROM_TYPES);
- HWND hWndTo = GetDlgItem(m_hWnd, IDL_TO_TYPES);
-
- CDataSource* pCFromDataSource = m_pCTableCopy->m_pCFromTable->m_pCDataSource;
- CDataSource* pCToDataSource = m_pCTableCopy->m_pCToTable->m_pCDataSource;
-
- //CONNECT_STRING
- wSetDlgItemText(m_hWnd, IDT_FROM_CONNECT, wsz_TYPES_STRING_,
- pCFromDataSource->m_pwszProviderName,
- pCFromDataSource->m_pwszDataSource,
- pCFromDataSource->m_pwszTableTerm,
- m_pCTableCopy->m_pCFromTable->m_wszQualTableName);
-
- //CONNECT_STRING
- wSetDlgItemText(m_hWnd, IDT_TO_CONNECT, wsz_TYPES_STRING_,
- pCToDataSource->m_pwszProviderName,
- pCToDataSource->m_pwszDataSource,
- pCToDataSource->m_pwszTableTerm,
- m_pCTableCopy->m_pCToTable->m_wszQualTableName);
-
- //Create the Col ImageList
- HIMAGELIST hColImageList = ImageList_Create(16, 16, ILC_MASK, 1, 0 );
-
- //IDI_COLUMN - normal column icon
- HICON hIcon = LoadIcon(m_hInst, MAKEINTRESOURCE(IDI_COLUMN));
- ImageList_AddIcon(hColImageList, hIcon);
- //IDI_COLUMNREAD - read-only column icon
- hIcon = LoadIcon(m_hInst, MAKEINTRESOURCE(IDI_COLUMNREAD));
- ImageList_AddIcon(hColImageList, hIcon);
- //IDI_COLUMNLONG - long column icon
- hIcon = LoadIcon(m_hInst, MAKEINTRESOURCE(IDI_COLUMNLONG));
- ImageList_AddIcon(hColImageList, hIcon);
-
- //Set image list to the Table Window
- ListView_SetImageList(hWndFrom, hColImageList, LVSIL_SMALL);
- ListView_SetImageList(hWndTo, hColImageList, LVSIL_SMALL);
-
- //Use Extended ListView Styles!
- SendMessage(hWndFrom, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_TWOCLICKACTIVATE | LVS_EX_SUBITEMIMAGES, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_TWOCLICKACTIVATE | LVS_EX_SUBITEMIMAGES);
- SendMessage(hWndTo, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_TWOCLICKACTIVATE | LVS_EX_SUBITEMIMAGES, LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_TWOCLICKACTIVATE | LVS_EX_SUBITEMIMAGES);
-
- //Source ListView COLUMNS
- LV_InsertColumn(hWndFrom, COL_COLNAME, "ColName");
- LV_InsertColumn(hWndFrom, COL_COLTYPENAME, "TypeName");
- LV_InsertColumn(hWndFrom, COL_COLTYPE, "Type");
- LV_InsertColumn(hWndFrom, COL_COLSIZE, "Size");
- LV_InsertColumn(hWndFrom, COL_COLORDINAL, "Ordinal");
- LV_InsertColumn(hWndFrom, COL_COLPREC, "Precision");
- LV_InsertColumn(hWndFrom, COL_COLSCALE, "Scale");
- LV_InsertColumn(hWndFrom, COL_COLISFIXED, "ISFIXED");
- LV_InsertColumn(hWndFrom, COL_COLISLONG, "ISLONG");
- LV_InsertColumn(hWndFrom, COL_COLISNULLABLE, "ISNULLABLE");
- LV_InsertColumn(hWndFrom, COL_COLWRITE, "WRITE");
- LV_InsertColumn(hWndFrom, COL_COLISROWID, "ISROWID");
- LV_InsertColumn(hWndFrom, COL_COLISROWVER, "ISROWVER");
-
- //Target ListView COLUMNS
- LV_InsertColumn(hWndTo, COL_COLNAME, "ColName");
- LV_InsertColumn(hWndTo, COL_COLTYPENAME, "TypeName");
- LV_InsertColumn(hWndTo, COL_COLTYPE, "Type");
- LV_InsertColumn(hWndTo, COL_COLSIZE, "Size");
- LV_InsertColumn(hWndTo, COL_COLORDINAL, "Ordinal");
- LV_InsertColumn(hWndTo, COL_COLPREC, "Precision");
- LV_InsertColumn(hWndTo, COL_COLSCALE, "Scale");
- LV_InsertColumn(hWndTo, COL_COLISFIXED, "ISFIXED");
- LV_InsertColumn(hWndTo, COL_COLISLONG, "ISLONG");
- LV_InsertColumn(hWndTo, COL_COLISNULLABLE, "ISNULLABLE");
- LV_InsertColumn(hWndTo, COL_COLWRITE, "WRITE");
- LV_InsertColumn(hWndTo, COL_COLISROWID, "ISROWID");
- LV_InsertColumn(hWndTo, COL_COLISROWVER, "ISROWVER");
-
- //AutoSize all columns
- for(ULONG i=0; i<=COL_COLISROWVER; i++)
- {
- SendMessage(hWndFrom, LVM_SETCOLUMNWIDTH, (WPARAM)i, (LPARAM)LVSCW_AUTOSIZE_USEHEADER);
- SendMessage(hWndTo, LVM_SETCOLUMNWIDTH, (WPARAM)i, (LPARAM)LVSCW_AUTOSIZE_USEHEADER);
- }
- return TRUE;
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // BOOL CTypesDialog::RefreshControls
- //
- /////////////////////////////////////////////////////////////////////////////
- BOOL CTypesDialog::RefreshControls()
- {
- return TRUE;
- }
-
- /////////////////////////////////////////////////////////////////////////////
- // BOOL CTypesDialog::ResetTypeLists
- //
- /////////////////////////////////////////////////////////////////////////////
- BOOL CTypesDialog::ResetTypeLists()
- {
- HWND hWndFrom; // From data types
- HWND hWndTo; // To data types
-
- WCHAR wszBuffer[MAX_NAME_LEN];
- CHAR szBuffer[MAX_NAME_LEN];
-
- CTable* pCFromTable = m_pCTableCopy->m_pCFromTable;
- CTable* pCToTable = m_pCTableCopy->m_pCToTable;
-
- // Get window handles to speed up the population
- hWndFrom = GetDlgItem(m_hWnd, IDL_FROM_TYPES);
- hWndTo = GetDlgItem(m_hWnd, IDL_TO_TYPES);
-
- // Now populate each list
- for(ULONG i=0; i<pCFromTable->m_cColumns; i++)
- {
- COLDESC* pCFromColDesc = &pCFromTable->m_rgColDesc[i];
- COLDESC* pCToColDesc = &pCToTable->m_rgColDesc[i];
-
- //COLNAME (item)
- ConvertToMBCS(pCFromColDesc->wszColName, szBuffer, MAX_NAME_LEN);
- LV_InsertItem(hWndFrom, i, COL_COLNAME, szBuffer, 0, pCFromColDesc->dwFlags & (DBCOLUMNFLAGS_WRITE | DBCOLUMNFLAGS_WRITEUNKNOWN) ? ((pCFromColDesc->dwFlags & DBCOLUMNFLAGS_ISLONG) ? ICON_LONG : ICON_COLUMN) : ICON_READONLY);
- ConvertToMBCS(pCToColDesc->wszColName, szBuffer, MAX_NAME_LEN);
- LV_InsertItem(hWndTo, i, COL_COLNAME, szBuffer, 0, pCToColDesc->dwFlags & (DBCOLUMNFLAGS_WRITE | DBCOLUMNFLAGS_WRITEUNKNOWN) ? ((pCToColDesc->dwFlags & DBCOLUMNFLAGS_ISLONG) ? ICON_LONG : ICON_COLUMN) : ICON_READONLY);
-
- //COLTYPENAME (subitem)
- pCFromTable->GetTypeNameAndParams(i, wszBuffer);
- ConvertToMBCS(wszBuffer, szBuffer, MAX_NAME_LEN);
- LV_InsertItem(hWndFrom, i, COL_COLTYPENAME, szBuffer);
- pCToTable->GetTypeNameAndParams(i, wszBuffer);
- ConvertToMBCS(wszBuffer, szBuffer, MAX_NAME_LEN);
- LV_InsertItem(hWndTo, i, COL_COLTYPENAME, szBuffer);
-
- //COLTYPE (subitem)
- ConvertToMBCS(GetDBTypeName(pCFromColDesc->wType), szBuffer, MAX_NAME_LEN);
- LV_InsertItem(hWndFrom, i, COL_COLTYPE, szBuffer);
- ConvertToMBCS(GetDBTypeName(pCToColDesc->wType), szBuffer, MAX_NAME_LEN);
- LV_InsertItem(hWndTo, i, COL_COLTYPE, szBuffer);
-
- //Ordinal (SubItem)
- sprintf(szBuffer, "%d", pCFromColDesc->iOrdinal);
- LV_InsertItem(hWndFrom, i, COL_COLORDINAL, szBuffer);
- sprintf(szBuffer, "%d", pCToColDesc->iOrdinal);
- LV_InsertItem(hWndTo, i, COL_COLORDINAL, szBuffer);
-
- //ColumnSize (SubItem)
- sprintf(szBuffer, "%d", pCFromColDesc->ulColumnSize);
- LV_InsertItem(hWndFrom, i, COL_COLSIZE, szBuffer);
- sprintf(szBuffer, "%d", pCToColDesc->ulColumnSize);
- LV_InsertItem(hWndTo, i, COL_COLSIZE, szBuffer);
-
- //Precision (SubItem)
- sprintf(szBuffer, "%d", pCFromColDesc->bPrecision);
- LV_InsertItem(hWndFrom, i, COL_COLPREC, szBuffer);
- sprintf(szBuffer, "%d", pCToColDesc->bPrecision);
- LV_InsertItem(hWndTo, i, COL_COLPREC, szBuffer);
-
- //Scale (SubItem)
- sprintf(szBuffer, "%d", pCFromColDesc->bScale);
- LV_InsertItem(hWndFrom, i, COL_COLSCALE, szBuffer);
- sprintf(szBuffer, "%d", pCToColDesc->bScale);
- LV_InsertItem(hWndTo, i, COL_COLSCALE, szBuffer);
-
- //ISFIXED (SubItem)
- LV_InsertItem(hWndFrom, i, COL_COLISFIXED, pCFromColDesc->dwFlags & DBCOLUMNFLAGS_ISFIXEDLENGTH ? "TRUE" : "FALSE");
- LV_InsertItem(hWndTo, i, COL_COLISFIXED, pCToColDesc->dwFlags & DBCOLUMNFLAGS_ISFIXEDLENGTH ? "TRUE" : "FALSE");
-
- //ISLONG (SubItem)
- LV_InsertItem(hWndFrom, i, COL_COLISLONG, pCFromColDesc->dwFlags & DBCOLUMNFLAGS_ISLONG ? "TRUE" : "FALSE");
- LV_InsertItem(hWndTo, i, COL_COLISLONG, pCToColDesc->dwFlags & DBCOLUMNFLAGS_ISLONG ? "TRUE" : "FALSE");
-
- //ISNULLABLE (SubItem)
- LV_InsertItem(hWndFrom, i, COL_COLISNULLABLE, pCFromColDesc->dwFlags & DBCOLUMNFLAGS_ISNULLABLE ? "TRUE" : "FALSE");
- LV_InsertItem(hWndTo, i, COL_COLISNULLABLE, pCToColDesc->dwFlags & DBCOLUMNFLAGS_ISNULLABLE ? "TRUE" : "FALSE");
-
- //WRITE (SubItem)
- LV_InsertItem(hWndFrom, i, COL_COLWRITE, pCFromColDesc->dwFlags & (DBCOLUMNFLAGS_WRITE | DBCOLUMNFLAGS_WRITEUNKNOWN) ? "TRUE" : "FALSE");
- LV_InsertItem(hWndTo, i, COL_COLWRITE, pCToColDesc->dwFlags & (DBCOLUMNFLAGS_WRITE | DBCOLUMNFLAGS_WRITEUNKNOWN) ? "TRUE" : "FALSE");
-
- //ISROWID (SubItem)
- LV_InsertItem(hWndFrom, i, COL_COLISROWID, pCFromColDesc->dwFlags & DBCOLUMNFLAGS_ISROWID ? "TRUE" : "FALSE");
- LV_InsertItem(hWndTo, i, COL_COLISROWID, pCToColDesc->dwFlags & DBCOLUMNFLAGS_ISROWID ? "TRUE" : "FALSE");
-
- //ISROWVER (SubItem)
- LV_InsertItem(hWndFrom, i, COL_COLISROWVER, pCFromColDesc->dwFlags & DBCOLUMNFLAGS_ISROWVER ? "TRUE" : "FALSE");
- LV_InsertItem(hWndTo, i, COL_COLISROWVER, pCToColDesc->dwFlags & DBCOLUMNFLAGS_ISROWVER ? "TRUE" : "FALSE");
- }
-
- return TRUE;
- }
-
-
-