RSS Forums RSS
Please support our C++ advertiser: Programming Forums
Views: 9991 | Replies: 9
Reply
Join Date: Mar 2005
Posts: 64
Reputation: atrusmre is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 0
atrusmre's Avatar
atrusmre atrusmre is offline Offline
Junior Poster in Training

Combo Box

  #1  
Oct 29th, 2005
I'm sorry I've been posting so much, I'm still learning. My question how do you fill a combo using a varible. for example I want to fill my combo box in Visual C++ with something like this.
char *names[2];
names[0] = "Joe";
names[1] = "Billy";
names[2] = "Bob";
Please note this is an example, I realize that I could just fill it myself w/ this example.
Thanx again,
Atrus
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Oct 2004
Posts: 2,548
Reputation: vegaseat will become famous soon enough vegaseat will become famous soon enough 
Rep Power: 11
Solved Threads: 178
Moderator
vegaseat's Avatar
vegaseat vegaseat is offline Offline
DaniWeb's Hypocrite

Solution Re: Combo Box

  #2  
Oct 29th, 2005
Should be very similar to adding items to a listbox. Check out code snippet:
http://www.daniweb.com/code/snippet79.html
May 'the Google' be with you!
Reply With Quote  
Join Date: Mar 2005
Posts: 64
Reputation: atrusmre is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 0
atrusmre's Avatar
atrusmre atrusmre is offline Offline
Junior Poster in Training

Re: Combo Box

  #3  
Oct 31st, 2005
Got anything a little easier?
Reply With Quote  
Join Date: Oct 2005
Location: Manassas, VA USA
Posts: 72
Reputation: Clinton Portis is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 5
Clinton Portis's Avatar
Clinton Portis Clinton Portis is offline Offline
Junior Poster in Training

Re: Combo Box

  #4  
Oct 31st, 2005
Originally Posted by atrusmre
Got anything a little easier?



How about this:

#include <windows.h>

#define ID_LIST 1
#define ID_TEXT 2

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "ComboBox App";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "ComboBox App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


//User Defined Function(s)

//Compare the efficiency of my C++ function vs. Charles Petzold's C function  
//Page #407
void FillListBox(HWND hwndList)
{
     TCHAR *pVarName[] = {"Item1", "Item2", "Item3", "Item4", "Item5"};
     
     for(int i=0; i<5; i++)
  
             SendMessage(hwndList, CB_ADDSTRING, 0, (LPARAM)pVarName[i]);
     
}
             



