How to Create & Display Dialog Boxes with the FoxPro LCKLast reviewed: April 30, 1996Article ID: Q120095 |
The information in this article applies to:
SUMMARYThis article explains how to display dialog boxes that do not reside in COMMDLG.DLL. To display this type of dialog box, you must first create the dialog box with a resource editor. A resource editor allows you to draw a dialog box, add push buttons, edit regions, list boxes, and combo boxes. Once you have done this, you need to compile the resources. Using Visual C++, you can do this seamlessly through App Studio (see the Microsoft Visual C++ "User's Guide"). Once the resources have been compiled, you need to add the .RC file to the project. The following is a resource file created with Visual C++ App Studio. This resource script will create a dialog box with two edit regions and one push button.
//Microsoft App Studio generated resource script. // #include "resource.h" #define APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////// // // Generated from the TEXTINCLUDE 2 resource. // #define APSTUDIO_HIDDEN_SYMBOLS #include "windows.h" #undef APSTUDIO_HIDDEN_SYMBOLS #include "dialogbx.h" ///////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS ///////////////////////////////////////////////////////////////////// // Dialog // EXMPDLG DIALOG DISCARDABLE 10, 18, 139, 75 STYLE WS_POPUP | WS_CAPTION CAPTION "Example Dialog Box" FONT 10, "Helv" BEGIN CTEXT "Title String Here",-1,27,6,78,9,NOT WS_GROUP EDITTEXT DLI_EDIT1,12,22,26,12 LTEXT "Input field one.",-1,60,24,67,9,NOT WS_GROUP EDITTEXT DLI_EDIT2,12,37,26,12 LTEXT "Input field two.",-1,60,39,73,10,NOT WS_GROUP DEFPUSHBUTTON "DONE",DLI_DONE,45,60,36,12 END #ifdef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////// // TEXTINCLUDE // 1 TEXTINCLUDE DISCARDABLE BEGIN "resource.h\0" END 2 TEXTINCLUDE DISCARDABLE BEGIN "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""windows.h""\r\n" "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" "#include ""dialogbx.h""\r\n" "\0" END 3 TEXTINCLUDE DISCARDABLE BEGIN "\r\n" "\0" END ///////////////////////////////////////////////////////////////////// #endif // APSTUDIO_INVOKED #ifndef APSTUDIO_INVOKED ///////////////////////////////////////////////////////////////////// // Generated from the TEXTINCLUDE 3 resource. ///////////////////////////////////////////////////////////////////// #endif // not APSTUDIO_INVOKED MORE INFORMATIONTo display the dialog box from within the FoxPro Library Construction Kit (LCK), you must first obtain the current instance of the DLL:
HINSTANCE Inst;Once this is done, you will have the current instance stored in the global variable Inst. You must also create a 32-bit pointer to a function because the dialog box must have a dialog box procedure to handle any Windows messages that are sent to the dialog box.
static FARPROC lpfnDialogProc;You can display the dialog box by making a call to the Windows API DialogBox() function. The following C code shows how to call the dialog box:
#include <windows.h> #include <pro_ext.h> #define IDM_DOIT 1 // menu item id values #define IDM_QUIT 2 #define APPNAME "dialogbx" #define DLI_EDIT1 100 #define DLI_EDIT2 101 #define DLI_DONE 102 // function prototype BOOL FAR PASCAL DialogProcedure (HWND hDlg, unsigned iMessage, WORD wParam, LONG lParam) ; int nEditOne = 0; int nEditTwo = 0; HINSTANCE Inst; static FARPROC lpfnDialogProc; void dialog(ParamBlk FAR *parm) { SetCursor(TRUE); // This must be done to make the cursor active lpfnDialogProc = MakeProcInstance (DialogProcedure, Inst) ; /*The address of the Dialog procedure is stored in lpfnDialogProc*/ DialogBox (Inst, "exmpdlg", 0, lpfnDialogProc) ; FreeProcInstance (lpfnDialogProc) ; } /*The dialog procedure is used to process any message sent to the dialog*/ BOOL FAR PASCAL DialogProcedure (HWND hDlg, unsigned iMessage, WORD wParam, LONG lParam) { BOOL bBool ; switch (iMessage) { case WM_INITDIALOG: SetDlgItemInt (hDlg, DLI_EDIT1, nEditOne, TRUE) ; SetDlgItemInt (hDlg, DLI_EDIT2, nEditTwo, TRUE) ; break ; case WM_COMMAND: switch (wParam) { case DLI_EDIT1: nEditOne = GetDlgItemInt (hDlg, DLI_EDIT1, &bBool, TRUE); return (TRUE) ; case DLI_EDIT2: nEditTwo = GetDlgItemInt (hDlg, DLI_EDIT2, &bBool, TRUE); return (TRUE) ; case DLI_DONE: EndDialog (hDlg, NULL) ; return (TRUE) ; } break ; default: return (FALSE) ; } return (FALSE) ; } FoxInfo myFoxInfo[]={ {"DIALOG",(FPFI)dialog,0,""}, }; FoxTable _FoxTable= { (FoxTable FAR*)0, sizeof(myFoxInfo) / sizeof(FoxInfo), myFoxInfo }; REFERENCESMicrosoft FoxPro Library Construction Kit "Developer's Guide," version 2.5 Microsoft Windows Software Development Kit "Programmer's Reference Volume 2: Functions"
|
Additional reference words: FoxWin 2.50 2.50a 2.50b 2.60 2.60a lck api
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |