控件自定义消息响应

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。

以上是关于控件自定义消息响应的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段10—— 数组的响应式方法

SendMessage发送自定义消息及消息响应(VC版)

c# 为自定义控件添加鼠标双击事件

MFC中如何让静态控件响应鼠标移动的消息?

MFC树形控件响应

vs2013怎么用mfc添加菜单项消息响应函数