英特尔|一个超时上下文菜单的实现

英特尔|一个超时上下文菜单的实现

文章图片


和之前的超时对话框系列文章颇为类似 , 我们可以依葫芦画瓢实现一个超时上下文菜单 , 实现的手法更加简单一些 。 具体来说 , 我们使用了一个Windows消息 WM_CANCELMODE来关闭上下文菜单 。
例子代码
在显示上下文菜单之前 , 我们创建了一个定时器 。 (这里有一个小细节 , 我们使用了线程定时器 , 以为你我们并未拥有任何窗口句柄 , 因此我们不知道应该使用哪个定时器ID)
如果定时器触发了 , 则我们通过定时器回调向我们自身发送WM_CANCELMODE消息来取消上下文菜单 。 和就模拟了用户取消菜单的场景 , 不管是点击了ESC按键 , 还是在菜单外点击 。
当用户选择了某个菜单项目或者定时器触发的时候 , TrackPopupMenuEx函数会立即返回 , 然后我们会在这个时间点销毁之前创建的定时器 , 以防止资源泄露 。 嗯 , 完美!
总结本文适合于无人值守的应用 , 如果有人在电脑前 , 还是不要设计这种定时关闭的菜单 , 除非用户真的不在意 。
最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《A timed context menu》
【英特尔|一个超时上下文菜单的实现】