#include "stdafx.h"
#include "Resource.h"
#include "GetTableDlg.h"
extern HINSTANCE hInst;
CGetTableDlg* CGetTableDlg::m_pDlg = NULL;
CGetTableDlg::CGetTableDlg()
{
CoInitialize(NULL);
}
CGetTableDlg::~CGetTableDlg()
{
CoUninitialize();
}
int CGetTableDlg::DoModal(HWND hDlg)
{
m_pDlg = this;
int nReturn = DialogBox(hInst, MAKEINTRESOURCE(IDD_MAIN), hDlg, reinterpret_cast<DLGPROC>(DialogProc));
return nReturn;
}
BOOL CALLBACK CGetTableDlg::DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL bReturn(FALSE);
switch(uMsg)
{
case WM_INITDIALOG:
m_pDlg->OnInitDialog(hDlg);
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
EndDialog(hDlg, TRUE);
break;
case IDC_BUTTON_OPENFILE:
m_pDlg->OnOpenFile(hDlg);
break;
}
}
break;
}
return bReturn;
}
BOOL CGetTableDlg::OnInitDialog(HWND hDlg)
{
CenterWindow(hDlg, GetParent(hDlg));
m_hListBox = GetDlgItem(hDlg, IDC_LIST_TABLE);
m_hListView = GetDlgItem(hDlg, IDC_LIST_TABLE2);
DWORD dwStyle = ListView_GetExtendedListViewStyle(m_hListView);
ListView_SetExtendedListViewStyle(m_hListView, dwStyle | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
LVCOLUMN lv[1];
lv[0].mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH;// | LVCF_SUBITEM;
lv[0].fmt = LVCFMT_CENTER;
lv[0].cx = 250;
lv[0].pszText = _T("数据库表名");
lv[0].iSubItem = 0;
ListView_InsertColumn(m_hListView, 0, &lv[0]);
return TRUE;
}
void CGetTableDlg::OnOpenFile(HWND hDlg)
{
SendMessage(m_hListBox, LB_RESETCONTENT, NULL, NULL);
ListView_DeleteAllItems(m_hListView);
TCHAR szFileName[MAX_PATH] = {0};
int nFilterIndex = 0;
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hDlg;
ofn.lpstrFilter = _T("Access数据库文件 (*.mdb)\0*.mdb\0\0");
ofn.nFilterIndex = nFilterIndex;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = sizeof(szFileName);
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = _T("打开FreeBook备注文件");
ofn.Flags = OFN_PATHMUSTEXIST | OFN_NOCHANGEDIR | OFN_FILEMUSTEXIST | OFN_ENABLEHOOK | OFN_EXPLORER | OFN_HIDEREADONLY;
ofn.lpfnHook = NULL;
if(GetOpenFileName(&ofn) != NULL)
{
_ConnectionPtr pCon;
_RecordsetPtr pRs;
try
{
HRESULT hr = pCon.CreateInstance(__uuidof(Connection));
hr = pRs.CreateInstance(__uuidof(Recordset));
if(SUCCEEDED(hr))
{
TCHAR szConn[MAX_PATH] = _T("");
wsprintf(szConn, _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"), ofn.lpstrFile);
hr = pCon->Open((_bstr_t)szConn, "", "", adModeUnknown);
pRs = pCon->OpenSchema(adSchemaTables);
while(!pRs->adoEOF)
{
_bstr_t table_name = pRs->Fields->GetItem("TABLE_NAME")->Value;
_bstr_t table_type = pRs->Fields->GetItem("TABLE_TYPE")->Value;
if(lstrcmp((LPCTSTR)table_type, _T("TABLE")) == 0)
{
SendMessage(m_hListBox, LB_ADDSTRING, 0, (WPARAM)(LPCTSTR)table_name);
LVITEM item;
item.mask = LVIF_TEXT;
item.iItem = ListView_GetItemCount(m_hListView);;
item.iSubItem = 0;
item.pszText = (LPTSTR)table_name;
ListView_InsertItem(m_hListView, &item);
}
pRs->MoveNext();
}
pRs->Close();
pCon->Close();
}
}
catch (_com_error &e)
{
PrintComError(hDlg, e);
// EndDialog(hDlg, FALSE);
}
}
}
BOOL CGetTableDlg::CenterWindow(HWND hChild, HWND hParent)
{
RECT rcChild, rcParent;
int cxChild, cyChild, cxParent, cyParent;
int cxScreen, cyScreen, xNew, yNew;
HDC hdc;
GetWindowRect(hChild, &rcChild);
cxChild = rcChild.right - rcChild.left;
cyChild = rcChild.bottom - rcChild.top;
if(hParent != NULL)
{
GetWindowRect(hParent, &rcParent);
cxParent = rcParent.right - rcParent.left;
cyParent = rcParent.bottom - rcParent.top;
}
else
{
cxParent = GetSystemMetrics(SM_CXSCREEN);
cyParent = GetSystemMetrics(SM_CYSCREEN);
rcParent.left = rcParent.top = 0;
rcParent.right = cxParent;
rcParent.bottom = cyParent;
}
hdc = GetDC(hChild);
cxScreen = GetDeviceCaps(hdc, HORZRES);
cyScreen = GetDeviceCaps(hdc, VERTRES);
ReleaseDC(hChild, hdc);
xNew = rcParent.left + ((cxParent - cxChild) / 2);
if (xNew < 0)
xNew = 0;
else if ((xNew + cxChild) > cxScreen)
xNew = cxScreen - cxChild;
yNew = rcParent.top + ((cyParent - cyChild) / 2);
if (yNew < 0)
yNew = 0;
else if ((yNew + cyChild) > cyScreen)
yNew = cyScreen - cyChild;
return SetWindowPos(hChild, NULL, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}
void CGetTableDlg::PrintComError(HWND hDlg, _com_error& e)
{
TCHAR szError[1024] = {0};
_snwprintf(szError, 1024, _T("系统在运行当中发生了错误:\n\n错误代码:%08lx\n错误信息:%s\n错误源:%s\n错误描述:%s\n\n按确定后退出系统!"), e.Error(), e.ErrorMessage(), (LPTSTR)e.Source(), (LPTSTR)e.Description());
MessageBox(hDlg, szError, _T("错误信息"), MB_OK | MB_ICONSTOP | MB_SYSTEMMODAL);
}
- 1
- 2
前往页