Go4Expert

Go4Expert (http://www.go4expert.com/)
-   Win32 (http://www.go4expert.com/articles/win32-tutorials/)
-   -   Simple example of enumerating a child window proc (http://www.go4expert.com/articles/simple-example-enumerating-child-window-t8800/)

imrantechi 13Feb2008 14:58

Simple example of enumerating a child window proc
 

Introduction



This article shows the enumeration of child windows. The code is written in win 32 and can be understood with a prior knowledge of it. Although i have tried well to explain all the points as far as possible.

Code: Cpp

//HEADER FILES

# include <windows.h>


//IDENTIFIERS

#   define  IDC_CHECKBOX1                100   ///<Identifier For 1st Check Box
#   define  IDC_CHECKBOX2                101   ///<Identifier For 2nd Check Box
#   define  IDC_CHECKBOX3                102   ///<Identifier For 3rd Check Box
#   define  IDC_CHECKBOX4                103   ///<Identifier For 4th Check Box
#   define  IDC_RADIO11          104         ///<Identifier For 1st Radio Button   
#   define  IDC_RADIO12          105         ///<Identifier For 2nd Radio Button
#   define  IDC_RADIO13          106         ///<Identifier For 3rd Radio Button 
#   define  IDC_RADIO21          107         ///<Identifier For 1st Radio Button 
#   define  IDC_RADIO22          108         ///<Identifier For 2nd Radio Button 
#   define  IDC_RADIO23          109         ///<Identifier For 3rd Radio Button
#   define  IDC_EDITBOX                  110         ///<Identifier For Edit Control
#   define  IDC_LISTBOX          111         ///<Identifier For List Box
#   define  IDC_SUBMIT                112            ///<Identifier For Submit Button
#   define  IDC_GROUP1                  113            ///<Identifier For 1st Group
#   define  IDC_GROUP2                  114            ///<Identifier For 2nd Group
#   define  IDC_GROUP3                  115            ///<Identifier For 3rd Group
#   define  IDC_RESET                    116   ///<Identifier For Reset Button
#   define  IDC_COMBOBOX          117      ///<Identifier For Reset Button  
#   define      ONE                         1           ///<Macro Declaration.
#   define      TWO                         2           ///<Macro Declaration.
#   define      THREE                       3           ///<Macro Declaration.
#   define      FOUR                        4           ///<Macro Declaration.
#   define      ZERO                        0           ///<Macro Declaration.
#   define      FIVE                        5           ///<Macro Declaration.
   
//Global Variables

HANDLE    ghInstance;                  ///< Contains the instance of the Application
int gCheckonce=1;      ///<used for the submit button to allow only one submission.
int i;

#include "res.h"


/**
 *This function deals with first checking where a previous instance is present or not.
 *If there is no previous instance then it creates a windows class and then registers it to the register class.
 *
 * @return  int     The resulting number of bytes copied
 *
 * @note
 * <ul>
 *     <li>this function is the main entry point of the program.
 * </ul>
*/






int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow )
{

        WNDCLASS    wc;  //contains the window class attributes that are registered by the RegisterClass function
        MSG   uMsg;    //structure contains message information from a thread's message queue
        HWND        hWnd;   //handle to window
        BOOL        bRet;

    if( !hPrevInstance ){

        wc.lpszClassName = "GenericAppClass";         //Name to identify the window class.
        wc.lpfnWndProc =MainWndProc;                    //Pointer to the window procedure for this window class
        wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;  //Specifies the class style(s)
        wc.hInstance = hInstance;                       
        wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );   //returns the handle to an icon to be loaded on the window
        wc.hCursor = LoadCursor( NULL, IDC_ARROW );     //returns the handle to the cursor that has to be displayed
        wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+11)//set the background color
        wc.lpszMenuName = NULL;                         //class have no default menu
        wc.cbClsExtra = 0;                           
        wc.cbWndExtra = 0;
        RegisterClass( &wc );                           //this will register the class
    }

    ghInstance = hInstance;

    //CreateWindow will return the handle to a new window
    hWnd = CreateWindow( "GenericAppClass",     //name of the window class
                        "EXAMPLE OF TAB CONTROL",         //window name
                        WS_OVERLAPPEDWINDOW|WS_HSCROLL|
                        WS_VSCROLL|WS_CLIPSIBLINGS,   //specifies the window style
                        0,                  //set the horizontal position of the window
                        0,                                  //set the vertical position of the window
                        CW_USEDEFAULT,                      //set the width of the window
                        CW_USEDEFAULT,            //set the height of the window
                        NULL,                               //contains valid pointer for child window
                        NULL,                        //class menu is used
                        hInstance,              //Handle to the instance associated with the window
                        NULL )

   
    //function to show the window
    ShowWindow( hWnd, SW_MAXIMIZE );                       

    //it will be executed if function will return nonzero value
    while( (bRet = GetMessage( &uMsg, NULL, 0, 0 )) != 0 )  //GetMessage retrieves messages for any window that belongs                                                to the calling thread and thread messages posted to the                                                                    calling thread using the PostThreadMessage function.

    {
        //execute if there is an error otherwise 'else' part is executed
        if (bRet == -1) {                               
           
            return 0;
       
        } else {                                       
   
            TranslateMessage( &uMsg );    //translates virtual-key messages into character messages.
            DispatchMessage( &uMsg );      //dispatches a message to a window procedure
        }
    }                              //loops ended
    return (int)uMsg.wParam;                    // returns integer that indicates the additional information of the msg

}   //  End of WinMain()

