Getting the Combo Box selected item using Win32 API.
-
If he wants to use of numeric values
WhiteSky
Ok, you was refering to extracting numbers.
Prasad Notifier using ATL | Operator new[],delete[][^]
-
Thanks Prasad Code is working. Thanks for taking some time for me and helping me. In yr code 1st line was enough for me
int nIndx =::SendMessage(hCombo,CB_GETCURSEL,0,0);
since in the combo box I have values from 0,1,2,3,4,5 and so on … so as I get the Index number value will be the same as the CB content. I did not know about the CB index. Thank you very much.:)Suresh H wrote:
since in the combo box I have values from 0,1,2,3,4,5 and so on … so as I get the Index number value will be the same as the CB content.
Seems very strange logic. But, use
CB_GETLBTEXT
message, as it will not be the case always.Prasad Notifier using ATL | Operator new[],delete[][^]
-
Suresh H wrote:
since in the combo box I have values from 0,1,2,3,4,5 and so on … so as I get the Index number value will be the same as the CB content.
Seems very strange logic. But, use
CB_GETLBTEXT
message, as it will not be the case always.Prasad Notifier using ATL | Operator new[],delete[][^]
-
Ok, you was refering to extracting numbers.
Prasad Notifier using ATL | Operator new[],delete[][^]
And also one other thing if he wants to use CB_GETCURSEL(return values) for works on his programs(not for combobox)its not good idea because it returns -1,0,1,...but if he has values like 100,200,300 on his combobox... return values of CB_GETCURSEL not helpfuls ;)
WhiteSky
-
Thanks WhiteSky for the Response, yr info is also very use full for me. I will keep a note of that.
Thank you ;)
WhiteSky
-
And also one other thing if he wants to use CB_GETCURSEL(return values) for works on his programs(not for combobox)its not good idea because it returns -1,0,1,...but if he has values like 100,200,300 on his combobox... return values of CB_GETCURSEL not helpfuls ;)
WhiteSky
WhiteSky wrote:
CB_GETCURSEL(return values) for works on his programs(not for combobox)
:confused:
WhiteSky wrote:
its not good idea because it returns -1,0,1,...but if he has values like 100,200,300 on his combobox... return values of CB_GETCURSEL not helpfuls
I'm really not getting , what you are trying to say?
Prasad Notifier using ATL | Operator new[],delete[][^]
-
WhiteSky wrote:
CB_GETCURSEL(return values) for works on his programs(not for combobox)
:confused:
WhiteSky wrote:
its not good idea because it returns -1,0,1,...but if he has values like 100,200,300 on his combobox... return values of CB_GETCURSEL not helpfuls
I'm really not getting , what you are trying to say?
Prasad Notifier using ATL | Operator new[],delete[][^]
I said its better he uses of value on combobox ;)
WhiteSky
-
I said its better he uses of value on combobox ;)
WhiteSky
Prasad Notifier using ATL | Operator new[],delete[][^]
-
This code should suffice,
int nIndx =::SendMessage(hCombo,CB_GETCURSEL,0,0);
TCHAR buff[100];
::SendMessage(h,CB_GETLBTEXT,(WPARAM)nIndx,(LPARAM)buff);
//buff will contain text returnedPrasad Notifier using ATL | Operator new[],delete[][^]
For CB_GETLBTEXT, MSDn says: lParam Pointer to the buffer that receives the string. The buffer must have sufficient space for the string and a terminating null character. With your 100 TCHARS you might or might not be ok. MSDN gives the solution in the next sentence: You can send a CB_GETLBTEXTLEN message prior to the CB_GETLBTEXT message to retrieve the length, in TCHARs, of the string. So, the code-snippet would better be:
int nIndx =::SendMessage(hCombo,CB_GETCURSEL,0,0);
const LRESULT nSize = ::SendMessage(hCombo, CB_GETLBTEXTLEN, (WPARAM)nIndx, 0);
TCHAR buff[nSize+1];
::SendMessage(h,CB_GETLBTEXT,(WPARAM)nIndx,(LPARAM)buff);
//buff will contain text returned
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation." -- Caius Petronius, Roman Consul, 66 A.D.
-
For CB_GETLBTEXT, MSDn says: lParam Pointer to the buffer that receives the string. The buffer must have sufficient space for the string and a terminating null character. With your 100 TCHARS you might or might not be ok. MSDN gives the solution in the next sentence: You can send a CB_GETLBTEXTLEN message prior to the CB_GETLBTEXT message to retrieve the length, in TCHARs, of the string. So, the code-snippet would better be:
int nIndx =::SendMessage(hCombo,CB_GETCURSEL,0,0);
const LRESULT nSize = ::SendMessage(hCombo, CB_GETLBTEXTLEN, (WPARAM)nIndx, 0);
TCHAR buff[nSize+1];
::SendMessage(h,CB_GETLBTEXT,(WPARAM)nIndx,(LPARAM)buff);
//buff will contain text returned
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation." -- Caius Petronius, Roman Consul, 66 A.D.
jhwurmbach wrote:
lParam Pointer to the buffer that receives the string. The buffer must have sufficient space for the string and a terminating null character. With your 100 TCHARS you might or might not be ok.
True, It is just a quick fix.
jhwurmbach wrote:
TCHAR buff[nSize+1];::SendMessage(h,CB_GETLBTEXT,(WPARAM)nIndx,(LPARAM)buff);//buff will contain text returned
Again, small correction here, need to allocate memory on heap.
TCHAR \*buff = new TCHAR\[nIndx+1\]; ::SendMessage(hCombo,CB\_GETLBTEXT,(WPARAM)0,(LPARAM)buff); //use delete \[\] buff; after use
Prasad Notifier using ATL | Operator new[],delete[][^]
-
jhwurmbach wrote:
lParam Pointer to the buffer that receives the string. The buffer must have sufficient space for the string and a terminating null character. With your 100 TCHARS you might or might not be ok.
True, It is just a quick fix.
jhwurmbach wrote:
TCHAR buff[nSize+1];::SendMessage(h,CB_GETLBTEXT,(WPARAM)nIndx,(LPARAM)buff);//buff will contain text returned
Again, small correction here, need to allocate memory on heap.
TCHAR \*buff = new TCHAR\[nIndx+1\]; ::SendMessage(hCombo,CB\_GETLBTEXT,(WPARAM)0,(LPARAM)buff); //use delete \[\] buff; after use
Prasad Notifier using ATL | Operator new[],delete[][^]
prasad_som wrote:
Again, small correction here,
In the end it doesn't pay to cut short on testing... :-O Thanks!
"We trained hard, but it seemed that every time we were beginning to form up into teams we would be reorganised. I was to learn later in life that we tend to meet any new situation by reorganising: and a wonderful method it can be for creating the illusion of progress, while producing confusion, inefficiency and demoralisation." -- Caius Petronius, Roman Consul, 66 A.D.