QURYDEMO.H

/* 
Header File for QURYDEMO application
Created by Microsoft Corporation.
*/
#ifdef WIN32
#define CONSTSTR(name, str) const char name[]=str
#else
#define CONSTSTR(name, str) const char FAR * name=str
#endif


#ifdef RC_INVOKED
#define ID(id) id
#else
#define ID(id) MAKEINTRESOURCE(id)
#endif

/* Resource Identifiers */

#define BMP_NEWQUERY ID(10) // new window button bitmap
#define BMP_RUNQUERY ID(20) // exec query button bitmap
#define APPICON ID(30) // application icon
#define QUERYWINDOWICON ID(40) // MDI Child window icon
#define QURYDEMOMENU ID(50) // Application menu
#define CONNECTDIALOG ID(60) // connect modal dialog box
#define DISCONNECTDIALOG ID(70) // disconnect modal dialog box
#define ABOUTDIALOG ID(80) // about modal dialog box
#define MDICHILDDIALOG ID(90) // MDI Child modeless dialog box
#define APPACCELERATOR ID(100) // Accelerator table for the app

/* Menu Identifiers */

#define IDM_POPUPAPPSYS 10 // Placeholder, used by status bar
#define IDM_POPUPMDISYS 20 // Placeholder, used by status bar
#define IDM_POPUPLOGIN 100 // Placeholder, used by status bar
#define IDM_CONNECT 110
#define IDM_DRIVERCONNECT 120
#define IDM_DISCONNECT 130
#define IDM_EXIT 140
#define IDM_POPUPQUERY 150 // Placeholder, used by status bar
#define IDM_QUERY 160
#define IDM_NEW 170
#define IDM_POPUPWINDOW 180 // Placeholder, used by status bar
#define IDM_TILE 190
#define IDM_CASCADE 200
#define IDM_ICONS 210
#define IDM_CLOSEALL 220
#define IDM_POPUPHELP 230 // Placeholder, used by status bar
#define IDM_APPHELP 240
#define IDM_ABOUT 250

#define IDM_MDICHILD 260

/* child window ids */

#define IDW_TOOLBAR 10
#define IDW_STATUSBAR 20
#define IDW_MDICLIENT 30

#define IDW_CRSRLIST 10 // toolbar comboboxes
#define IDW_STMTLIST 20

#define IDCOMBO_DATASOURCE 10 // connect dialog box controls
#define IDTEXT_USERNAME 20
#define IDTEXT_PASSWORD 30

#define IDLIST_HDBC 10 // disconnect dialog box controls
#define IDLIST_STMT 20
#define IDCLOSE_ACTVTY 30
#define IDDISCONNECT 40
#define IDICON_WARN 50

#define IDTEXT_PRMPT 10 // MDI child's modeless dialog controls
#define IDTEXT_SQL 20
#define IDLIST_RSLT 30

/* MDI Child Window Offsets */

#define CBWNDEXTRA 4 // storage in MDI Child Window
#define GWLAPP_HDLG 0 // child dialog handle

/* Help File */

#define SAMPLESHELPFILE "..\\doc\\odbcsmpl.hlp"
#define HLP_QURYDEMO 30

/* Other Constants */

#define MAXCHILDWNDS 10 //maximum child windows allowed
#define MAXBUFLEN 256 //display buffer size
#define MAX_COL 15 //maximum column in result set
#define MAX_ROW 100 //maximum number of rows
#define MAXDATALEN 25 //maximum data length per column
#define MAXDISPLAYSIZE MAX_COL*(MAXDATALEN+1)
#define MINWIDTH 415 //minimum width of app window
#define MINHEIGHT 350 //minimum height of app window
#define LISTTABSTOP 100 //tabstop in the display listbox
#define LISTHORZSCROLL (LISTTABSTOP*2) //horizontal scroll for the listbox
#define LISTHORZEXT 0 //horizontal extent inthe list box
#define WINDOWMENUPLACE 2 //Window menu place for adding MDI child windows
#define IDT_STATUSTIMER 1 //timer id
#define TIMERDELAY 60000 //timer duration
#define BTTNX 345 //first toolbar button location
#define BTTNY 2 //button y position
#define BTTNWIDTH 25 //button width
#define BTTNHEIGHT 23 //button height
#define BTTNMARGIN 5 //distance between toolbar buttons
#define TOOLBARMARGINY 5 //fixed margin w/o combobox height
#define STATUSBARMARGINY 8 //fixed margin w/o textbox height

/* String Constants */

