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);
}
}且,如何跟踪消息呀? 怎么跟不到??
希望在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);
}
}且,如何跟踪消息呀? 怎么跟不到??
或者在相应的视图监测到选项变化时,向顶层框架(貌似是AfxGetApp()->GetMainWnd())发一个自定义消息或者WM_COMMAND,然后在这个消息里面处理。
所以,要在doc内发送消息给MainFrame,而不是在CMainFrame内响应UPDATE_COMMAND_UI事件 。
void CTempView::OnClickXxxList(NMHDR* pNMHDR, LRESULT* pResult)
{
((CMainFrame*)AfxGetMainWnd())-> ... /*这样子么? 没看到合适的函数啊*/
*pResult = 0;
}能否明示下?
想用void CTempDoc::PeekAndServeMessages() 这一函数传递消息可以不? 或者别的办法?
然后,在CMainFrame中不同的COMMAND_UPDATE_UI事件中,去Doc中的这个结构体中取相应的的状态
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);
}总的来说,还不理想~