/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND hwndList, hwndText;
    int iIndex, iLength, cxChar, cyChar;
    TCHAR pVarName[30];
        
     
        
    switch (message)                  /* handle the messages */
    {
    
        case WM_CREATE:
             
             cxChar = LOWORD(GetDialogBaseUnits());
             cyChar = HIWORD(GetDialogBaseUnits());
             
           //Create Display Window
           hwndText = CreateWindow(TEXT("static"),NULL, WS_CHILD | WS_VISIBLE |
                                   SS_LEFT, cxChar, cyChar, 
                                   GetSystemMetrics(SM_CXSCREEN), cyChar, 
                                   hwnd, (HMENU)ID_TEXT, 
                                   (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), 
                                   NULL);
             
           //Create ComboBox
           hwndList =  CreateWindow(TEXT("Combobox"), NULL, WS_CHILD | WS_VISIBLE |
                                   LBS_STANDARD, cxChar, cyChar*3, 
                                   cxChar*16 + GetSystemMetrics(SM_CXVSCROLL), 
                                   cyChar*5, hwnd, (HMENU)ID_LIST, 
                                   (HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE),
                                   NULL);
                                       
             //Populate ComboBox
             FillListBox(hwndList);
             
             //Set a Default Selection
             SendMessage(hwndList, CB_SETCURSEL, 0, 0);
             GetWindowText(hwndList, pVarName, 30);
             SetWindowText(hwndText, pVarName);
             
             return 0;
             
        case WM_COMMAND:
             
             if( LOWORD(wParam)==ID_LIST && HIWORD(wParam)==CBN_SELCHANGE)
             {
                 //Get Selection from Combo Box                 
                 GetWindowText(hwndList, pVarName, 30);      
                 
                 //Show Text in Display Window
                 SetWindowText(hwndText, pVarName);
             }
                 
             return 0;    
           
        case WM_DESTROY:
             
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        
        default: 
                                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
Reply With Quote  
Join Date: Mar 2005
Posts: 64
Reputation: atrusmre is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 0
atrusmre's Avatar
atrusmre atrusmre is offline Offline
Junior Poster in Training

Re: Combo Box

  #5  
Nov 8th, 2005
I was hopeing for something simpler. For example a x = y type answer. I tried setting a control varible (called m_cPeople) to my list. For example:
char *names[2];
names[0] = "Joe";
names[1] = "Billy";
names[2] = "Bob";
m_cPeople = names;
However at this point I get a "CComboBox : 'operator =' is unavailble"
Reply With Quote  
Join Date: Oct 2005
Location: Manassas, VA USA
Posts: 72
Reputation: Clinton Portis is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 5
Clinton Portis's Avatar
Clinton Portis Clinton Portis is offline Offline
Junior Poster in Training

Re: Combo Box

  #6  
Nov 8th, 2005
*names[2] will only have two elements..




*names[0] and *names[1]
Reply With Quote  
Join Date: Aug 2005
Location: near St Louis, Missouri, USA
Posts: 11,666
Reputation: Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of Ancient Dragon has much to be proud of 
Rep Power: 40
Solved Threads: 990
Moderator
Featured Poster
Ancient Dragon's Avatar
Ancient Dragon Ancient Dragon is offline Offline
Most Valuable Poster

Re: Combo Box

  #7  
Nov 8th, 2005
nothing in MS-Windows programming is "simple". If you want "simple" then stay with console programs. The function FillListBox() that was previously posted looks simple to me -- only 3 program lines. The rest of that post is common code that is required by all MS-Windows program using win32 api functions.
Reply With Quote  
Join Date: Mar 2005
Posts: 64
Reputation: atrusmre is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 0
atrusmre's Avatar
atrusmre atrusmre is offline Offline
Junior Poster in Training

Re: Combo Box

  #8  
Nov 9th, 2005
After much searching, I found my answer. Turns out I was on the right track. I set a the Combo Box to have a varible in the Control category (of type CComboBox) called it m_cPeople. Assuming to previos code I put in, I filled it like so.
for (int i = 0, i <= 2, i++)
     m_cPeople.AddString( (LPCTSTR)names[i]);
Simple, and effective. Thak you for helping me get on the right track guys.
Reply With Quote  
Join Date: Apr 2004
Posts: 3,766
Reputation: Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light Dave Sinkula is a glorious beacon of light 
Rep Power: 17
Solved Threads: 147
Colleague
Dave Sinkula's Avatar
Dave Sinkula Dave Sinkula is offline Offline
long time no c

Re: Combo Box

  #9  
Nov 9th, 2005
Again, be careful with array sizes.
Originally Posted by atrusmre
for (int i = 0, i <= 2, i++)
     m_cPeople.AddString( (LPCTSTR)names[i]);
This loop executes 3 times and tries to write from three strings.
High Plains Blogger #plains #lounge ## I, for one, welcome our new socialist overlords.
"Capitalism is the unequal distribution of wealth. Socialism is the equal distribution of poverty."
Reply With Quote  
Join Date: Mar 2005
Posts: 64
Reputation: atrusmre is an unknown quantity at this point 
Rep Power: 4
Solved Threads: 0
atrusmre's Avatar
atrusmre atrusmre is offline Offline
Junior Poster in Training

Re: Combo Box

  #10  
Nov 10th, 2005
Ack, sorry, was a typo. And sorry for not mentioning it was a MFC application.
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

Thread Tools Display Modes
Forums | Blogs | Tutorials | Code Snippets | Whitepapers | RSS Feeds | Advertising
All times are GMT -4. The time now is 1:49 am.
Newsletter Archive - Sitemap - Privacy Statement - Acceptable Use Policy - Contact Us
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC