我对win32 api还不熟悉,需要帮助来理解GetLogicalDrives()函数是如何工作的。我正在尝试用所有未使用的可用驱动器填充cbs_dropdownlist。这是我目前所拥有的。我很感激你的帮助。

void FillListBox(HWND hWndDropMenu)
{
 DWORD drives = GetLogicalDrives();
 for (int i=0; i<26; i++)
 {
    SendMessage(hWndDropMenu, CB_ADDSTRING, 0, (LPARAM)drives);
 }
}

最佳答案

函数GetLogicalDrives返回可用逻辑驱动器的位掩码。以下是您的操作方法:

 DWORD drives = GetLogicalDrives();
 for (int i=0; i<26; i++)
 {
    if( !( drives & ( 1 << i ) ) )
    {
       TCHAR driveName[] = { TEXT('A') + i, TEXT(':'), TEXT('\\'), TEXT('\0') };
       SendMessage(hWndDropMenu, CB_ADDSTRING, 0, (LPARAM)driveName);
    }
 }

代码检查位掩码中的第i位是否未设置为1true

09-25 21:27