控件自定义消息响应
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了控件自定义消息响应相关的知识,希望对你有一定的参考价值。
如何实现控件自定义消息的响应。
①:响应按钮的右键单击事件。
1> 向工程当中添加一个派生自CButton类的子类CMyButton;
2> 为按钮绑定一个CMyButton类型的控件类型变量;
3> 响应CMyButton类的你想响应的消息;
4> 填写响应消息代码
5> 界面实现
② 响应Static控件的双击消息
1>派生子类
2>更改Static默认ID
3>更改Static属性Notify为Ture
4>编辑消息响应代码
③、自定义编辑框控件只读、颜色不变灰。
1>派生子类
2>响应编辑框输入消息,获得焦点消息,按键消息。
3>实现代码
1 BOOL CMyROEdit::PreTranslateMessage(MSG* pMsg) 2 { 3 if ( pMsg->message == WM_KEYDOWN ){ 4 if ( ( ( pMsg->wParam == ‘c‘ ) || ( pMsg->wParam == ‘C‘ ) ) && (GetKeyState( VK_CONTROL) < 0) ){ 5 return CEdit::PreTranslateMessage(pMsg); 6 }else{ 7 return TRUE; 8 } 9 } 10 if ( pMsg->message == WM_RBUTTONDBLCLK || pMsg->message == WM_RBUTTONDOWN || pMsg->message == WM_RBUTTONUP){ 11 return TRUE; 12 } 13 14 return CEdit::PreTranslateMessage(pMsg); 15 } 16 17 void CMyROEdit::OnEnSetfocus() 18 { 19 HideCaret(); 20 }
④ “逃跑”按钮的实现
1>派生子类
2>响应鼠标移动消息
3>实现代码
1 void CMoveButton::OnMouseMove(UINT nFlags, CPoint point) 2 { 3 // TODO: Add your message handler code here and/or call default 4 CWnd *pParent = GetParent(); 5 CRect parentRect, mRect; 6 pParent->GetClientRect(&parentRect); 7 GetClientRect(&mRect); 8 9 CRect dstRect; 10 int randX = 0, randY = 0; 11 CPoint pt; 12 GetCursorPos(&pt); 13 ::ScreenToClient(pParent->GetSafeHwnd(), &pt); 14 15 srand((unsigned)time(0)); 16 do{ 17 int maxX = parentRect.right-mRect.Width(); 18 int minX = parentRect.left; 19 randX = (rand()%(maxX-minX))+minX; 20 21 int maxY = parentRect.bottom-mRect.Height(); 22 int minY = parentRect.top; 23 randY = (rand()%(maxY-minY))+minY; 24 dstRect.SetRect(randX, randY, randX+mRect.Width(), randY+mRect.Height()); 25 }while (dstRect.PtInRect(pt)); 26 27 //MoveWindow(dstRect); 28 SetWindowPos(NULL, randX, randY, 0, 0, SWP_NOZORDER|SWP_NOSIZE); 29 30 CButton::OnMouseMove(nFlags, point); 31 }
备注:具体函数信息MSDN。
以上是关于控件自定义消息响应的主要内容,如果未能解决你的问题,请参考以下文章