如何在 MFC (VC++) 中将最后一个未使用的驱动器号设置为组合框?
Posted
技术标签:
【中文标题】如何在 MFC (VC++) 中将最后一个未使用的驱动器号设置为组合框?【英文标题】:How to set last Unused drive letter to Combobox in MFC (VC++)? 【发布时间】:2010-11-16 10:40:20 【问题描述】:如何在 MFC (VC++) 中为 Combobox 设置最后一个未使用的驱动器号? 我的代码是这样的:
TCHAR g_szDrvMsg[] = _T("A:\n");
int main(int argc, char* argv[])
ULONG uDriveMask = _getdrives();
if (uDriveMask == 0)
printf( "_getdrives() failed with failure code: %d\n",
GetLastError()); //So GetLastError retuns a sring or char*?
else
printf("The following logical drives are being used:\n");
while (uDriveMask)
if (!(uDriveMask & 1))
m_objCmbdrive.AddString(g_szDrvMsg);
++g_szDrvMsg[0];
uDriveMask >>= 1;
m_objCmbdrive.SetCurSel();
我应该将什么值传递给 SetCurSel 以按降序设置驱动器号。
此代码为我提供了系统中正在使用的所有驱动器号。 如何取出所有未使用的?
【问题讨论】:
【参考方案1】:要选择组合框中的最后一项,您可以:
m_objCmbdrive.SetCurSel(m_objCmbdrive.GetCount() - 1);
要按降序使用未使用的驱动器号填充组合框,请使用InsertString() 方法:
for (int i = 0; i < 26; ++i)
if (!(uDriveMask & 1))
m_objCmbdrive.InsertString(0, g_szDrvMsg);
++g_szDrvMsg[0];
uDriveMask >>= 1;
【讨论】:
谢谢。还有一件事我没有得到使用此代码的最后一个驱动器,即 Z:驱动器丢失,它仅将组合框填充到倒数第二个(X:在我的情况下)驱动器。 @Swapnil,那是因为您的退出条件while (uDriveMask)
无法区分“到达的最后一个驱动器”和“超过此点不再使用映射的驱动器”。我用解决该问题的for
循环更新了我的答案。以上是关于如何在 MFC (VC++) 中将最后一个未使用的驱动器号设置为组合框?的主要内容,如果未能解决你的问题,请参考以下文章