#define POPUPLOGIN "&Login"
#define MENUITEMCONNECT "&Connect... \aCtrl+C"
#define MENUITEMDRIVERCONNECT "D&river Connect... \aCtrl+R"
#define MENUITEMDISCONNECT "&Disconnect... \aCtrl+D"
#define MENUITEMEXIT "E&xit"
#define POPUPQUERY "&Query"
#define MENUITEMQUERY "&Execute SQL \aCtrl+E"
#define MENUITEMNEW "&New Query \aCtrl+N"
#define POPUPWINDOW "&Window"
#define MENUITEMTILE "&Tile"
#define MENUITEMCASCADE "&Cascade"
#define MENUITEMICONS "Arrange &Icons"
#define MENUITEMCLOSEALL "Close &All"
#define POPUPHELP "&Help"
#define MENUITEMAPPHELP "&Help on Qurydemo"
#define MENUITEMABOUT "&About Qurydemo..."

#ifdef WIN32
#define ODBCFRAMECLASS "QDEMO32MAIN"
#else
#define ODBCFRAMECLASS "QDEMOMAIN"
#endif

#define ODBCTOOLCLASS "QDEMOTool"
#define ODBCSTATUSCLASS "QDEMOStatus"
#define ODBCMDICLASS "QDEMOMDI"
#define COMBOBOXCLASS "COMBOBOX"
#define MDICLIENTCLASS "MDICLIENT"
#define UNTITLED "Untitled"
#define APPTITLE "ODBC Sample Program"
#define EXECERROR "Execution Error"
#define INITERROR "Failed to initialize ODBC interface"
#define CLASSERROR "Failed to register application class"
#define CREATEMAINERR "Failed to create application main window"
#define CREATECHILDERR "Failed to create a new window"
#define ALPHABETS "abcdefghijklmnopqrstuvwxyz"
#define TIMETEXT "MM:MM MM"
#define DATETEXT "MMM-MM"
#define TIMEFORMAT " %I:%M %p"
#define DATEFORMAT " %b-%d"
#define NODSNERR "Please provide a Data Source"
#define MOREINFO "Incomplete Information"
#define STATUSPOPUPAPPSYS " Control menu for the application "
#define STATUSPOPUPMDISYS " Control menu for the window "
#define STATUSRESTORE " Restore window to normal "
#define STATUSMOVE " Move window "
#define STATUSSIZE " Size window "
#define STATUSMINIMIZE " Minimize window "
#define STATUSMAXIMIZE " Maximize window "
#define STATUSCLOSE " Close window "
#define STATUSNEXTWINDOW " Switch to next window "
#define STATUSPREVWINDOW " Switch to previous window "
#define STATUSTASKLIST " Bring up task list "
#define STATUSPOPUPLOGIN " Login and logout commands "
#define STATUSCONNECT " Connect with default parameters... "
#define STATUSDRIVERCONNECT " Connect with driver dialogs... "
#define STATUSDISCONNECT " Close open connections... "
#define STATUSEXIT " Exit application "
#define STATUSPOPUPQUERY " Query commands "
#define STATUSQUERY " Execute SQL statement... "
#define STATUSNEW " New window on current connection... "
#define STATUSPOPUPWINDOW " Window management commands "
#define STATUSTILE " Tile all normal child windows "
#define STATUSCASCADE " Cascade all normal child windows "
#define STATUSICONS " Arrange iconic child windows "
#define STATUSCLOSEALL " Close all child windows "
#define STATUSMDICHILD " Activate the window marked as %d"
#define STATUSPOPUPHELP " Help commands "
#define STATUSAPPHELP " Display help on application "
#define STATUSABOUT " About application "
#define STATUSDEFAULT " Ready "

#define DEFDBNAME "?"
#define DSN_HDBC_FORMAT "%s!%lX"
#define DSN_HDBC_HSTMT_FORMAT "DSN=%s!HDBC=%lX!HSTMT=%lX"
#define SCANDSNHDBC_FORMAT "%[^!]!%lX"
#define SCANHDBC_FORMAT "%*[^!]!%lX"
#define SCANHDBC_TITLEFORMAT "DSN=%*[^!]!HDBC=%lX"
#define SCANHDBCHSTMT_FORMAT "DSN=%*[^!]!HDBC=%lX!HSTMT=%lX"
#define SCANHSTMT_TITLEFORMAT "DSN=%*[^!]!HDBC=%*lX!HSTMT=%lX"
#define SCAN_HDBC_FORMAT"%*c%lX"
#define SCAN_HDBC_TITLEFORMAT"DSN=%*cHDBC=%lX"