/**
 * MainWndProc procedure
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd  Contains the address of the Window
 * @param [in]     msg    specifies the msg
 *
 * @return      0  returns zero.     
 *
 */


LRESULT CALLBACK MainWndProc(HWND phWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{   
    switch(uMsg ){

    //call function to create all controls.
    case WM_CREATE:

        CreateControls(phWnd);    ///<creates all the controls.

        //enumerates the child window proc.
        //The EnumChildWindows function enumerates the child windows that belong to the specified parent window by        //passing the handle to each child window.
        //EnumChildProc receives the child window handles.
        //SubClassProc is used to intercept the messages meant for the default window into the controls window

        EnumChildWindows(phWnd,(WNDENUMPROC) EnumChildProc,(LONG)SubClassProc);
        break;
       
    //used to close the window
    case WM_CLOSE:

        if((MessageBox(phWnd, "DO YOU REALLY WANT TO EXIT ?", "Message",MB_OKCANCEL))==IDOK){

            //for final exit
            DestroyWindow(phWnd);   // POSTS THE MESSAGE WM_DESTROY TO DESTROY THE CREATED WINDOW.
        }
        break;

    case WM_COMMAND:   

        //Handling Window Controllers
        switch(LOWORD(wParam)){

        case IDC_SUBMIT:

            //handles the submission of the details into the list box on clicking submit

            if(HIWORD(wParam)==BN_CLICKED && gCheckonce==ONE){  // hiword(wParam) takes the notification

                AddItemsInListBox(phWnd); //displays all the details in the list box.

                gCheckonce=TWO;
            }
            break;

        case IDC_RESET:

            if(HIWORD(wParam)==BN_CLICKED){

                for(i=ZERO; i<FOUR; i++){

                    //sends message to uncheck the radio buttons of the first group.
                    SendMessage(GetDlgItem(phWnd,(IDC_RADIO11+i)),BM_SETCHECK,BST_UNCHECKED,0);

                    //sends message to uncheck the radio buttons of the second group
                    SendMessage(GetDlgItem(phWnd,(IDC_RADIO21+i)),BM_SETCHECK,BST_UNCHECKED,0);

                    //sends message to uncheck the check boxes.
                    SendMessage(GetDlgItem(phWnd,(IDC_CHECKBOX1+i)),BM_SETCHECK,BST_UNCHECKED,0);
                }

                //sends message to reset the edit box.
                SendMessage(GetDlgItem(phWnd,IDC_EDITBOX),WM_SETTEXT,0,(LPARAM)" ");

                //sends message to reset the combo box.
                SendMessage(GetDlgItem(phWnd,IDC_COMBOBOX),CB_SETCURSEL,0,0);

                //sends message to reset the list box.
                SendMessage(GetDlgItem(phWnd,IDC_LISTBOX),LB_RESETCONTENT,0,0);

                //resets the flag of the submit button to 1.
                gCheckonce=ONE;
            }
            break;
        }
        break;

    //USED TO CONTROL WINDOW
    case WM_DESTROY:

        PostQuitMessage(0); // posts the message wm_quit to quit the window.

        break;

        //TO PROVIDE DEFAULT PROCESSING ON ANY WINDOW MESSAGES
    default:

        return( DefWindowProc( phWnd, uMsg, wParam, lParam ));       
    }                                                   
    return 0;
}
/**
 * CreateLabels() used to create labels for all the controls
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd    Contains the address of the Parent Window
 * @param [in]     hwndCheckBox  contains the address of the check box control
 *
 */


void CreateLabels(HWND phWnd)
{
    //LABEL FOR THE COMBO BOX
    CreateWindow("Static","Enter the field of Study:",WS_CHILD|WS_VISIBLE|SS_LEFT,40,80,200,
        20,phWnd,NULL,ghInstance,NULL);

    //LABEL FOR THE BADIOBUTTONS OF FIRST GROUP
    CreateWindow("Static","Enter the Students Year Of Study:",WS_CHILD|WS_VISIBLE|SS_LEFT,40,160,250                                     ,20,phWnd,NULL,ghInstance,NULL);

    //LABEL FOR THE EDIT BOX
    CreateWindow("Static","Enter the Students Name:",WS_CHILD|WS_VISIBLE|SS_LEFT,510,80,180,20,         phWnd,NULL,ghInstance,NULL);

    //LABEL FOR THE RADIOBUTTONS OF THE SECOND GROUP
    CreateWindow("Static","Enter the Students Initials:",WS_CHILD|WS_VISIBLE|SS_LEFT,510,160,180,20,
        phWnd,NULL,ghInstance,NULL);
   
    //LABEL FOR THE CHECK BOX
    CreateWindow("Static","Enter the Students Hobbies:",WS_CHILD|WS_VISIBLE|SS_LEFT,220,350,280,20,            phWnd,NULL,ghInstance,NULL);
}

/**
 * CreateControls() used to create Controls for all the controls
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd    Contains the address of the Parent Window
 *
 */


void CreateControls( HWND phWnd )
{
    //TO CREATE COMBO BOX
    CreateComboBox(phWnd);

    //TO CREATE RADIOBUTTON
    CreateRadioButtonfirstgroup(phWnd,180);

    //TO CREATE LABELS FOR ALL THE CONTROLS
    CreateLabels(phWnd);

    //TO CREATE THE GROUP STRUCTURE
    CreateGroups(phWnd);
   
    // CreateEditBox(phWnd);
    CreateEditBox(phWnd);   

    //TO CREATE SECOND SET OF RADIOBUTTONS
    CreateRadioButtonsecondgroup(phWnd,180);

    //TO CREATE CHECK BOX
    CreateCheckBox(phWnd,340);

    //TO CREATE THE SUBMIT AND RESET BUTTONS FOR THE 1ST TAB
    Createopbutton(phWnd);
                           
    //TO CREATE LIST BOX CONTROL
    CreateListBox(phWnd);

    //used to setfocus on ComboBox
    SetFocus(GetDlgItem(phWnd,IDC_COMBOBOX));   
}

/**
 * CreateGroups() used to create groups for all the controls
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd    Contains the address of the Parent Window
 * @param [in]     hwndCheckBox  contains the address of the check box control
 *
 */

void CreateGroups(HWND phWnd)
{
    //CREATES THE OUTLINE FOR THE FIRST GROUP
    CreateWindow("Button", "SUBJECT DETAILS" , WS_CHILD | WS_VISIBLE |BS_GROUPBOX,30,50,400,250,phWnd,
        (HMENU)IDC_GROUP1,ghInstance,NULL);

    //CREATES THE OUTLINE FOR THE SECOND GROUP
    CreateWindow("Button", "STUDENT DETAILS" , WS_CHILD | WS_VISIBLE |BS_GROUPBOX,500,50,400,
        250,phWnd,(HMENU)IDC_GROUP2,ghInstance,NULL);   

    //CREATES THE OUTLINE FOR THE THIRD GROUP
    CreateWindow("Button", "HOBBIES" , WS_CHILD | WS_VISIBLE |BS_GROUPBOX,30,320,670,
        120,phWnd,(HMENU)IDC_GROUP3,ghInstance,NULL);

}


/**
 * CreateRadioButtonfirstgroup() used to create Radio Button for first Group Box
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd    Contains the address of the Window
 * @param [in]     button_no        Contains the Radio button no.
 *   
 */


void CreateRadioButtonfirstgroup(HWND phWnd,int y_axis)
{

        int i,x_axis;
        char *radiobuttonnames[]={"I","II","III"};
    for(i=ZERO,x_axis=50;i<THREE;i++,x_axis+=90){

        CreateWindow("Button",radiobuttonnames[i],WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTORADIOBUTTON,

            x_axis,y_axis,50,100,phWnd,(HMENU)(IDC_RADIO11+i),ghInstance,NULL);
    }      
}

/**
 * CreateRadioButtonsecondgroup() used to create Radio Button for second Group Box
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd    Contains the address of the Window
 * @param [in]     button_no        Contains the Radio button no.
 *   
 */


void CreateRadioButtonsecondgroup(HWND hWnd,int y_axis)
{

        int i,x_axis;
        char *radiobuttonnames1[]={"Mr","Miss","Mrs"};

    for(i=ZERO,x_axis=520;i<THREE;i++,x_axis+=90){

        CreateWindow("Button",radiobuttonnames1[i],WS_CHILD|WS_VISIBLE|WS_TABSTOP|BS_AUTORADIOBUTTON,

            x_axis,y_axis,50,100,hWnd,(HMENU)(IDC_RADIO21+i),ghInstance,NULL);
    }
}

/**
 * Createopbutton() used to create submit and reset button
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd    Contains the address of the Window
 * @param [in]     button_no        Contains the Radio button no.
 *   
 */


void Createopbutton(HWND phWnd)
{   
    //CREATES THE SUBMIT BUTTON
    CreateWindow("Button","Submit",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON|WS_TABSTOP ,350,600,100,30,
        phWnd,(HMENU)IDC_SUBMIT,ghInstance,NULL);

    //CREATES THE RESET BUTTON
    CreateWindow("Button","Reset",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON|WS_TABSTOP ,550,600,100,30,
        phWnd,(HMENU)IDC_RESET,ghInstance,NULL);

}

/**
 * CreateCheckBox() creates the check boxes
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd    Contains the address of the Parent Window
 * @param [in]     hwndCheckBox  contains the address of the check box control
 *
 */


void CreateCheckBox(HWND phWnd,int y_axis)
{

        int x_axis,i;
        char *checkboxnames[]={"Singing","Dancing","Sketching","Drawing"};

    for(i=ZERO,x_axis=50;i<FOUR;i++,x_axis+=150){

        CreateWindow("Button",checkboxnames[i],WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX|WS_TABSTOP,
            x_axis,390,100,15,phWnd,(HMENU)(IDC_CHECKBOX1+i),ghInstance,NULL);

    }
}

/**
 * CreateComboBox() used to create Combo Box For first Group Box
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd  Contains the address of the Window
 * 
 */


void CreateComboBox(HWND phWnd)
{
   
        char    *comboitem[] = {    "SELECT",
                                    "MATHS",
                                    "BIOLOGY",
                                    "COMMERCE",
                                    "ARTS"      };
        int  i;

    CreateWindow(   "COMBOBOX",
                    "",
                    CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE |WS_TABSTOP|WS_GROUP,       
                    70,
                    100,
                    200,
                    500,
                    phWnd,
                    (HMENU) IDC_COMBOBOX,
                    ghInstance,
                    NULL);

    //Add items in the Combo Box
    for(i=ZERO;i<FIVE;i++)
        SendMessage(GetDlgItem(phWnd,IDC_COMBOBOX), CB_ADDSTRING, 0, (LPARAM) comboitem[i]);

}

/**
 * CreateEditBox() used to create submit and reset button
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd    Contains the address of the Window
 * @param [in]     button_no        Contains the Radio button no.
 *   
 */


void CreateEditBox(HWND phWnd)
{   
    //CREATES THE EDIT BOX
    CreateWindow("Edit",NULL,WS_CHILD|WS_VISIBLE |WS_BORDER|WS_GROUP|WS_TABSTOP,700,70,180,40,
        phWnd,(HMENU)IDC_EDITBOX,  ghInstance,NULL);
}

/**
 * CreateListBox() used to create List Box
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd    Contains the address of the Window
 *   
 */


void CreateListBox(HWND phWnd)
{
    //CREATES THE LIST BOX
    CreateWindow("ListBox",NULL,WS_CHILD|WS_VISIBLE |WS_BORDER |WS_VSCROLL ,                                                      200,480,200,50,phWnd,(HMENU)IDC_LISTBOX,ghInstance,NULL);
}

/**
 * AddItemsToListBox() used to retrieve text from all the controls and add those in List Box
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd  Contains the address of the Window
 */


void AddItemsInListBox(HWND phWnd)
{
    //CALL FUNCTION TO RETRIEVE THE SELECTED STRING FROM THE COMBO BOX
    RetrieveTextFromComboBox(phWnd);                       

    //CALL FUNCTION TO CHECK THAT WEATHER THE CHECK BOX 1 SELECTD OR N0T
    checkbox(GetDlgItem(phWnd,IDC_CHECKBOX1),phWnd);   

    //CALL FUNCTION TO CHECK THAT WEATHER THE CHECK BOX 2 IS SELECTD OR N0T
    checkbox(GetDlgItem(phWnd,IDC_CHECKBOX2),phWnd);   

    //CALL FUNCTION TO CHECK THAT WEATHER THE CHECK BOX 3 IS SELECTD OR N0T
    checkbox(GetDlgItem(phWnd,IDC_CHECKBOX3),phWnd);       

    //CALL FUNCTION TO CHECK THAT WEATHER THE CHECK BOX 3 IS SELECTD OR N0T
    checkbox(GetDlgItem(phWnd,IDC_CHECKBOX4),phWnd);       
                                               
    //CALL FUNCTION TO CHECK THAT WEATHER THE RADIO BUTTON 1 OF RADIO GROUP 1 IS SELECTD OR N0T
    radiocheck(IDC_RADIO11,phWnd)
   
    //CALL FUNCTION TO CHECK THAT WEATHER THE RADIO BUTTON 2 OF RADIO GROUP 1 IS SELECTD OR N0T
    radiocheck(IDC_RADIO12,phWnd);   
                   
    //CALL FUNCTION TO CHECK THAT WEATHER THE RADIO BUTTON 3 OF RADIO GROUP 1 IS SELECTD OR N0T
    radiocheck(IDC_RADIO13,phWnd);   
                       
    //CALL FUNCTION TO CHECK THAT WEATHER THE RADIO BUTTON 1 OF RADIO GROUP 2 IS SELECTD OR N0T
    radiocheck(IDC_RADIO21,phWnd);   
                               
    //CALL FUNCTION TO CHECK THAT WEATHER THE RADIO BUTTON 2 OF RADIO GROUP 2 IS SELECTD OR N0T
    radiocheck(IDC_RADIO22,phWnd)
               
    //CALL FUNCTION TO CHECK THAT WEATHER THE RADIO BUTTON 3 OF RADIO GROUP 2 IS SELECTD OR N0T
    radiocheck(IDC_RADIO23,phWnd);
                               
    //CALL FUNCTION TO CHECK THAT WEATHER THE TEXT IS AVILABLE IN EDIT CONTROL OR N0T
    EditText(phWnd);
}
/**
 * radiocheck() used to check whether or not Radio Buttons are checked
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd   Contains the address of the Window
 * @param [in]     Button_no    Identifier of Radio Button.
 *
 */


void radiocheck(int pButton_no,HWND phWnd)
{
   
        char*      edittext;     
        int   i;

    //RETURN TRUE IF RADIO BUTTON IS SELECTED
    if(SendMessage( GetDlgItem(phWnd,pButton_no),BM_GETCHECK,0,0) == BST_CHECKED)   {       
   
        //Retrieve the length of the text associated with the CheckBox
        i = GetWindowTextLength( GetDlgItem(phWnd,pButton_no));
       
        //Allocate memory of i length
        edittext = (char*)malloc((i+1)*sizeof(char));
       
        //Retrieve the string associated with the Radio Buttons
        GetWindowText( GetDlgItem(phWnd,pButton_no), edittext,i+1);
       
        //Add that string in to the List box
        SendMessage(GetDlgItem(phWnd,IDC_LISTBOX),LB_ADDSTRING,0,(LPARAM) edittext);
        free(edittext);
    }   
}

/**
 * EditText() used to retrieve text from Edit Text control of first group box and add it to the list box
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd  Contains the address of the Window
 * 
 */

void EditText(HWND phWnd)
{
   
        char    *edittext;        ///<contains the address of the Buffer                                       
       
    //call RetrieveText() to retrieve text from the Edit Control of First Group Box
    edittext=RetrieveText( GetDlgItem(phWnd,IDC_EDITBOX));

    //add that string in the List box
    SendMessage(GetDlgItem(phWnd,IDC_LISTBOX),LB_ADDSTRING,0,(LPARAM) edittext);
    free(edittext)
}
/**
 * RetrieveTextFromComboBox() used to retrieve selected text from combo box
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd  Contains the address of the Window
 * 
 */

void RetrieveTextFromComboBox(HWND phWnd)
{
   
        char    *edittext;
        int   CBIndex;

    (LRESULT) CBIndex = SendMessage(GetDlgItem(phWnd,IDC_COMBOBOX),CB_GETCURSEL,0,0);
   
    //checks whether or not any value is selected in the combo box if not retuns -1
    if (CBIndex != -1) {
       
        edittext=RetrieveText( GetDlgItem(phWnd,IDC_COMBOBOX));
        //ADD THE RETRIEVED TEXT TO THE LIST BOX
        SendMessage(GetDlgItem(phWnd,IDC_LISTBOX),LB_ADDSTRING,0,(LPARAM) edittext);
       
        free(edittext);
    }
}

/**
 * RetrieveText() used to retireve text from th edit control
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd  Contains the address of the Window
 *
 */


char* RetrieveText(HWND phWnd)
{
        char        *edittext;
        int   textlength;

   
    //Retrieve text length
    (LRESULT) textlength = SendMessage( phWnd,WM_GETTEXTLENGTH,0,0);
    edittext=(char*)calloc(textlength+1,sizeof(char));
   
    //retrieve the string entered in the Edit Control
    SendMessage( phWnd,WM_GETTEXT,textlength+1,(LPARAM) edittext);

    return edittext;
}

/**
 * checkbox() used to check whether or not check boxes are checked
 *
 * This continues into the more detailed description of the function.
 *
 * @param [in]     hWnd    Contains the address of the Parent Window
 * @param [in]     hwndCheckBox  contains the address of the check box control
 *
 */


void checkbox(HWND phwndCheckBox , HWND phWnd)
{
       
        char *    edittext;
        int   i;

    //RETURN TRUE IF CHECK BOX IS SELECTED
    if(SendMessage(phwndCheckBox,BM_GETCHECK,0,0)==BST_CHECKED) {           
   
        //retrieve the length of the text associated with the CheckBox
        i = GetWindowTextLength(phwndCheckBox);
       
        //Allocate memory of i length
        edittext = (char*)malloc((i+1)*sizeof(char));
       
        //retrieve the string associated with the CheckBox
        i = GetWindowText( phwndCheckBox, edittext,(i+1) );
       
        //add that string in to the List box
        SendMessage(GetDlgItem( phWnd, IDC_LISTBOX ),LB_ADDSTRING,0,(LPARAM) edittext);
       
        free(edittext);
    }
}

/**
 *This function enumerates child procedure.
 *
 * @note
 * <ul>
 *     <li>this function enumerates the procedures of all the controls in the order of their creation.
 * </ul>
 */



BOOL CALLBACK EnumChildProc(HWND handle,LPARAM lParam)
{
        WNDPROC SubclassWndProc;
        SubclassWndProc=(WNDPROC) SetWindowLong(handle,GWL_WNDPROC,(LONG)lParam);

        /**The SetWindowLong function changes an attribute of the specified window.
          *GWL_USERDATA in this we are attaching the address of the previous window proc.
         */

        SetWindowLong(handle,GWL_USERDATA,(LONG)SubclassWndProc);   
        return TRUE;
}

/**
*This function calls for the sub class procedure.
*
* @note
* <ul>
*     <li>this function allows the user to move from one control to the another with the help of tab.
*     <li>this function allows the user to submit or reset the details entered  with the help of tab.
* </ul>
*/



LRESULT CALLBACK SubClassProc(HWND phWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{

        int id=GetDlgCtrlID(phWnd);


    switch(uMsg){

    //this is used to handle keyboard events.
    case WM_CHAR:

        switch(wParam){

        //this is used for the tab key event.
        case VK_TAB:

            SetFocus(GetNextDlgTabItem(GetParent(phWnd),phWnd,FALSE));

            break;

        //this is used for the enter key event.
        case VK_RETURN:


            if(id==IDC_RESET||id==IDC_SUBMIT){
                SendMessage(phWnd,BM_CLICK,0,0);
            }


            break;

           
        }
        break;

   
   
    }
    return CallWindowProc((WNDPROC)GetWindowLong(phWnd,GWL_USERDATA),phWnd,uMsg,wParam,lParam);
   
}


elec.shabnam 14Feb2008 13:55

Re: Simple example of enumerating a child window proc
 
Horrible code!!!

I am a new to coding in Visual studio.

arbaz.it 14Feb2008 14:45

Re: Simple example of enumerating a child window proc
 
i dont feel the code is horrible the code works absolutely fine

imrantechi 14Feb2008 15:29

Re: Simple example of enumerating a child window proc
 
Quote:

Originally Posted by elec.shabnam
Horrible code!!!

I am a new to coding in Visual studio.

hi please try to understand the code ,every line has a comment, even after that if you have a problem please feel free to ask me i will help you line by line

elec.shabnam 14Feb2008 15:31

Re: Simple example of enumerating a child window proc
 
Quote:

Originally Posted by arbaz.it
i dont feel the code is horrible the code works absolutely fine

i dint mean so i mean, its not understandable for me

elec.shabnam 14Feb2008 15:33

Re: Simple example of enumerating a child window proc
 
can you please explain me regarding enumeration.

elec.shabnam 14Feb2008 15:36

Re: Simple example of enumerating a child window proc
 
see when we create controls and want to enumerate it as a child proc,
what we do is that we retrieve the handle of the controls one after the other in the order of their creation and pass it back to the window procedure that needed it .

this enumeration helps us to call all the keep a single or same procedure for all the controls , by enumerating their handles

elec.shabnam 14Feb2008 15:37

Re: Simple example of enumerating a child window proc
 
what did you mean by the order of creation.

elec.shabnam 14Feb2008 15:39

Re: Simple example of enumerating a child window proc
 
this is what i know

elec.shabnam 14Feb2008 15:42

Re: Simple example of enumerating a child window proc
 
Quote:

Originally Posted by elec.shabnam
what did you mean by the order of creation.

i m sorry i meant what is this order of creation ,is it system decided


All times are GMT +5.5. The time now is 21:53.