[win32][c++]如何覆盖winAPI控件自带的加速键
来源:互联网 发布:什么是淘宝达人 编辑:程序博客网 时间:2024/06/04 19:41
在win32设计学习中,用edit控件实现简易文本编辑器,在设置加速键时遇到了问题,在edit编辑框获得焦点时,自定义加速键表不起作用(按下加速键后无错误消息提示音,
说明程序识别了加速键,但没有进入WM_COMMAND执行同时edit本身自带的ctrl+c等加速键也失效。经过查阅资料与寻找,发现是下面这个接收消息的函数的问题。
while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }
首先我们知道,如果在加速键表中定义好加速键,TranslateAccelerator的作用是对照加速键表,将相关的按键消息翻译成WM_COMMAND和WM_SYSCOMMAND消息。
并直接发往窗口,而不在消息队列中等待。而此函数是给主窗口使用的,不能识别控件,所以当在控件中按下自定义的加速键时,该函数无法发送对应消息给控件句柄,所以什么事也不做。
下面要将代码修改为:
while (GetMessage(&msg, nullptr, 0, 0)) { if (!TranslateAccelerator(hWnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }
也就是把消息句柄直接设置成主窗口句柄,当在窗体中按下加速键,该函数会分发消息给窗体处理,可以在全局使用。
0 0
- [win32][c++]如何覆盖winAPI控件自带的加速键
- 如何调用Windows自带的配色控件
- 如何获得WIN32 窗体中控件的样式属性(C#)
- win32线程池代码(WinApi/C++)
- win32线程池代码(WinApi/C++)(转)
- win32线程池代码(WinApi/C++)
- win32线程池代码(WinApi/C++) .
- win32线程池代码(WinApi/C++)
- 如何修改Delphi自带控件
- 缓冲驱动中自带的加速功能
- Win32汇编--如何使用资源 [菜单和加速键]
- 苹果自带样式覆盖
- delphi XE2自带的皮肤控件
- android 调用系统自带的控件
- uitableView 自带的刷新控件
- Android自带控件ExpandableListView的使用
- Chronometer android自带的倒计时控件
- 自带刷新的SwipeRefreshLayout控件
- 欢迎使用CSDN-markdown编辑器
- viewpager与radiogroup联动的例子
- ViewPagerAdapter模版
- auto-complete
- C语言中,有符号数,无符号数,整数溢出
- [win32][c++]如何覆盖winAPI控件自带的加速键
- Android动态更改TextView的字体大小
- Square全家桶正传——Retrofit使用及配合RxJava实现最大效率开发
- 命运
- java image过滤器
- C++ (重载、覆盖、隐藏)
- Dll注入-远线程注入
- ubuntu apt-get 异常 Temporary failure resolving
- nginx1.6.2+tomcat8.0.36 配置https