请教高手,怎样在MFC的static控件上添加鼠标右击事件?

huangzi103 2013-01-17 04:48:39
在下初学MFC,我做了桌面时钟的小程序,然后把对话框上的Title bar隐藏了,然后把时钟背景透明了,但是这样做后,用鼠标右击时钟,没有右键菜单,只能通过Esc才能把应用程序关闭。我想通过右击时钟显示右键菜单来关闭,但是试了好多方法,还是不行。请各位高手不吝赐教,在下谢过各位了
...全文
481 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
逍遥子_ 2013-01-19
  • 打赏
  • 举报
回复
Static控件的ID是一样的,如果你要对它进行特殊操作,则需要修改其ID
warlock0524 2013-01-18
  • 打赏
  • 举报
回复
标准的static控件是不响应鼠标单击的,要先为控件添加Notify属性,才能响应单击消息
tsocpp 2013-01-18
  • 打赏
  • 举报
回复
相应Notify消息就可以了
lijianli9 2013-01-18
  • 打赏
  • 举报
回复
自定义控件类继承CStatic,重写 void CMyStatic::OnRButtonDown(UINT nFlags, CPoint point) { CStatic::OnRButtonDown(nFlags, point); CMenu* menu_bar = AfxGetMainWnd()->GetMenu(); CMenu* file_menu = menu_bar->GetSubMenu(0); ASSERT(file_menu); file_menu->TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON, point.x, point.y, this); }
  • 打赏
  • 举报
回复
你也可以自己手动给他添加点击事件的。你去看一下,怎么自定义消息吧。 这样可能会有用,希望以你有帮助呀!
孤客天涯 2013-01-17
  • 打赏
  • 举报
回复
CStatic控件本来是作为标签类型的控件,如果需要响应消息,你需把控件属性Notify勾上
coohai 2013-01-17
  • 打赏
  • 举报
回复
先要更改那个static的ID, 然后才能处理它的消息.
昨夜无风 2013-01-17
  • 打赏
  • 举报
回复
为Static添加SS_NOTIFY属性
huangzi103 2013-01-17
  • 打赏
  • 举报
回复
引用 5 楼 zhoujielunzhimi 的回复:
引用 4 楼 huangzi103 的回复: 引用 3 楼 zhoujielunzhimi 的回复:引用 2 楼 huangzi103 的回复: 我使用于这个方法,但是它好像只作用在对话框上,但是我们把对话框都隐藏了,所以只剩下控件了。点这个控件还是出不来右键菜单。 你是怎么把对话框透明的? 还有你说只剩下控件,是指这个clock? 原来的程序结果是: 通过以下代码透明化的。然后就只剩……
是在对话框中拖入的一个Static控件。然后通过映射变量来实现的。
sumos 2013-01-17
  • 打赏
  • 举报
回复
引用 4 楼 huangzi103 的回复:
引用 3 楼 zhoujielunzhimi 的回复:引用 2 楼 huangzi103 的回复: 我使用于这个方法,但是它好像只作用在对话框上,但是我们把对话框都隐藏了,所以只剩下控件了。点这个控件还是出不来右键菜单。 你是怎么把对话框透明的? 还有你说只剩下控件,是指这个clock? 原来的程序结果是: 通过以下代码透明化的。然后就只剩下这个表盘了。 ty……
你这个表盘是什么控件?
huangzi103 2013-01-17
  • 打赏
  • 举报
回复
引用 3 楼 zhoujielunzhimi 的回复:
引用 2 楼 huangzi103 的回复:
我使用于这个方法,但是它好像只作用在对话框上,但是我们把对话框都隐藏了,所以只剩下控件了。点这个控件还是出不来右键菜单。
你是怎么把对话框透明的?
还有你说只剩下控件,是指这个clock?

原来的程序结果是:
通过以下代码透明化的。然后就只剩下这个表盘了。
typedef BOOL (WINAPI *lpfnSetLayeredWindowAttributes)(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
lpfnSetLayeredWindowAttributes SetLayeredWindowAttributes;

//设置成边缘透明

COLORREF maskColor=RGB(0,0,0);

HMODULE hUser32 = GetModuleHandle("user32.dll"); //加载动态链接库
SetLayeredWindowAttributes = (lpfnSetLayeredWindowAttributes)GetProcAddress(hUser32,"SetLayeredWindowAttributes");

//取得SetLayeredWindowAttributes函数指针
//为窗口加入WS_EX_LAYERED扩展属性
SetWindowLong(this->GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(GetSafeHwnd(), GWL_EXSTYLE)^0x00080000);

//调用SetLayeredWinowAttributes函数
SetLayeredWindowAttributes(this->GetSafeHwnd(), maskColor, 192, 0x00000001);

FreeLibrary(hUser32); //释放动态链接库
sumos 2013-01-17
  • 打赏
  • 举报
回复
引用 2 楼 huangzi103 的回复:
我使用于这个方法,但是它好像只作用在对话框上,但是我们把对话框都隐藏了,所以只剩下控件了。点这个控件还是出不来右键菜单。
你是怎么把对话框透明的? 还有你说只剩下控件,是指这个clock?
huangzi103 2013-01-17
  • 打赏
  • 举报
回复
我使用于这个方法,但是它好像只作用在对话框上,但是我们把对话框都隐藏了,所以只剩下控件了。点这个控件还是出不来右键菜单。
jimette 2013-01-17
  • 打赏
  • 举报
回复
oncontextmenu!

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