dialog添加菜单状态栏.doc
文本预览下载声明
1,添加菜单
有多种方法
(1:在resource View中选中对话框属性的 menu 属性
(2:CMenu??? m_Menu;
?????? m_Menu.LoadMenu(IDR_MAIN_MENU);??????? SetMenu(m_Menu);
?????? 取消菜单 SetMenu(NULL);
2,添加状态栏
在头文件添加 /** 状态栏*/ CStatusBar m_wndStatusBar;
??
。CPP文件中添加
/** 状态栏*/ if (!m_wndStatusBar.Create(this) ||??????? !m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT))??????? ){?? TRACE0(Failed to create status bar\n);?? return -1;????? // fail to create}
3.WM_MENUSELECT消息
???? 这样手动添加的状态栏,无法接收WM_MENUSELECT消息,所以我们要自己添加
ON_WM_MENUSELECT()
响应的消息函数
/*** 菜单栏选择 */void CFilePlayerDlg::OnMenuSelect(UINT nItemID, UINT nFlags, HMENU hSystemMenu){CString sFileName;if(nItemID == AFX_IDS_IDLEMESSAGE){?? sFileName = L就绪;?? SendMessage(WM_SETMESSAGESTRING, (WPARAM)0, (LPARAM)(LPCTSTR)sFileName);?? return ;}if(nFlags MF_SEPARATOR)?? return ;if(nFlags (MF_SYSMENU | MF_POPUP))?? return ;
CString?? strStatusText;?? strStatusText.LoadString( nItemID);???
m_wndStatusBar.SetPaneText(0, strStatusText);//
// SendMessage(WM_SETMESSAGESTRING, (WPARAM)0, (LPARAM)(LPCTSTR)strStatusText);
return ;}
这样就获得了菜单的提示内容,m_wndStatusBar.SetPaneText(0, strStatusText); //将菜单提示显示在状态栏第一个窗格。当然自己可以指定其它窗格,
如果用 SendMessage(WM_SETMESSAGESTRING, (WPARAM)0, (LPARAM)(LPCTSTR)strStatusText);
发送 WM_SETMESSAGESTRING消息也可实现,
需要自己添加该消息的响应函数
如下:
ON_MESSAGE(WM_SETMESSAGESTRING, OnSetMessageString) // 消息宏
消息处理函数
LRESULT CFilePlayerDlg::OnSetMessageString(WPARAM wParam, LPARAM lParam){LPCTSTR lpsz = NULL;CString strMessage;
if (lParam != 0){?? ASSERT(wParam == 0);??? // cant have both an ID and a string?? lpsz = (LPCTSTR)lParam; // set an explicit string}else if (wParam != 0){?? {??? LPTSTR lpsz = strMessage.GetBuffer(255);??? if (AfxLoadString(wParam, lpsz) != 0)??? {???? lpsz = _tcschr(lpsz, _T(\n));???? if (lpsz != NULL)????? *lpsz = \0;??? }??? else??? {????? TRACE1(Warning: no message line prompt for ID 0x%04X.\n, wParam);??? }??? strMessage.ReleaseBuffer();???? }?? lpsz = strMessage;}m_wn
显示全部