MFC基于对话框 创建工具栏 工具栏提示 窗口同步缩放 拦截主界面Enter按下 窗口过程 菜单工具栏按钮变灰
2010-08-17 10:47
645 查看
代码如下,工具栏上面按钮的个数可以根据资源视图进行调整,IDR_MAINTB为资源视图里的工具栏的ID,按钮文本可自行设定
工具栏提示代码如下:
窗口控件同步缩放:
拦截主界面Enter按下:
窗口过程:
按钮变灰:
修改App的名字,如调用AfxMessageBox(_T("..."))弹出的提示框上面的标题,是默认的App名字,如果想修改,可以在
App::InitInstance()里起始处调用this->m_pszAppName = _T("Name");来设置
//加载工具条 void CNJNCTimeSyncServerDlg::LoadAndDockToolBar() { if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_LIST, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINTB)) { TRACE0("未能创建工具栏/n"); return; // 未能创建 } /*******设置按钮文本******/ LPCTSTR lpText[3] = {_T("同步"), _T("修改"), _T("全选")}; int nButtonCount = m_wndToolBar.GetCount(); int nTextIndex = 0; for(int nIndex = 0; nIndex < nButtonCount; nIndex++) { if (m_wndToolBar.GetButtonStyle(nIndex) == TBBS_SEPARATOR) { continue; } m_wndToolBar.SetButtonText(nIndex, lpText[nTextIndex++]); } /******定位和显示工具条*****/ m_wndToolBar.ShowWindow(SW_SHOW); RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0); }
工具栏提示代码如下:
//工具栏提示 BOOL CNJNCTimeSyncServerDlg::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult) { ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW); // UNICODE消息 TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; CString strTipText; UINT nID = pNMHDR->idFrom; if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) || pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND)) { //idFrom为工具条的HWND nID = ::GetDlgCtrlID((HWND)nID); } if (nID != 0) //不为分隔符 { strTipText.LoadString(nID); strTipText = strTipText.Mid(strTipText.Find('/n',0)+1); #ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) { lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText)); } else { _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #else if (pNMHDR->code == TTN_NEEDTEXTA) { _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText)); } else { lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText)); } #endif *pResult = 0; // 使工具条提示窗口在最上面 ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOMOVE | SWP_NOOWNERZORDER); return TRUE; } return TRUE; }
窗口控件同步缩放:
//重新设置窗体上控件的尺寸 void CNJNCTimeSyncServerDlg::OnSize(UINT nType, int cx, int cy) { CDialog::OnSize(nType, cx, cy); // TODO: Add your message handler code here CRect winRect; GetClientRect(&winRect); //获取窗口区域 //Set Main List if (!m_wndToolBar) //客户端首次启动,尚未初始化完毕 { return; } /*********重定位工具栏********/ CRect toolBarRect; m_wndToolBar.GetClientRect(&toolBarRect); m_wndToolBar.MoveWindow(toolBarRect.left, toolBarRect.top, winRect.right, 25); /********重定位主列表*******/ CRect listRect; m_MainList.GetClientRect(&listRect); m_MainList.MoveWindow(0, 24, winRect.right, winRect.bottom - listRect.top); }
拦截主界面Enter按下:
//拦截主界面的Enter按下事件 BOOL CNJNCTimeSyncServerDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if (pMsg->message == WM_KEYDOWN) { if (pMsg->wParam == VK_ESCAPE) //Esc键不退出程序 { return TRUE; } if (pMsg->wParam == VK_RETURN) { return FALSE;//对话框内部控件可以接收到回车消息,返回true则不可以 } } return CDialog::PreTranslateMessage(pMsg); }
窗口过程:
LRESULT CNJNCTimeSyncServerDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_UPDATELIST: case WM_TIMER: ... } return CDialog::WindowProc(message, wParam, lParam); }
按钮变灰:
//多选时,修改备注按钮禁用 void CNJNCTimeSyncServerDlg::OnItemchangedMainlist(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here int selectCount = m_MainList.GetSelectedCount(); CToolBarCtrl &toolbarctrl=m_wndToolBar.GetToolBarCtrl(); CWnd *pMain = AfxGetMainWnd(); CMenu *pMenu = pMain->GetMenu(); if (selectCount > 1) { //按钮变灰,菜单也要变灰 toolbarctrl.SetState(IDTB_CHANGE_REMARK, TBSTATE_INDETERMINATE); pMenu->EnableMenuItem(IDM_CHANGE_REMARK, MF_GRAYED); //toolbarctrl.SetState(IDTB_CHANGE_REMARK, TBSTATE_ENABLED); } else { toolbarctrl.SetState(IDTB_CHANGE_REMARK, TBSTATE_ENABLED); pMenu->EnableMenuItem(IDM_CHANGE_REMARK, MF_ENABLED); } *pResult = 0; }
修改App的名字,如调用AfxMessageBox(_T("..."))弹出的提示框上面的标题,是默认的App名字,如果想修改,可以在
App::InitInstance()里起始处调用this->m_pszAppName = _T("Name");来设置
相关文章推荐
- mfc 为对话框工程添加工具条时,实现工具条的按下状态与菜单标记的同步实例
- MFC基于对话框上插入MENU菜单栏并点击菜单弹出新窗口
- MFC之在对话框创建菜单、工具栏、状态栏
- 在基于对话框的MFC中添加工具栏以及工具栏提示信息并改变图标支持256色
- MFC基于对话框的菜单栏,工具栏和状态栏的创建
- MFC应用程序中处理消息,创建窗口的过程,关闭窗口(非模态窗口),打开模式对话框等的函数调用顺序 .
- VS2010 MFC中在对话框上添加工具栏以及工具栏提示信息并改变图标支持256色
- MFC动态创建对话框中的按钮控件并创建其响应消息
- .隐藏基于对话框的MFC应用程序窗口的方法
- 通过CAA在CATIA中创建自己的工具栏按钮和菜单
- MFC对话框创建和销毁窗口时,函数的调用顺序
- MFC基于对话框最小化到托盘,并鼠标右键添加菜单以及对应菜单功能
- MFC提示对话框默认在指定的按钮上
- 基于 SailingEase WinForm Framework 开发客户端程序(3:实现菜单/工具栏按钮的解耦及状态控制)
- MFC对话框控件和背景图片自适应窗口最大化和拉伸缩放的实现
- MFC 基于对话框的工具栏加载图标问题
- 关于在MFC中实用在基于对话框窗口上面绘制折线的实现方法
- vs2010 MFC 点击对话框按钮无法创建响应函数
- 创建动态工具栏并设置工具栏按钮提示
- MFC窗口创建过程