1. 一个单文档程序,添加了一个DialogBar,里面有若干个Button,添加了消息映射之后,就无法使其失效,即
  CDialogbar m_wndDlgBar;
  CWnd * pWnd = m_wndDlgBar.GetDlgItem(IDC_BUTTON1);
  pWnd->EnableWindows(FALSE);
 也没有用,请问如何禁止一个Button?(已经添加了消息映射)2.调用SHBrowseForFolder,选定一个路径,按“确定”,如何在程序里获得绝对路径而不仅仅是显示名(DiaplayName)?两个问题,请大家不啬赐教。

解决方案 »

  1.   

    1. DialogBar 按钮的禁止是 UpdateCmdUI 机制控制的,重载对应 Button ID 的 OnUpdateCmdUI ,然后按照类似处理 Menu 的方法处理2. SHBrowseForFolder 返回一个 LPITEMIDLIST ,你可以调用 SHGetPathFromIDList 得到这个 LPITEMIDLIST 对应的路径,以下是忽略了错误处理的代码IMalloc * pMalloc = NULL;
    SHGetMalloc(&pMalloc);LPITEMIDLIST pidl = SHBrowseForFolder(...);TCHAT tszPath[MAX_PATH];
    SHGetPathFromIDList(pidl, tszPath);pMalloc->Free(pidl);
    pMalloc->Release();
      

  2.   

    可是在DialogBar里没有UpdateCmdUI机制,需要的话也必须手动添加,
    那样的话在一个Button里禁止另一个Button该如何实现?给出提示,文章,代码都可以。谢谢各位了。
      

  3.   

    在 CMainFrame 里重载 Button 的 OnUpdateCmdUI ,在里面根据某个状态变量 Enable/Disable;在另一处改变此状态变量的值,再调用 pDialogBar->UpdateDialogControls(AfxGetMainWnd(), TRUE); 就可以改变 Button 的状态。