记得之前写对话框时,按钮直接有一个tips属性,能够添加默认值,不记得是C#仍是啥了,今天突然想给几个按钮添加提示信息,就捣鼓了一下。数组
头文件中建立CToolTipCtrl变量,而后在初始化时激活使用:框架
CToolTipCtrl m_iToolTips;
BOOL CTestDXFDlg::OnInitDialog() { CDialog::OnInitDialog(); // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操做 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 EnableToolTips(TRUE); m_iToolTips.Create(this); m_iToolTips.Activate(TRUE); m_iToolTips.SetTipTextColor(RGB(0,255,0)); m_iToolTips.SetTipBkColor(RGB(255,0,0)); m_iToolTips.SetDelayTime(150); m_iToolTips.AddTool(GetDlgItem(IDC_BTN_ZOOM_IN), "放大"); m_iToolTips.AddTool(GetDlgItem(IDC_BTN_ZOOM_OUT), "缩小"); m_iToolTips.AddTool(GetDlgItem(IDC_BTN_ZOOM_EXTENT), "适应"); return TRUE; // 除非将焦点设置到控件,不然返回 TRUE }
重载PreTranslateMessage系统消息函数函数
BOOL CTestDXFDlg::PreTranslateMessage(MSG* pMsg) { switch(pMsg->message) { case WM_MOUSEMOVE: m_iToolTips.RelayEvent(pMsg); break; default: break; } return CDialog::PreTranslateMessage(pMsg); }
手动和自动添加该函数都可(vs2008自动添加PreTranslateMessage函数)字体
而后遇到问题:不能设置tip的背景颜色和字体颜色,查询后发现,在xp系统下是正常的,在xp以后的系统均出现这个问题,注释掉stdafx.h中相关代码又出现界面其余显示问题。(注释代码详情)this
WIN32消息传递方式spa
消息处理函数.net
PreTranslateMessage函数表示在消息处理(TranslateMessage()和DispatchMessage()等)前所做的操做,若是函数返回值为TRUE,那么消息处理即终止,不会调用TranslateMessage()和DispatchMessage()来翻译和分发消息给相应的窗口;若返回值为FALSE,才会调用翻译和分发消息函数。翻译
注:code
屏蔽消息blog
直接在函数中屏蔽回车和ESC的消息
BOOL CDemoDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE)
return TRUE; if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
return TRUE; else return CDialog::PreTranslateMessage(pMsg); }
屏蔽并继续传递消息
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) //若是消息类型为WM_KEYDOWN而且用户按下的是回车 return FALSE; //不翻译消息,直接将消息传递下去。具体可查MSDN。注意,这里返回值不能为TRUE,TRUE的意思是翻译消息后退出消息传递,如此一来虽然也能避开对话框默认处理,可是会退出消息传递,这样EDIT控件照样得不到消息。