| | |
Combo Box
Please support our C++ advertiser: Intel Parallel Studio Home
![]() |
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.
Please note this is an example, I realize that I could just fill it myself w/ this example.
Thanx again,
Atrus
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. C++ Syntax (Toggle Plain Text)
char *names[2]; names[0] = "Joe"; names[1] = "Billy"; names[2] = "Bob";
Thanx again,
Atrus
Should be very similar to adding items to a listbox. Check out code snippet:
http://www.daniweb.com/code/snippet79.html
http://www.daniweb.com/code/snippet79.html
May 'the Google' be with you!
•
•
•
•
Originally Posted by atrusmre
Got anything a little easier?
How about this:
C++ Syntax (Toggle Plain Text)
#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; }
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:
However at this point I get a "CComboBox : 'operator =' is unavailble"
C++ Syntax (Toggle Plain Text)
char *names[2]; names[0] = "Joe"; names[1] = "Billy"; names[2] = "Bob"; m_cPeople = names;
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.
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.
Simple, and effective. Thak you for helping me get on the right track guys.
C++ Syntax (Toggle Plain Text)
for (int i = 0, i <= 2, i++) m_cPeople.AddString( (LPCTSTR)names[i]);
Again, be careful with array sizes. This loop executes 3 times and tries to write from three strings.
•
•
•
•
Originally Posted by atrusmre
C++ Syntax (Toggle Plain Text)
for (int i = 0, i <= 2, i++) m_cPeople.AddString( (LPCTSTR)names[i]);
"One of the methods used by statists to destroy capitalism consists in establishing controls that tie a given industry hand and foot, making it unable to solve its problems, then declaring that freedom has failed and stronger controls are necessary." --Ayn Rand
![]() |
Similar Threads
- combo box (PHP)
- Want to use radio button or menu bar instead of combo box (Java)
- combo box (ASP)
- How do I limit text char in Combo box? (VB.NET)
- combo box help (VB.NET)
Other Threads in the C++ Forum
- Previous Thread: Can someone tell me what I am doing wrong?
- Next Thread: 2-D Arrays
| Thread Tools | Search this Thread |
api array beginner bitmap c++ c/c++ calculator char char* class classes code coding compile compiler console conversion count database delete desktop developer directshow dll download dynamic email encryption error file forms fstream function functions game givemetehcodez google graph gui homeworkhelper iamthwee ifstream input int integer java lib linkedlist linker linux loop looping loops map math matrix memory multiple news node number numbertoword output parameter pointer problem program programming project proxy python random read recursion recursive return rpg sorting string strings struct temperature template templates test text text-file tree unix url variable vector video visualstudio win32 windows winsock word wordfrequency wxwidgets






