I have a large program which in one portion tests something and if conditions are met tries to tick a check box. The code in the check box section of dialog callback then does the changes required. The short program below shows the problem. If I click on the check box then the callback responds but if I post or send a click message to it nothing happens. If I set the state of the check box then work code doesn't execute. What am I missing? Why doesn't the check box respond to a post or send message?
Code:
#PBFORMS CREATED V1.51 #COMPILE EXE #DIM ALL #PBFORMS BEGIN INCLUDES #IF NOT %DEF(%WINAPI) #INCLUDE "WIN32API.INC" #ENDIF #PBFORMS END INCLUDES #PBFORMS BEGIN CONSTANTS %Bcheck = 1004 %Bexit = 1005 %Bpost = 1003 %Bsend = 1002 %CBtest = 1001 %IDD_DIALOG1 = 101 #PBFORMS END CONSTANTS DECLARE CALLBACK FUNCTION ShowDIALOG1Proc() DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG #PBFORMS DECLARATIONS FUNCTION PBMAIN() ShowDIALOG1 %HWND_DESKTOP END FUNCTION SUB TCheck (Hdlg AS DWORD) CONTROL SET CHECK Hdlg, %CBtest, 1 END SUB SUB Tpost (Hdlg AS DWORD) CONTROL POST Hdlg, %CBtest, %BN_CLICKED, 0, 0 END SUB SUB Tsend (Hdlg AS DWORD) CONTROL SEND Hdlg, %CBtest, %BN_CLICKED, 0, 0 END SUB CALLBACK FUNCTION ShowDIALOG1Proc() SELECT CASE AS LONG CBMSG CASE %WM_INITDIALOG CASE %WM_NCACTIVATE STATIC hWndSaveFocus AS DWORD IF ISFALSE CBWPARAM THEN hWndSaveFocus = GetFocus() ELSEIF hWndSaveFocus THEN SetFocus(hWndSaveFocus) hWndSaveFocus = 0 END IF CASE %WM_COMMAND SELECT CASE AS LONG CBCTL CASE %CBtest IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN 'Note the above line was not added by PBForms 5.1 'in fact PBForms puts in no lines ? "State changed so do work" END IF CASE %Bsend IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN Tsend CBHNDL END IF CASE %Bpost IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN Tpost CBHNDL END IF CASE %Bcheck IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN Tcheck CBHNDL END IF CASE %Bexit IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN DIALOG END CBHNDL END IF END SELECT END SELECT END FUNCTION FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG #PBFORMS BEGIN DIALOG %IDD_DIALOG1->-> LOCAL hDlg AS DWORD DIALOG NEW hParent, "Dialog1", 70, 70, 201, 58, TO hDlg CONTROL ADD CHECKBOX, hDlg, %CBtest, "Test Check Box", 55, 10, 75, 15 CONTROL ADD BUTTON, hDlg, %Bsend, "Send Msg", 5, 35, 45, 15 CONTROL ADD BUTTON, hDlg, %Bpost, "Post Msg", 53, 35, 45, 15 CONTROL ADD BUTTON, hDlg, %Bcheck, "Check", 101, 35, 45, 15 CONTROL ADD BUTTON, hDlg, %Bexit, "Exit", 149, 35, 46, 15 #PBFORMS END DIALOG DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt #PBFORMS BEGIN CLEANUP %IDD_DIALOG1 #PBFORMS END CLEANUP FUNCTION = lRslt END FUNCTION
Comment