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
12 extern bool g_IsNT;
13 #endif
14 
15 namespace NWindows {
16 namespace NControl {
17 
GetLBText(int index,CSysString & s)18 LRESULT 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
AddString(LPCWSTR s)34 LRESULT CComboBox::AddString(LPCWSTR s)
35 {
36   if (g_IsNT)
37     return SendMsgW(CB_ADDSTRING, 0, (LPARAM)s);
38   return AddString(GetSystemString(s));
39 }
40 
GetLBText(int index,UString & s)41 LRESULT CComboBox::GetLBText(int index, UString &s)
42 {
43   s.Empty();
44   if (g_IsNT)
45   {
46     LRESULT len = SendMsgW(CB_GETLBTEXTLEN, index, 0);
47     if (len == CB_ERR)
48       return len;
49     LRESULT len2 = SendMsgW(CB_GETLBTEXT, 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   LRESULT len = GetLBText(index, sa);
59   if (len == CB_ERR)
60     return len;
61   s = GetUnicodeString(sa);
62   return s.Len();
63 }
64 #endif
65 
66 }}
67