記得之前寫對話框時,按鈕直接有一個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控件照樣得不到消息。