如何在 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++) 中将最后一个未使用的驱动器号设置为组合框?的主要内容,如果未能解决你的问题,请参考以下文章

VC MFC中如何制作无边框窗口

在 MFC VC++ 中未捕获 MouseWheel 事件

vc ++ MFC应用程序,错误LNK2019:未解析的外部符号

基于VC的MFC界面开发

如何在 vc++ mfc 中使用非静态方法创建线程

VC6 如何调用MFC类