SDI分割成了左右两个窗口:左边为CTreeCtrl, 右边为CListCtrl。
希望在CListCtrl的某一项被选中高亮的时候,MainFrame上的对应按钮(平时为灰色)才可用。也就是说, 如何实现doc-view SDI程序中doc对MainFrame上按钮状态的控制?比如说: 片段代码如下:
void CTempDoc::PeekAndServeMessages()
{
    MSG message;
    CMainFrame *pFrame = (CMainFrame *) AfxGetApp()->m_pMainWnd;    while (::PeekMessage(&message, pFrame->GetSafeHwnd(), 0, 0, PM_REMOVE))
    {
       ::TranslateMessage(&message);
       ::DispatchMessage(&message);
    }    
    while (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE))
    {
       ::TranslateMessage(&message);
       ::DispatchMessage(&message);
    }
}且,如何跟踪消息呀? 怎么跟不到??

解决方案 »

  1.   

    在ListView中响应该按钮的UPDATE_COMMAND_UI命令事件,根据ListView选项的状态,调用pCmdUI->Enable函数来控制按钮状态。
      

  2.   


    或者在相应的视图监测到选项变化时,向顶层框架(貌似是AfxGetApp()->GetMainWnd())发一个自定义消息或者WM_COMMAND,然后在这个消息里面处理。
      

  3.   

    最好在CMainFrame响应UPDATE_COMMAND_UI事件 
      

  4.   

    补充下: ToolBar是动态的,也就是说,当CTreeCtrl的不同项(并列的最高级别)被选中时,ToolBar呈现的按钮是不一样的。
    所以,要在doc内发送消息给MainFrame,而不是在CMainFrame内响应UPDATE_COMMAND_UI事件 。
      

  5.   

    在ListView中响应该按钮的UPDATE_COMMAND_UI命令事件,根据ListView选项的状态,调用pCmdUI->Enable函数来控制按钮状态。
      

  6.   


    void CTempView::OnClickXxxList(NMHDR* pNMHDR, LRESULT* pResult)
    {
        ((CMainFrame*)AfxGetMainWnd())->    ...                   /*这样子么? 没看到合适的函数啊*/
        *pResult = 0;
    }能否明示下?
      

  7.   

    tool-bar存不存在和响应事件消息有关系吗?
      

  8.   

    是在别人的代码上添加一个功能: 在ToolBar上添加一个按钮,且CListCtrl的item被选中高亮时按钮才有效。
    想用void CTempDoc::PeekAndServeMessages() 这一函数传递消息可以不? 或者别的办法?
      

  9.   

    不知道CTempDoc::PeekAndServeMessages()这个函数是干什么用的, 不同按钮状态写入一个结构体(或一个UINT变量,用不同的位bit指示按钮状态), 并保存在Doc中,
    然后,在CMainFrame中不同的COMMAND_UPDATE_UI事件中,去Doc中的这个结构体中取相应的的状态
      

  10.   

    ((CMainFrame*)AfxGetMainWnd())->GetControlBar()->OnUpdateCmdUI()
      

  11.   

    目前的办法是:
    ToolBar上的按钮ID:ID_EXTRA_BTN, 相应地,它的Command处理函数OnExtraBtn(); On_Update_CommandUI处理函数OnUpdateExtraBtn();
    在CMainFrame内定义个BOOL成员变量m_bDisableIcon。于是,
    void CMainFrame::OnExtraBtn()
    {
         m_bDisableIcon = TRUE;
    }void CMainFrame::OnUpdateExtraBtn(CCmdUI* pCmdUI)
    {
        pCmdUI->Enable(m_bDisableIcon);
    }总的来说,还不理想~