#define CUR_MARK "<-"
#define CURQUERY_STRING "Query!%lX<-"
#define QUERY_STRING "Query!%lX"
#define MAKECONNECT "Please connect to a data source using Login menu."
#define OPENWINDOW "Please open a window from Query menu."
#define NOHDBCERROR "No Connection Available"
#define NOHSTMTERROR "No Query Window Available"
#define MAXCHILDEXCEEDED "Please close a child window and try again."
#define MAXCHLDERR "Error - Too many Child Windows"
#define COLTRUNC_WARNG "Number of columns in display truncated to %u"
#define ROWTRUNC_WARNG "Number of rows in display truncated to %u"
#define TRUNCERR "Data Truncation"
#define CLOSEALLHDBC "All open connections have been closed."
#define LOGOUTINFO "Log Out Information"
#define SQLERR_FORMAT "SQL Error State:%s, Native Error Code: %lX, ODBC Error: %s"
#define SQLERRMSGTITLE "SQL_ERROR results"
#define SQLERRCNTDTITLE "SQL_ERROR results continued"
#define SQLWRNMSGTITLE "SQL_SUCCESS_WITH_INFO results"
#define SQLWRNCNTDTITLE "SQL_SUCCESS_WITH_INFO results continued"
#define NULLDATASTRING "SQL_NULL_DATA"



/* Globals */

HWND hWndFrame; // Main Frame Window handle
HWND hWndToolbar; // Toolbar window handle
HWND hWndCrsrList; // hdbc(s) combobox on the tool bar
HWND hWndStmtList; // hstmt(s) combobox on the tool bar
HWND hWndStatusbar; // status bar handle
HWND hWndMDIClient; // MDI Client window handle
HWND hWndActiveChild;// Current active MDI Child window
HINSTANCE hAppInstance; // Application instance
WORD wStatusText; // Status text state
int iTimex; // Time box (on the status bar) width
int iDatex; // Date box (on the status bar) width
RECT rectStatusText; // Text box on the status bar




#ifdef __SQL // internal to query.c

int nChildCount; // Number of child windows currently open
SQLHENV henv; // Environment Handle
char szDispBuffer[MAXDISPLAYSIZE+1]; // Display Buffer
UCHAR rgbData[MAX_COL][MAXDATALEN]; // Results Data Array
SDWORD dwDataLen[MAX_COL]; // Results Data Length Array

#endif

/* Macros and Function Prototypes */

#ifdef WIN32
#define ACTIVATEWINDOW(h) SetForegroundWindow(h)
#else
#define ACTIVATEWINDOW(h) SetFocus(h)
#endif

#define DRAWBTTNRECT(h,x,y,cx,cy) MoveToEx(h,x+1,y,NULL);\
LineTo(h,x+cx,y);\
MoveToEx(h,x+cx,y+1,NULL);\
LineTo(h,x+cx,y+cy);\
MoveToEx(h,x+cx-1,y+cy,NULL);\
LineTo(h,x,y+cy);\
MoveToEx(h,x,y+cy-1,NULL);\
LineTo(h,x,y);

#define DRAWBTTNLIFT1(h,x,y,cx,cy) MoveToEx(h,x+1,y+cy-1,NULL);\
LineTo(h,x+1,y+1);\
LineTo(h,x+cx-1,y+1);

#define DRAWBTTNLIFT2(h,x,y,cx,cy) MoveToEx(h,x+1,y+cy-1,NULL);\
LineTo(h,x+cx-1,y+cy-1);\
LineTo(h,x+cx-1,y);\
MoveToEx(h,x+2,y+cy-2,NULL);\
LineTo(h,x+cx-2,y+cy-2);\
LineTo(h,x+cx-2,y+1);

int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow);
long CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
long CALLBACK ToolbarProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
long CALLBACK StatusbarProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
long CALLBACK MDIChildProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK ConnectDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK DisconnectDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK AboutDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK MDIChildDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
VOID FAR PASCAL DrawBitmap(HDC hDC, int iLeft, int iTop, HBITMAP hBitmap);

BOOL FAR PASCAL InitSQLEnvironment();
void FAR PASCAL DisplayDatabases(HWND hWnd);
BOOL FAR PASCAL ConnectDatabase(HWND hWnd);
BOOL FAR PASCAL DriverConnectDatabase(HWND hWnd);
void FAR PASCAL DisplayConnections(HWND hWndhdbc);
void FAR PASCAL DisplayQueries(HWND hWndhstmt, HWND hWndhdbc, int nCrsrIndex);
void FAR PASCAL NewQueryWindow();
void FAR PASCAL ChangeCurrentQuery(HWND hWndStmtList);
void FAR PASCAL ChangeCurrentCursor(HWND hWndCrsrList);
void FAR PASCAL DisplayNewCrsrAndStmt();
void FAR PASCAL FreeConnect(HWND hWndhdbc);
void FAR PASCAL FreeQuery(HWND hWndhstmt, HWND hWndhdbc, int nIndex);
void FAR PASCAL CloseQueryWindow(HWND hWnd);
BOOL FAR PASCAL FreeSQLEnvironment();
void FAR PASCAL ExecuteQuery();
BOOL FAR PASCAL CloseDatabases();

#ifdef __SQL // internal to query.c

void FAR PASCAL DisplayError(SQLRETURN nResult, HWND hWnd, SWORD fHandleType, SQLHANDLE handle);

#endif
/******************************* End of File ********************************/