Thread: Ok, Structs, I need help I am not familiar with them

  1. #1
    left crog... back when? incognito's Avatar
    Join Date
    Oct 2001
    Posts
    1,427

    Ok, Structs, I need help I am not familiar with them

    Ok so I've read a book on C++ and whatnot, but it didn't really say what a struct was, it just mentioned that it was a cousin of a class and some other stuff. Now that I am reading Petzold's book, which uses C not C++ I've stumbled upon the following header file..............

    Code:
    struct
    {
         int     iIndex ;
         TCHAR * szLabel ;
         TCHAR * szDesc ;
    }
    sysmetrics [] =
    {
         SM_CXSCREEN,             TEXT ("SM_CXSCREEN"),              
                                  TEXT ("Screen width in pixels"),
         SM_CYSCREEN,             TEXT ("SM_CYSCREEN"),              
                                  TEXT ("Screen height in pixels"),
         SM_CXVSCROLL,            TEXT ("SM_CXVSCROLL"),             
                                  TEXT ("Vertical scroll width"),
         SM_CYHSCROLL,            TEXT ("SM_CYHSCROLL"),             
                                  TEXT ("Horizontal scroll height"),
         SM_CYCAPTION,            TEXT ("SM_CYCAPTION"),             
                                  TEXT ("Caption bar height"),
         SM_CXBORDER,             TEXT ("SM_CXBORDER"),              
                                  TEXT ("Window border width"),
         SM_CYBORDER,             TEXT ("SM_CYBORDER"),              
                                  TEXT ("Window border height"),
         SM_CXFIXEDFRAME,         TEXT ("SM_CXFIXEDFRAME"),          
                                  TEXT ("Dialog window frame width"),
         SM_CYFIXEDFRAME,         TEXT ("SM_CYFIXEDFRAME"),          
                                  TEXT ("Dialog window frame height"),
         SM_CYVTHUMB,             TEXT ("SM_CYVTHUMB"),              
                                  TEXT ("Vertical scroll thumb height"),
         SM_CXHTHUMB,             TEXT ("SM_CXHTHUMB"),              
                                  TEXT ("Horizontal scroll thumb width"),
         SM_CXICON,               TEXT ("SM_CXICON"),                
                                  TEXT ("Icon width"),
         SM_CYICON,               TEXT ("SM_CYICON"),                
                                  TEXT ("Icon height"),
         SM_CXCURSOR,             TEXT ("SM_CXCURSOR"),              
                                  TEXT ("Cursor width"),
         SM_CYCURSOR,             TEXT ("SM_CYCURSOR"),              
                                  TEXT ("Cursor height"),
         SM_CYMENU,               TEXT ("SM_CYMENU"),                
                                  TEXT ("Menu bar height"),
         SM_CXFULLSCREEN,         TEXT ("SM_CXFULLSCREEN"),          
                                  TEXT ("Full screen client area width"),
         SM_CYFULLSCREEN,         TEXT ("SM_CYFULLSCREEN"),          
                                  TEXT ("Full screen client area height"),
         SM_CYKANJIWINDOW,        TEXT ("SM_CYKANJIWINDOW"),         
                                  TEXT ("Kanji window height"),
         SM_MOUSEPRESENT,         TEXT ("SM_MOUSEPRESENT"),          
                                  TEXT ("Mouse present flag"),
         SM_CYVSCROLL,            TEXT ("SM_CYVSCROLL"),             
                                  TEXT ("Vertical scroll arrow height"),
         SM_CXHSCROLL,            TEXT ("SM_CXHSCROLL"),             
                                  TEXT ("Horizontal scroll arrow width"),
         SM_DEBUG,                TEXT ("SM_DEBUG"),                 
                                  TEXT ("Debug version flag"),
         SM_SWAPBUTTON,           TEXT ("SM_SWAPBUTTON"),            
                                  TEXT ("Mouse buttons swapped flag"),
         SM_CXMIN,                TEXT ("SM_CXMIN"),                 
                                  TEXT ("Minimum window width"),
         SM_CYMIN,                TEXT ("SM_CYMIN"),                 
                                  TEXT ("Minimum window height"),
         SM_CXSIZE,               TEXT ("SM_CXSIZE"),                
                                  TEXT ("Min/Max/Close button width"),
         SM_CYSIZE,               TEXT ("SM_CYSIZE"),                
                                  TEXT ("Min/Max/Close button height"),
         SM_CXSIZEFRAME,          TEXT ("SM_CXSIZEFRAME"),           
                                  TEXT ("Window sizing frame width"),
         SM_CYSIZEFRAME,          TEXT ("SM_CYSIZEFRAME"),           
                                  TEXT ("Window sizing frame height"),
         SM_CXMINTRACK,           TEXT ("SM_CXMINTRACK"),            
                                  TEXT ("Minimum window tracking width"),
         SM_CYMINTRACK,           TEXT ("SM_CYMINTRACK"),            
                                  TEXT ("Minimum window tracking height"),
         SM_CXDOUBLECLK,          TEXT ("SM_CXDOUBLECLK"),           
                                  TEXT ("Double click x tolerance"),
         SM_CYDOUBLECLK,          TEXT ("SM_CYDOUBLECLK"),           
                                  TEXT ("Double click y tolerance"),
         SM_CXICONSPACING,        TEXT ("SM_CXICONSPACING"),         
                                  TEXT ("Horizontal icon spacing"),
         SM_CYICONSPACING,        TEXT ("SM_CYICONSPACING"),         
                                  TEXT ("Vertical icon spacing"),
         SM_MENUDROPALIGNMENT,    TEXT ("SM_MENUDROPALIGNMENT"),     
                                  TEXT ("Left or right menu drop"),
         SM_PENWINDOWS,           TEXT ("SM_PENWINDOWS"),            
                                  TEXT ("Pen extensions installed"),
         SM_DBCSENABLED,          TEXT ("SM_DBCSENABLED"),           
                                  TEXT ("Double-Byte Char Set enabled"),
         SM_CMOUSEBUTTONS,        TEXT ("SM_CMOUSEBUTTONS"),         
                                  TEXT ("Number of mouse buttons"),
         SM_SECURE,               TEXT ("SM_SECURE"),                
                                  TEXT ("Security present flag"),
         SM_CXEDGE,               TEXT ("SM_CXEDGE"),                
                                  TEXT ("3-D border width"),
         SM_CYEDGE,               TEXT ("SM_CYEDGE"),                
                                  TEXT ("3-D border height"),
         SM_CXMINSPACING,         TEXT ("SM_CXMINSPACING"),          
                                  TEXT ("Minimized window spacing width"),
         SM_CYMINSPACING,         TEXT ("SM_CYMINSPACING"),          
                                  TEXT ("Minimized window spacing height"),
         SM_CXSMICON,             TEXT ("SM_CXSMICON"),              
                                  TEXT ("Small icon width"),
         SM_CYSMICON,             TEXT ("SM_CYSMICON"),              
                                  TEXT ("Small icon height"),
         SM_CYSMCAPTION,          TEXT ("SM_CYSMCAPTION"),           
                                  TEXT ("Small caption height"),
         SM_CXSMSIZE,             TEXT ("SM_CXSMSIZE"),              
                                  TEXT ("Small caption button width"),
         SM_CYSMSIZE,             TEXT ("SM_CYSMSIZE"),              
                                  TEXT ("Small caption button height"),
         SM_CXMENUSIZE,           TEXT ("SM_CXMENUSIZE"),            
                                  TEXT ("Menu bar button width"),
         SM_CYMENUSIZE,           TEXT ("SM_CYMENUSIZE"),            
                                  TEXT ("Menu bar button height"),
         SM_ARRANGE,              TEXT ("SM_ARRANGE"),               
                                  TEXT ("How minimized windows arranged"),
         SM_CXMINIMIZED,          TEXT ("SM_CXMINIMIZED"),           
                                  TEXT ("Minimized window width"),
         SM_CYMINIMIZED,          TEXT ("SM_CYMINIMIZED"),           
                                  TEXT ("Minimized window height"),
         SM_CXMAXTRACK,           TEXT ("SM_CXMAXTRACK"),            
                                  TEXT ("Maximum draggable width"),
         SM_CYMAXTRACK,           TEXT ("SM_CYMAXTRACK"),            
                                  TEXT ("Maximum draggable height"),
         SM_CXMAXIMIZED,          TEXT ("SM_CXMAXIMIZED"),           
                                  TEXT ("Width of maximized window"),
         SM_CYMAXIMIZED,          TEXT ("SM_CYMAXIMIZED"),           
                                  TEXT ("Height of maximized window"),
         SM_NETWORK,              TEXT ("SM_NETWORK"),               
                                  TEXT ("Network present flag"),
         SM_CLEANBOOT,            TEXT ("SM_CLEANBOOT"),             
                                  TEXT ("How system was booted"),
         SM_CXDRAG,               TEXT ("SM_CXDRAG"),                
                                  TEXT ("Avoid drag x tolerance"),
         SM_CYDRAG,               TEXT ("SM_CYDRAG"),                
                                  TEXT ("Avoid drag y tolerance"),
         SM_SHOWSOUNDS,           TEXT ("SM_SHOWSOUNDS"),            
                                  TEXT ("Present sounds visually"),
         SM_CXMENUCHECK,          TEXT ("SM_CXMENUCHECK"),           
                                  TEXT ("Menu check-mark width"),
         SM_CYMENUCHECK,          TEXT ("SM_CYMENUCHECK"),           
                                  TEXT ("Menu check-mark height"),
         SM_SLOWMACHINE,          TEXT ("SM_SLOWMACHINE"),           
                                  TEXT ("Slow processor flag"),
         SM_MIDEASTENABLED,       TEXT ("SM_MIDEASTENABLED"),        
                                  TEXT ("Hebrew and Arabic enabled flag"),
         SM_MOUSEWHEELPRESENT,    TEXT ("SM_MOUSEWHEELPRESENT"),     
                                  TEXT ("Mouse wheel present flag"),
         SM_XVIRTUALSCREEN,       TEXT ("SM_XVIRTUALSCREEN"),        
                                  TEXT ("Virtual screen x origin"),
         SM_YVIRTUALSCREEN,       TEXT ("SM_YVIRTUALSCREEN"),        
                                  TEXT ("Virtual screen y origin"),
         SM_CXVIRTUALSCREEN,      TEXT ("SM_CXVIRTUALSCREEN"),       
                                  TEXT ("Virtual screen width"),
         SM_CYVIRTUALSCREEN,      TEXT ("SM_CYVIRTUALSCREEN"),       
                                  TEXT ("Virtual screen height"),
         SM_CMONITORS,            TEXT ("SM_CMONITORS"),             
                                  TEXT ("Number of monitors"),
         SM_SAMEDISPLAYFORMAT,    TEXT ("SM_SAMEDISPLAYFORMAT"),     
                                  TEXT ("Same color format flag")
    } ;

    So please how does this thing work...........and how are

    int iIndex ;
    TCHAR * szLabel ;
    TCHAR * szDesc ;

    related to Systemetrics.......
    As some of you know I started C++ not a long time ago.......SO PLEASE NO FLAMING THE NEWBIES!!!!!!!!!

    PS I know very little about C..........
    There are some real morons in this world please do not become one of them, do not become a victim of moronitis. PROGRAMMING IS THE FUTURE...THE FUTURE IS NOW!!!!!!!!!

    "...The only real game I thank in the world is baseball..." --Babe Ruth

    "Life is beautiful"-Don Corleone right before he died.

    "The expert on anything was once a beginner" -Baseball poster I own.


    Left cprog on 1-3-2005. Don't know when I am coming back. Thanks to those who helped me over the years.

  2. #2
    Registered User
    Join Date
    Apr 2002
    Posts
    1,571
    Just glancing over it I can deduce the following. The member iIndex is an offset into the array of descriptions and labels. The 2 pointers are to the actual Label and Description. So, I'm not sure what exactly you are asking or if that answered anything? Structs are similiar to classes (kind of) but one important difference is that all of the struct data members are public. Any specific questions, just shoot.

  3. #3
    Just because ygfperson's Avatar
    Join Date
    Jan 2002
    Posts
    2,490
    c++ structs are just like classes (except always public.)

    a C struct is different. the struct you posted makes a struct with the elements iIndex, szLabel, and szDesc, whose array is named sysmetrics. from there on the various elements are being initialized. to make it easier i'll post a similar example:
    Code:
    char x[6] = {'t','r','e','e','s',0};
    you see the resemblance?

  4. #4
    ATH0 quzah's Avatar
    Join Date
    Oct 2001
    Posts
    14,826
    A structure is a group of variables bundled by a common name. Consider:
    Code:
    struct vehicle {
        char *name;
        int wheels;
        float milesPerGallon;
    };
    There. You have a vehicle. You can name your vehicle. You can give it different numbers of wheels, and you can give it a miles per gallon.

    Let's say we want to make a whole list of cars at once. We will create an array of vehicles.
    Code:
    struct vehicles cars[] =
    {
        { "Sports Car", 4, 25.5 },
        { "Family Car", 4, 30.1 },
        { "Semi Trailer", 18, 11.7 },
        { "Motorcycle", 2, 40.3 },
        { "Econo-Car", 4, 55.9 }
    };
    There you go. You have a bunch of vehicles. They're all defined.

    You can simplify this process by defining the structure and creating the array all in one shot:

    Code:
    struct vehicle {
        char *name;
        int wheels;
        float milesPerGallon;
    } vehicles[] =
    {
        { "Sports Car", 4, 25.5 },
        { "Family Car", 4, 30.1 },
        { "Semi Trailer", 18, 11.7 },
        { "Motorcycle", 2, 40.3 },
        { "Econo-Car", 4, 55.9 }
    };
    See?

    [edit]
    Ah. Took too long replying.
    [/edit]

    Quzah.
    Hope is the first step on the road to disappointment.

  5. #5
    left crog... back when? incognito's Avatar
    Join Date
    Oct 2001
    Posts
    1,427
    Originally posted by quzah
    A structure is a group of variables bundled by a common name. Consider:
    Code:
    struct vehicle {
        char *name;
        int wheels;
        float milesPerGallon;
    };
    There. You have a vehicle. You can name your vehicle. You can give it different numbers of wheels, and you can give it a miles per gallon.

    Let's say we want to make a whole list of cars at once. We will create an array of vehicles.
    Code:
    struct vehicles cars[] =
    {
        { "Sports Car", 4, 25.5 },
        { "Family Car", 4, 30.1 },
        { "Semi Trailer", 18, 11.7 },
        { "Motorcycle", 2, 40.3 },
        { "Econo-Car", 4, 55.9 }
    };
    There you go. You have a bunch of vehicles. They're all defined.

    You can simplify this process by defining the structure and creating the array all in one shot:

    Code:
    struct vehicle {
        char *name;
        int wheels;
        float milesPerGallon;
    } vehicles[] =
    {
        { "Sports Car", 4, 25.5 },
        { "Family Car", 4, 30.1 },
        { "Semi Trailer", 18, 11.7 },
        { "Motorcycle", 2, 40.3 },
        { "Econo-Car", 4, 55.9 }
    };
    See?

    [edit]
    Ah. Took too long replying.
    [/edit]

    Quzah.


    oh Thank you guys.........you've all been a big help, how would I access an instance of a car with this?
    There are some real morons in this world please do not become one of them, do not become a victim of moronitis. PROGRAMMING IS THE FUTURE...THE FUTURE IS NOW!!!!!!!!!

    "...The only real game I thank in the world is baseball..." --Babe Ruth

    "Life is beautiful"-Don Corleone right before he died.

    "The expert on anything was once a beginner" -Baseball poster I own.


    Left cprog on 1-3-2005. Don't know when I am coming back. Thanks to those who helped me over the years.

  6. #6
    ATH0 quzah's Avatar
    Join Date
    Oct 2001
    Posts
    14,826
    printf("Vehicle %d is:\n\tName: %s\n\tWheel count: %d\n\tMiles Per Gallon: %f\n", vehicle[x].name, vehicle[x].wheels, vehicle[x].milesPerGallon );

    Just like you would any other array. When accessing the members of a structure directly, you use the '.' operator:

    struct vehicle myCar;

    myCar.wheels = 4;
    myCar.milesPerGallon = 30.1;

    Then of course, since I used a pointer, you'd malloc some space for the name and copy a name into it.

    Quzah.
    Hope is the first step on the road to disappointment.

  7. #7
    left crog... back when? incognito's Avatar
    Join Date
    Oct 2001
    Posts
    1,427
    Ok I see where

    TCHAR * szLabel ;
    TCHAR * szDesc ;


    Come in.........first the szLabel and then the szDesc accordingly but I don't see where int iIndex ; comes in..........

    btw this is how the program is accessing the array or whatever this is

    Code:
         case WM_PAINT :
              hdc = BeginPaint (hwnd, &ps) ;
    
              for (i = 0 ; i < NUMLINES ; i++)
              {
                   TextOut (hdc, 0, cyChar * i,                      
                            sysmetrics[i].szLabel,
                            lstrlen (sysmetrics[i].szLabel)) ;
    
                   TextOut (hdc, 22 * cxCaps, cyChar * i,      
                            sysmetrics[i].szDesc,
                            lstrlen (sysmetrics[i].szDesc)) ;
    
                   SetTextAlign (hdc, TA_RIGHT | TA_TOP) ;
    
                   TextOut (hdc, 22 * cxCaps + 40 * cxChar, cyChar * i, szBuffer,
                            wsprintf (szBuffer, TEXT ("%5d"),
                                 GetSystemMetrics (sysmetrics[i].iIndex))) ;
    
                   SetTextAlign (hdc, TA_LEFT | TA_TOP) ;
              }
    There are some real morons in this world please do not become one of them, do not become a victim of moronitis. PROGRAMMING IS THE FUTURE...THE FUTURE IS NOW!!!!!!!!!

    "...The only real game I thank in the world is baseball..." --Babe Ruth

    "Life is beautiful"-Don Corleone right before he died.

    "The expert on anything was once a beginner" -Baseball poster I own.


    Left cprog on 1-3-2005. Don't know when I am coming back. Thanks to those who helped me over the years.

  8. #8
    left crog... back when? incognito's Avatar
    Join Date
    Oct 2001
    Posts
    1,427
    Never mind I got it thanks.
    There are some real morons in this world please do not become one of them, do not become a victim of moronitis. PROGRAMMING IS THE FUTURE...THE FUTURE IS NOW!!!!!!!!!

    "...The only real game I thank in the world is baseball..." --Babe Ruth

    "Life is beautiful"-Don Corleone right before he died.

    "The expert on anything was once a beginner" -Baseball poster I own.


    Left cprog on 1-3-2005. Don't know when I am coming back. Thanks to those who helped me over the years.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Creating array of structs
    By knirirr in forum C++ Programming
    Replies: 12
    Last Post: 06-18-2008, 08:30 AM
  2. Multidimentional structs + memcpy() == FAIL
    By Viper187 in forum C Programming
    Replies: 8
    Last Post: 06-18-2008, 02:46 AM
  3. packed structs
    By moi in forum C Programming
    Replies: 4
    Last Post: 08-20-2002, 01:46 PM
  4. ArrayLists + Inner Structs
    By ginoitalo in forum C# Programming
    Replies: 5
    Last Post: 05-09-2002, 05:09 AM
  5. Searching structs...
    By Sebastiani in forum C Programming
    Replies: 1
    Last Post: 08-25-2001, 12:38 PM