?? dbfunc.c
字號(hào):
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (C) 1993-1997 Microsoft Corporation. All Rights Reserved.
//
// MODULE: dbfunc.c
//
// PURPOSE: Contains window procedures database related functions.
//
// PLATFORMS: WIN32_WCE
//
// FUNCTIONS:
// MainWndProc() - Message handler for the main application window
// Main_OnCommand() - Processes WM_COMMAND messages
// Main_OnDestroy() - Handles the WM_DESTROY message
// AboutDlgProc() - Message handler for the application's about
// dialog.
//
// COMMENTS:
//
//
#include <windows.h>
#include <windowsx.h>
#if !defined(_WIN_CE_EMULATION)
#include <memory.h>
#endif
#include <commctrl.h>
#include <tchar.h>
#include "platdetect.h"
#include "resource.h"
#include "globals.h"
//
// FUNCTION: NewDBDlgProc( HWND hWnd,UINT message, WPARAM wParam, LPARAM lParam )
//
// PURPOSE: Callback function for creating a new Database
//
// PARAMETERS:
//
// RETURN VALUE:
// (LRESULT) Dependant on the specific notification. See Below.
//
// COMMENTS:
//
BOOL CALLBACK NewDBDlgProc( HWND hWnd,UINT message, WPARAM wParam, LPARAM lParam )
{
WORD wNotifyCode, wID;
HWND hwndCtl;
wNotifyCode = HIWORD(wParam); // notification code
wID = LOWORD(wParam); // item, control, or accelerator identifier
hwndCtl = (HWND) lParam; // handle of control
switch(message)
{
case WM_INITDIALOG:
SetFocus(GetDlgItem(hWnd,IDC_DBNAME));
return FALSE;
break;
case WM_COMMAND:
{
switch(wID)
{
case IDCANCEL:
EndDialog(hWnd, IDCANCEL);
break;
case IDOK:
{
TCHAR szNewDBName[CEDB_MAXDBASENAMELEN];
DWORD dwNewDBType = 929292; // hardcode for now
if ( GetDlgItemText(hWnd,IDC_DBNAME, szNewDBName, (CEDB_MAXDBASENAMELEN-10) ))
{
CEOID CeOid;
_tcscat(szNewDBName,TEXT("_TEST"));
if ( !(CeOid =CeCreateDatabase(szNewDBName, dwNewDBType, 0, NULL)) )
{
TCHAR szBuf[50];
wsprintf(szBuf, TEXT("ERROR: CeCreateDatabase failed with error: %ld\r\n"), GetLastError());
OutputDebugString(szBuf);
MessageBox(hWnd, szBuf, TEXT("Error"), MB_OK);
}
else
{
HANDLE hNewDB;
FILETIME FileTime;
SYSTEMTIME SystemTime;
LPVOID lpStr;
LPVOID lpBlob;
HWND hwndTV;
HWND hParent;
WORD i;
if( (hParent = GetParent(hWnd) ) )
hwndTV = GetDlgItem(hParent, IDC_TREEVIEW);
else
hwndTV = GetDlgItem(hWnd, IDC_TREEVIEW);
// Try to open DB
hNewDB = CeOpenDatabase(&CeOid, NULL, 0, 0, NULL);
if ( hNewDB == INVALID_HANDLE_VALUE)
{
TCHAR szError[50];
wsprintf(szError, TEXT("ERROR: CeOpenDatabase failed after creating DB (%ld)"), GetLastError());
OutputDebugString(szError);
MessageBox(hwndTV, szError, TEXT("Error"), MB_OK);
}
else
{
CEPROPVAL NewRecProps[7];
NewRecProps[0].propid = PROP_SHORT;
NewRecProps[0].wLenData = 0;
NewRecProps[0].wFlags = 0;
NewRecProps[0].val.iVal = -1;
NewRecProps[1].propid = PROP_USHORT;
NewRecProps[1].wLenData = 0;
NewRecProps[1].wFlags = 0;
NewRecProps[1].val.uiVal = 1;
NewRecProps[2].propid = PROP_LONG;
NewRecProps[2].wLenData = 0;
NewRecProps[2].wFlags = 0;
NewRecProps[2].val.lVal = 0xffffffff;
NewRecProps[3].propid = PROP_ULONG;
NewRecProps[3].wLenData = 0;
NewRecProps[3].wFlags = 0;
NewRecProps[3].val.ulVal = 0x7FFFFFFF;
SystemTime.wYear = 1999;
SystemTime.wMonth = 12;
SystemTime.wDayOfWeek = 6;
SystemTime.wDay = 25;
SystemTime.wHour = 12;
SystemTime.wMinute = 12;
SystemTime.wSecond = 12;
SystemTime.wMilliseconds = 12;
SystemTimeToFileTime(&SystemTime,&FileTime);
NewRecProps[4].propid = PROP_FILETIME;
NewRecProps[4].wLenData = 0;
NewRecProps[4].wFlags = 0;
NewRecProps[4].val.filetime = FileTime;
lpStr = LocalAlloc(LMEM_FIXED, 50 * sizeof(TCHAR));
if ( lpStr )
_tcscpy(lpStr, TEXT("This is a string property"));
NewRecProps[5].propid = PROP_LPWSTR;
NewRecProps[5].wLenData = 0;
NewRecProps[5].wFlags = 0;
NewRecProps[5].val.lpwstr = lpStr;
lpBlob = LocalAlloc(LMEM_FIXED, 50 * sizeof(TCHAR));
if ( lpBlob )
_tcscpy(lpBlob, TEXT("This is a blob property"));
NewRecProps[6].propid = PROP_CEBLOB;
NewRecProps[6].wLenData = 0;
NewRecProps[6].wFlags = 0;
NewRecProps[6].val.blob.dwCount = 50 * sizeof(TCHAR);
NewRecProps[6].val.blob.lpb = lpBlob;
// write 7 records out with various fields...
for ( i = 1 ; i < 8 ; i++ )
{
if( !CeWriteRecordProps(hNewDB, 0, i, NewRecProps) )
{
TCHAR szError[50];
wsprintf(szError, TEXT("ERROR: CeWriteRecordProps failed (%ld)"), GetLastError());
OutputDebugString(szError);
MessageBox(hwndTV, szError, TEXT("Error"), MB_OK);
}
}
if( lpBlob )
LocalFree(lpBlob);
if( lpStr )
LocalFree(lpStr);
CloseHandle(hNewDB);
if (!AddItemToTree(hwndTV, szNewDBName, NULL, TRUE, CeOid))
OutputDebugString(TEXT("ERROR: Failed to add Database"));
}
}
}
else
OutputDebugString(TEXT("ERROR: CeCreateDatabase Error. Error retreiving data.\r\n"));
EndDialog(hWnd, IDOK);
break;
}
default:
return(FALSE);
}
break;
}
default:
return(FALSE);
}
return (TRUE);
}
//
// FUNCTION: ShowDBInformation( TCHAR * pDBName)
//
// PURPOSE: Display database information in edit control
//
// PARAMETERS:
//
// RETURN VALUE:
//
// COMMENTS:
//
void WINAPI ShowDBInformation( TCHAR * pDBName)
{
TCHAR szBuf[2000];
TCHAR szSort[100] = {0};
CEOID CeOID = 0;
CEOIDINFO CeObject;
HANDLE hOpenDB;
int i;
// no notification installed
hOpenDB = CeOpenDatabase(&CeOID, pDBName, 0, 0, NULL);
if ( hOpenDB == INVALID_HANDLE_VALUE)
{
wsprintf(szBuf, TEXT("ERROR: CeOpenDatabase failed to open database.(Error: %ld)\r\n"), GetLastError());
OutputDebugString(szBuf);
MessageBox(NULL, szBuf, TEXT("ERROR"), MB_OK);
}
else
{
if ( !CeOidGetInfo(CeOID, &CeObject) )
{
wsprintf(szBuf, TEXT("ERROR: CeOidGetInfo failed with error (%ld)\r\n"), GetLastError());
OutputDebugString(szBuf);
MessageBox(NULL, szBuf, TEXT("ERROR"), MB_OK);
}
else
{
wsprintf(szBuf, TEXT("DB Flags: %#lx\r\nDB Name: %ls\r\nDB Type: %ld\r\n#Records: %d\r\n#Sort Orders: %d\r\nSorted On:"),
CeObject.infDatabase.dwFlags,
CeObject.infDatabase.szDbaseName,
CeObject.infDatabase.dwDbaseType,
CeObject.infDatabase.wNumRecords,
CeObject.infDatabase.wNumSortOrder);
for ( i = 0 ; i < CeObject.infDatabase.wNumSortOrder ; i++)
{
wsprintf(szSort, TEXT("\r\nRow: %ld\r\n"), CeObject.infDatabase.rgSortSpecs[i].propid);
if ( CeObject.infDatabase.rgSortSpecs[i].dwFlags & CEDB_SORT_DESCENDING )
_tcscat(szSort, TEXT(" DESCENDING \r\n"));
if ( CeObject.infDatabase.rgSortSpecs[i].dwFlags & CEDB_SORT_CASEINSENSITIVE )
_tcscat(szSort, TEXT(" CASEINSENSITIVE \r\n"));
if ( CeObject.infDatabase.rgSortSpecs[i].dwFlags & CEDB_SORT_UNKNOWNFIRST )
_tcscat(szSort, TEXT(" UNKNOWNFIRST \r\n"));
if ( CeObject.infDatabase.rgSortSpecs[i].dwFlags & CEDB_SORT_GENERICORDER )
_tcscat(szSort, TEXT(" GENERICORDER \r\n"));
_tcscat(szBuf, szSort);
}
SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)szBuf);
}
CloseHandle(hOpenDB);
}
}
//
// FUNCTION: ShowPropDesc(CePROPID PropId, TCHAR * pDBName, LONG dwCurrectRecord )
//
// PURPOSE: Display database property information in edit control
//
// PARAMETERS:
//
// RETURN VALUE:
//
// COMMENTS:
//
void WINAPI ShowPropDesc(CEPROPID PropId, DWORD dwOpenHandle, LONG dwCurrentRecord)
{
TCHAR szBuf[200];
WORD cPropID = 1;
LPBYTE bData = NULL;
DWORD cbData = 0;
SYSTEMTIME SystemTime;
CEOID CeOID = 0;
DWORD dwIndex;
if ( (HANDLE) dwOpenHandle == INVALID_HANDLE_VALUE)
{
wsprintf(szBuf, TEXT("ERROR: CeOpenDatabase failed to open database.(Error: %ld)\r\n"), GetLastError());
OutputDebugString(szBuf);
MessageBox(NULL, szBuf, TEXT("ERROR"), MB_OK);
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -