GetLogicalDrives()for循环

ary*_*ard 0 c c++ winapi

我是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);
 }
}
Run Code Online (Sandbox Code Playgroud)

K-b*_*llo 9

该函数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);
    }
 }
Run Code Online (Sandbox Code Playgroud)

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