How to Create & Display Dialog Boxes with the FoxPro LCK
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 <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:
KBSubcategory: FxtoolLck
Keywords : kbcode FxtoolLck
Version : 2.5x 2.60 2.60a
Platform : WINDOWS