Microsoft KB Archive/120095

{| = How to Create & Display Dialog Boxes with the FoxPro LCK =
 * width="100%"|

ID: Q120095

2.5x 2.60 2.60a WINDOWS

The information in this article applies to:


 * Microsoft FoxPro Library Construction Kit, versions 2.5, 2.6
 * Microsoft FoxPro for Windows, versions 2.5x, 2.6, 2.6a

SUMMARY
This 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 INFORMATION
To 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   #include 

#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 };