C++ 如何在组合框中发送这些项目

C++ 如何在组合框中发送这些项目,c++,winapi,combobox,C++,Winapi,Combobox,我已经在我的程序中创建了一个组合框。我有一个名为add()的函数,它将一些文件添加到指定的驱动器 我在Google上搜索了如何获取计算机中存在的驱动器列表,发现如下: DWORD var1 = 100; WCHAR storeValue[100]; DWORD drives = GetLogicalDriveStrings(var1, storeValue); for (int i = 0;i < 100;i++) { return 0; } dwordvar1=100; WCH

我已经在我的程序中创建了一个组合框。我有一个名为
add()
的函数,它将一些文件添加到指定的驱动器

我在Google上搜索了如何获取计算机中存在的驱动器列表,发现如下:

DWORD var1 = 100;
WCHAR storeValue[100];
DWORD drives = GetLogicalDriveStrings(var1, storeValue);
for (int i = 0;i < 100;i++)
{
    return 0;
}
dwordvar1=100;
WCHAR存储值[100];
DWORD驱动器=GetLogicalDriveStrings(var1,storeValue);
对于(int i=0;i<100;i++)
{
返回0;
}
我想将计算机中的驱动器添加到组合框中,以便我的函数可以将文件添加到指定的驱动器中。我该怎么做?对于初学者来说,这是相当棘手的


我很清楚,当我们创建一些东西来浏览驱动器时,这会更容易,但我希望在我的组合框中这样做。

GetLogicalDriveStrings
使用双空终止字符串数组填充缓冲区。您可以像这样迭代,当“next”字符串的第一个字符为null时停止

wchar_t szDrives[MAX_PATH];
if (GetLogicalDriveStrings(MAX_PATH, szDrives))
{
    wchar_t* pDrive = szDrives;
    while (*pDrive)
    {
        // do something with pDrive

        // jump to next
        pDrive += wcslen(pDrive) + 1;
    }
}
现在,在您的情况下,“使用pDrive做点什么”可以将字符串添加到组合框中:

        SendMessage(hwndCombo, CB_ADDSTRING, 0, reinterpret_cast<LPARAM>(pDrive));
SendMessage(hwndCombo,CB_ADDSTRING,0,reinterpret_cast(pDrive));

GetLogicalDriveStrings()
“X:\”
格式返回每个驱动器,因此缓冲区将永远不需要超过((26*4)+1)=105个字符(
MAX\u PATH
为260),并且您可以使用
pDrive+=4
而不是
pDrive+=(wcslen(pDrive)+1)
,因为
wcslen()
始终为3。此外,
GetLogicalDriveStrings()
基于
TCHAR
,因此应该使用
TCHAR[]
缓冲区。而
CB_ADDSTRING
是Ansi还是Unicode取决于是使用
CreateWindow(Ex)A()
还是
CreateWindow(Ex)W()
。因此,对于
CB\u ADDSTRING
也可以使用
TCHAR[]
。如果您想显式地使用
wchar\u t
,您应该显式地使用
GetLogicalDriveStringsW()
CreateWindow(Ex)W()
来匹配。@RemyLebeau也很抱歉,但是TCHAR?认真地你的帐户被黑客攻击了吗?嘿,你展示了一个调用基于
TCHAR
的API的示例,所以你应该展示如何使用基于
TCHAR
的缓冲区。否则,请改为显示仅限Unicode的示例。@RemyLebeau我的示例仅限Unicode;否则它不会编译。