I am trying to create Child Dialogs on a DDT Dialog using DDT and I am having a problem.
The child Dialogs will be used to hold other controls and it uses the %WS_CHILD and %DS_CONTROL styles.
This is necessary for creating Wizards and implimenting Tab controls.
The problem I am having is that as soon I put a control on the child Dialog, I get a GPF.
Use the code below and then add the controls back one by one and you will see what I mean. (I removed all the common controls from the example).
[This message has been edited by Chris Boss (edited February 28, 2000).]
The child Dialogs will be used to hold other controls and it uses the %WS_CHILD and %DS_CONTROL styles.
This is necessary for creating Wizards and implimenting Tab controls.
The problem I am having is that as soon I put a control on the child Dialog, I get a GPF.
Use the code below and then add the controls back one by one and you will see what I mean. (I removed all the common controls from the example).
Code:
$COMPILE EXE $DIM ALL ' This is helpful to prevent errors in coding $INCLUDE "win32api.inc" ' The Windows API include file ! ' ************************************************************************************* ' ************************************************************************************* ' Application Constants and Declares ' ************************************************************************************* ' ---------------------------------------------------------- %Form1_File = 500 ' ---------------------------------------------------------- %Form1_New_File = 505 %Form1_Open_File = 510 %Form1_Save_File = 515 %Form1_Save_File_As = 520 %Form1_Separator_525 = 525 %Form1_Exit = 530 ' ---------------------------------------------------------- %Form1_Edit = 600 ' ---------------------------------------------------------- %Form1_Cut = 605 %Form1_Copy = 610 %Form1_Paste = 615 ' ---------------------------------------------------------- %Form1_Help = 700 ' ---------------------------------------------------------- %Form1_Display_Help_Contents = 705 %FORM1_BUTTON1 = 100 %FORM1_BUTTON2 = 105 %FORM1_BUTTON3 = 110 %FORM1_IBUTTON1 = 115 %FORM1_CHECK1 = 120 %FORM1_RADIO1 = 125 %FORM1_TEXT1 = 130 %FORM1_LISTBOX1 = 135 %FORM1_COMBOBOX1 = 140 %FORM1_VSCROLL1 = 145 %FORM1_HSCROLL1 = 150 %FORM1_LABEL1 = 155 %FORM1_PROGRESS1 = 160 %FORM1_UPDOWN1 = 165 %FORM1_FRAME1 = 170 %FORM1_TAB1 = 175 ' -------------------------------------------------- DECLARE SUB ShowDialog_Form1(BYVAL hParent&) DECLARE CALLBACK FUNCTION Form1_DLGPROC DECLARE SUB ShowDialog_Form2(BYVAL hParent&) DECLARE CALLBACK FUNCTION Form2_DLGPROC ' -------------------------------------------------- ' ------------------------------------------------ DECLARE SUB Form1_New_File_Select() DECLARE SUB Form1_Open_File_Select() DECLARE SUB Form1_Save_File_Select() DECLARE SUB Form1_Save_File_As_Select() DECLARE SUB Form1_Exit_Select() DECLARE SUB Form1_Cut_Select() DECLARE SUB Form1_Copy_Select() DECLARE SUB Form1_Paste_Select() DECLARE SUB Form1_Display_Help_Contents_Select() DECLARE CALLBACK FUNCTION CBF_FORM1_BUTTON1() DECLARE CALLBACK FUNCTION CBF_FORM1_BUTTON2() DECLARE CALLBACK FUNCTION CBF_FORM1_BUTTON3() DECLARE CALLBACK FUNCTION CBF_FORM1_IBUTTON1() DECLARE CALLBACK FUNCTION CBF_FORM1_CHECK1() DECLARE CALLBACK FUNCTION CBF_FORM1_RADIO1() DECLARE CALLBACK FUNCTION CBF_FORM1_TEXT1() DECLARE CALLBACK FUNCTION CBF_FORM1_LISTBOX1() DECLARE CALLBACK FUNCTION CBF_FORM1_COMBOBOX1() DECLARE SUB FORM1_VSCROLL1_Change(BYVAL CVal&) DECLARE SUB FORM1_HSCROLL1_Change(BYVAL CVal&) DECLARE SUB FORM1_UPDOWN1_Change(BYVAL CVal&) DECLARE SUB FORM1_TAB1_Change(BYVAL CVal&) ' ************************************************************************************* ' Application Global Variables and Types ' ************************************************************************************* GLOBAL hForm1& ' Dialog handle GLOBAL hForm2& ' Global Handles for menus GLOBAL hForm1_Menu0& GLOBAL hForm1_Menu1& GLOBAL hForm1_Menu2& GLOBAL hForm1_Menu3& ' ************************************************************************************* ' Application Entrance ' ************************************************************************************* FUNCTION PBMAIN LOCAL Count& LOCAL Style&, ExStyle& LOCAL N&, CT& ' Variables used for Reading Data in Arrays for Listbox and Combobox Style& = %WS_POPUP OR %DS_MODALFRAME OR %WS_CAPTION OR %WS_MINIMIZEBOX OR %WS_SYSMENU OR %WS_MAXIMIZEBOX OR %DS_CENTER ExStyle& = %WS_EX_CONTROLPARENT DIALOG NEW 0, "Your Dialog", 0, 0, 283, 138, Style&, ExStyle& TO hForm1& ' --------------------------- MENU NEW BAR TO hForm1_Menu0& ' --------------------------- MENU NEW POPUP TO hForm1_Menu1& MENU ADD POPUP, hForm1_Menu0& ,"&File", hForm1_Menu1&, %MF_ENABLED ' - - - - - - - - - - - - - - MENU ADD STRING, hForm1_Menu1&, "&New File", %Form1_New_File, %MF_ENABLED MENU ADD STRING, hForm1_Menu1&, "&Open File", %Form1_Open_File, %MF_ENABLED MENU ADD STRING, hForm1_Menu1&, "&Save File", %Form1_Save_File, %MF_ENABLED MENU ADD STRING, hForm1_Menu1&, "Save File &As", %Form1_Save_File_As, %MF_ENABLED MENU ADD STRING, hForm1_Menu1&, "-", %Form1_Separator_525, %MF_ENABLED MENU ADD STRING, hForm1_Menu1&, "E&xit", %Form1_Exit, %MF_ENABLED MENU NEW POPUP TO hForm1_Menu2& MENU ADD POPUP, hForm1_Menu0& ,"&Edit", hForm1_Menu2&, %MF_ENABLED ' - - - - - - - - - - - - - - MENU ADD STRING, hForm1_Menu2&, "Cu&t", %Form1_Cut, %MF_ENABLED MENU ADD STRING, hForm1_Menu2&, "&Copy", %Form1_Copy, %MF_ENABLED MENU ADD STRING, hForm1_Menu2&, "&Paste", %Form1_Paste, %MF_ENABLED MENU NEW POPUP TO hForm1_Menu3& MENU ADD POPUP, hForm1_Menu0& ,"&Help", hForm1_Menu3&, %MF_ENABLED ' - - - - - - - - - - - - - - MENU ADD STRING, hForm1_Menu3&, "Display Help &Contents", %Form1_Display_Help_Contents, %MF_ENABLED MENU ATTACH hForm1_Menu0&, hForm1& DIALOG SHOW MODELESS hForm1& , CALL Form1_DLGPROC Style& = %WS_CHILD OR %DS_CONTROL ExStyle& = 0 DIALOG NEW hForm1&, "", 0, 0, 283, 128, Style&, ExStyle& TO hForm2& ' add back the Controls here for the Child Dialog and see the GPF ' just remove the Rem character in front of the lines of code ' CONTROL ADD BUTTON, hForm2&, %FORM1_BUTTON1, "Button 1", 203, 2, 53, 15, %WS_CHILD OR %WS_VISIBLE OR %BS_AUTORADIOBUTTON OR %BS_PUSHLIKE OR %WS_GROUP OR %WS_TABSTOP ' CONTROL ADD BUTTON, hForm2&, %FORM1_BUTTON2, "Button 2", 203, 20, 53, 15, %WS_CHILD OR %WS_VISIBLE OR %BS_AUTORADIOBUTTON OR %BS_PUSHLIKE OR %WS_TABSTOP CALL CBF_FORM1_BUTTON2 ' CONTROL ADD BUTTON, hForm2&, %FORM1_BUTTON3, "Button 3", 203, 37, 53, 15, %WS_CHILD OR %WS_VISIBLE OR %BS_AUTORADIOBUTTON OR %BS_PUSHLIKE OR %WS_TABSTOP CALL CBF_FORM1_BUTTON3 ' CONTROL ADD IMGBUTTON, hForm2&, %FORM1_IBUTTON1, "FORM1_IBUTTON1_ICO", 229, 59, 27, 25, %WS_CHILD OR %WS_VISIBLE OR %BS_PUSHBUTTON OR %BS_ICON OR %WS_TABSTOP CALL CBF_FORM1_IBUTTON1 ' CONTROL ADD CHECKBOX, hForm2&, %FORM1_CHECK1, "Check 1", 5, 5, 53, 12 CALL CBF_FORM1_CHECK1 ' CONTROL ADD OPTION, hForm2&, %FORM1_RADIO1, "Radio 1", 5, 15, 53, 12, %WS_CHILD OR %WS_VISIBLE OR %BS_AUTORADIOBUTTON OR %WS_GROUP OR %WS_TABSTOP CALL CBF_FORM1_RADIO1 ' CONTROL ADD TEXTBOX, hForm2&, %FORM1_TEXT1, "", 5, 30, 53, 12, %WS_CHILD OR %WS_VISIBLE OR %ES_AUTOHSCROLL OR %WS_TABSTOP, %WS_EX_CLIENTEDGE CALL CBF_FORM1_TEXT1 ' - - - - - - - - - - - - - - - - - - - - - - - - - DIM LISTBOX1_List(4) AS LOCAL STRING DATA "Item 1","Item 2","Item 3","Item 4","Item 5" FOR N&=0 TO 4 CT&=CT&+1 LISTBOX1_List(N&)=READ$(CT&) NEXT N& ' - - - - - - - - - - - - - - - - - - - - - - - - - ' CONTROL ADD LISTBOX, hForm2&, %FORM1_LISTBOX1, LISTBOX1_List(), 69, 7, 53, 44, %WS_CHILD OR %WS_VISIBLE OR %LBS_NOTIFY OR %LBS_SORT OR %LBS_NOINTEGRALHEIGHT OR %WS_VSCROLL OR %WS_TABSTOP, %WS_EX_CLIENTEDGE CALL CBF_FORM1_LISTBOX1 ' - - - - - - - - - - - - - - - - - - - - - - - - - DIM COMBOBOX1_List(4) AS LOCAL STRING DATA "Item 1","Item 2","Item 3","Item 4","Item 5" FOR N&=0 TO 4 CT&=CT&+1 COMBOBOX1_List(N&)=READ$(CT&) NEXT N& ' - - - - - - - - - - - - - - - - - - - - - - - - - ' CONTROL ADD COMBOBOX, hForm2&, %FORM1_COMBOBOX1, COMBOBOX1_List(), 128, 7, 53, 52, %WS_CHILD OR %WS_VISIBLE OR %CBS_DROPDOWNLIST OR %CBS_SORT OR %WS_VSCROLL OR %CBS_NOINTEGRALHEIGHT OR %WS_TABSTOP, %WS_EX_CLIENTEDGE CALL CBF_FORM1_COMBOBOX1 ' CONTROL ADD SCROLLBAR, hForm2&, %FORM1_VSCROLL1, "", 197, 62, 11, 49, %WS_CHILD OR %WS_VISIBLE OR %SBS_VERT ' CONTROL ADD SCROLLBAR, hForm2&, %FORM1_HSCROLL1, "", 213, 106, 53, 10, %WS_CHILD OR %WS_VISIBLE OR %SBS_HORZ ' CONTROL ADD LABEL, hForm2&, %FORM1_LABEL1, "Label 1", 128, 34, 61, 12, %WS_CHILD OR %WS_VISIBLE OR %SS_CENTER ' CONTROL ADD FRAME, hForm2&, %FORM1_FRAME1, "Frame 1", 133, 49, 53, 44, %WS_CHILD OR %WS_VISIBLE OR %BS_GROUPBOX, %WS_EX_TRANSPARENT DIALOG SHOW MODELESS hForm2& , CALL Form2_DLGPROC DO DIALOG DOEVENTS TO Count& LOOP UNTIL Count&=0 END FUNCTION ' ************************************************************************************* ' Application Dialogs ' ************************************************************************************* ' ************************************************************************************* ' Dialog Callback Procedure ' for Form Form1 ' uses Global Handle - hForm1& ' ************************************************************************************* CALLBACK FUNCTION Form1_DLGPROC LOCAL hDlg AS LONG SELECT CASE CBMSG CASE %WM_COMMAND ' Process Messages to Controls that have no Callback Function ' and Process Messages to Menu Items SELECT CASE CBCTL CASE %Form1_New_File ' Popup Menu Item Selected Form1_New_File_Select CASE %Form1_Open_File ' Popup Menu Item Selected Form1_Open_File_Select CASE %Form1_Save_File ' Popup Menu Item Selected Form1_Save_File_Select CASE %Form1_Save_File_As ' Popup Menu Item Selected Form1_Save_File_As_Select CASE %Form1_Separator_525 ' Popup Menu Item Selected CASE %Form1_Exit ' Popup Menu Item Selected Form1_Exit_Select CASE %Form1_Cut ' Popup Menu Item Selected Form1_Cut_Select CASE %Form1_Copy ' Popup Menu Item Selected Form1_Copy_Select CASE %Form1_Paste ' Popup Menu Item Selected Form1_Paste_Select CASE %Form1_Display_Help_Contents ' Popup Menu Item Selected Form1_Display_Help_Contents_Select CASE ELSE END SELECT CASE %WM_NOTIFY ' Process Messages to Controls that use Notification method CASE ELSE END SELECT END FUNCTION CALLBACK FUNCTION Form2_DLGPROC LOCAL hDlg AS LONG SELECT CASE CBMSG CASE %WM_COMMAND ' Process Messages to Controls that have no Callback Function ' and Process Messages to Menu Items SELECT CASE CBCTL CASE ELSE END SELECT CASE %WM_NOTIFY ' Process Messages to Controls that use Notification method CASE ELSE END SELECT END FUNCTION ' ************************************************************************************* ' ************************************************************************************* ' ------------------------------------------------------------------------------------- ' ------------------------------------------------------------------------------------- ' ------------------------------------------------------------------------------------- ' ************************************************************************************* ' Application Callback Functions (or Procedures) for Controls ' ************************************************************************************* ' ------------------------------------------------ SUB Form1_New_File_Select() END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB Form1_Open_File_Select() END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB Form1_Save_File_Select() END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB Form1_Save_File_As_Select() END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB Form1_Exit_Select() END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB Form1_Cut_Select() END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB Form1_Copy_Select() END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB Form1_Paste_Select() END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB Form1_Display_Help_Contents_Select() END SUB ' ------------------------------------------------ ' ------------------------------------------------ CALLBACK FUNCTION CBF_FORM1_BUTTON1 IF CBCTLMSG=%BN_CLICKED THEN END IF IF CBCTLMSG=%BN_SETFOCUS THEN END IF IF CBCTLMSG=%BN_KILLFOCUS THEN END IF END FUNCTION ' ------------------------------------------------ ' ------------------------------------------------ CALLBACK FUNCTION CBF_FORM1_BUTTON2 IF CBCTLMSG=%BN_CLICKED THEN END IF IF CBCTLMSG=%BN_SETFOCUS THEN END IF IF CBCTLMSG=%BN_KILLFOCUS THEN END IF END FUNCTION ' ------------------------------------------------ ' ------------------------------------------------ CALLBACK FUNCTION CBF_FORM1_BUTTON3 IF CBCTLMSG=%BN_CLICKED THEN END IF IF CBCTLMSG=%BN_SETFOCUS THEN END IF IF CBCTLMSG=%BN_KILLFOCUS THEN END IF END FUNCTION ' ------------------------------------------------ ' ------------------------------------------------ CALLBACK FUNCTION CBF_FORM1_IBUTTON1 IF CBCTLMSG=%BN_CLICKED THEN END IF IF CBCTLMSG=%BN_SETFOCUS THEN END IF IF CBCTLMSG=%BN_KILLFOCUS THEN END IF END FUNCTION ' ------------------------------------------------ ' ------------------------------------------------ CALLBACK FUNCTION CBF_FORM1_CHECK1 IF CBCTLMSG=%BN_CLICKED THEN END IF IF CBCTLMSG=%BN_SETFOCUS THEN END IF IF CBCTLMSG=%BN_KILLFOCUS THEN END IF END FUNCTION ' ------------------------------------------------ ' ------------------------------------------------ CALLBACK FUNCTION CBF_FORM1_RADIO1 IF CBCTLMSG=%BN_CLICKED THEN END IF IF CBCTLMSG=%BN_SETFOCUS THEN END IF IF CBCTLMSG=%BN_KILLFOCUS THEN END IF END FUNCTION ' ------------------------------------------------ ' ------------------------------------------------ CALLBACK FUNCTION CBF_FORM1_TEXT1 IF CBCTLMSG=%EN_CHANGE THEN END IF IF CBCTLMSG=%EN_SETFOCUS THEN END IF IF CBCTLMSG=%EN_KILLFOCUS THEN END IF END FUNCTION ' ------------------------------------------------ ' ------------------------------------------------ CALLBACK FUNCTION CBF_FORM1_LISTBOX1 LOCAL CVal& ' Return Current Selection in CVal& CONTROL SEND CBHNDL , CBCTL, %LB_GETCURSEL, 0,0 TO CVal& IF CBCTLMSG=%LBN_SELCHANGE THEN END IF IF CBCTLMSG=%LBN_DBLCLK THEN END IF IF CBCTLMSG=%LBN_SETFOCUS THEN END IF IF CBCTLMSG=%LBN_KILLFOCUS THEN END IF END FUNCTION ' ------------------------------------------------ ' ------------------------------------------------ CALLBACK FUNCTION CBF_FORM1_COMBOBOX1 LOCAL CVal& ' Return Current Selection in CVal& CONTROL SEND CBHNDL , CBCTL, %CB_GETCURSEL, 0,0 TO CVal& IF (CBCTLMSG=%CBN_SELCHANGE) OR (CBCTLMSG=%CBN_EDITCHANGE) OR (CBCTLMSG=%CBN_EDITUPDATE) THEN END IF IF CBCTLMSG=%CBN_DBLCLK THEN END IF IF CBCTLMSG=%CBN_SETFOCUS THEN END IF IF CBCTLMSG=%CBN_KILLFOCUS THEN END IF END FUNCTION ' ------------------------------------------------ ' ------------------------------------------------ SUB FORM1_VSCROLL1_Change(BYVAL CVal&) END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB FORM1_HSCROLL1_Change(BYVAL CVal&) END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB FORM1_UPDOWN1_Change(BYVAL CVal&) END SUB ' ------------------------------------------------ ' ------------------------------------------------ SUB FORM1_TAB1_Change(BYVAL CVal&) END SUB ' ------------------------------------------------
[This message has been edited by Chris Boss (edited February 28, 2000).]
Comment