How to Create & Display Dialog Boxes with the FoxPro LCK

Last reviewed: April 30, 1996
Article ID: Q120095
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 <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
   };

REFERENCES

Microsoft 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
KBCategory: kbprg kbcode
KBSubcategory: FxtoolLck



THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: April 30, 1996
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.