GetLogicalDrives() for-Schleife
Ich bin neu in der win32-api und Hilfe brauchen, versuchen zu verstehen, wie die GetLogicalDrives () - Funktion funktioniert. Ich versuche, füllen Sie eine cbs_dropdownlist, bei der alle verfügbaren Laufwerke, die nicht in Gebrauch sind. hier ist was ich habe, so weit. Ich würde jede Hilfe zu schätzen wissen.
void FillListBox(HWND hWndDropMenu)
{
DWORD drives = GetLogicalDrives();
for (int i=0; i<26; i++)
{
SendMessage(hWndDropMenu, CB_ADDSTRING, 0, (LPARAM)drives);
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Funktion
GetLogicalDrives
gibt eine Bitmaske logischen Laufwerke zur Verfügung. Hier ist, wie Sie es tun würde:Den code überprüft, ob die i-TEN bit in der Bitmaske ist nicht eingestellt
1
odertrue
.GetLogicalDrives()
gibt eine Bitmaske, die enthält eine null, wenn ein Laufwerk verfügbar ist. Ich Auffüllen möchten eine dropdownlist nur die Buchstaben nicht in Gebrauch ist. TutGetLogicalDriveStrings()
Gegenzug, alle Laufwerke, auch wenn Sie in Verwendung sind?CHAR
fürWCHAR
und jedes vorkommen von'?'
fürL'?'
. Verdammt jene Windows Makros, die nicht zu fangen, die einfachsten Fehler...drives
alsconst
, aber das ist eine stilistische Sache. Mein Stil in C++ ist die Verwendungconst
wenn absolut möglich.)GetLogicalDrives
gibt eine Bitmaske und zu überprüfen, müssen Sie die Verwendung von bitweisen Operatoren. Um zu sehen, ob Laufwerk A: ist im Einsatz:Wenn Laufwerk nicht verfügbar ist, wird
GetLogicalDrives() & 1
ergeben würde0
und die Bedingung fehlschlagen würde.Überprüfen Sie die nächste Festplatte, die Sie verwenden müssen das nächste Vielfache von 2,
GetLogicalDrives() & 2
,GetLogicalDrives() & 4
und so weiter.Könnten Sie
GetLogicalDriveStrings
aber dies gibt den inversen, was Sie wollen, alle verwendeten logischen Laufwerke.Ich würde eine Tabelle erstellen, statt, und der index in der:
Dann deine Schleife könnte sein: