1// Windows/Control/ComboBox.cpp 2 3#include "StdAfx.h" 4 5#ifndef _UNICODE 6#include "../../Common/StringConvert.h" 7#endif 8 9#include "ComboBox.h" 10 11#ifndef _UNICODE 12extern bool g_IsNT; 13#endif 14 15namespace NWindows { 16namespace NControl { 17 18LRESULT CComboBox::GetLBText(int index, CSysString &s) 19{ 20 s.Empty(); 21 LRESULT len = GetLBTextLen(index); // length, excluding the terminating null character 22 if (len == CB_ERR) 23 return len; 24 LRESULT len2 = GetLBText(index, s.GetBuf((unsigned)len)); 25 if (len2 == CB_ERR) 26 return len; 27 if (len > len2) 28 len = len2; 29 s.ReleaseBuf_CalcLen((unsigned)len); 30 return len; 31} 32 33#ifndef _UNICODE 34LRESULT CComboBox::AddString(LPCWSTR s) 35{ 36 if (g_IsNT) 37 return SendMsgW(CB_ADDSTRING, 0, (LPARAM)s); 38 return AddString(GetSystemString(s)); 39} 40 41LRESULT CComboBox::GetLBText(int index, UString &s) 42{ 43 s.Empty(); 44 if (g_IsNT) 45 { 46 LRESULT len = SendMsgW(CB_GETLBTEXTLEN, MY_int_TO_WPARAM(index), 0); 47 if (len == CB_ERR) 48 return len; 49 LRESULT len2 = SendMsgW(CB_GETLBTEXT, MY_int_TO_WPARAM(index), (LPARAM)s.GetBuf((unsigned)len)); 50 if (len2 == CB_ERR) 51 return len; 52 if (len > len2) 53 len = len2; 54 s.ReleaseBuf_CalcLen((unsigned)len); 55 return len; 56 } 57 AString sa; 58 const LRESULT len = GetLBText(index, sa); 59 if (len == CB_ERR) 60 return len; 61 s = GetUnicodeString(sa); 62 return (LRESULT)s.Len(); 63} 64#endif 65 66}} 67