Windows SDK设置控件支持Tab键
来源:互联网 发布:巨星知我心txt百度云 编辑:程序博客网 时间:2024/06/06 14:27
在使用windows api编程时,若是页面有很多编辑框EDIT,那么,能否支持Tab键将会很影响用户体验。。
我在使用codeblocks写Win32GUI工程时,建立了一个Frame Based的项目,然后进行编程,创建了一堆的Edit控件,代码如下:
Hwnd_EDIT_Set_IP=CreateWindow(TEXT("EDIT"),TEXT(""),WS_CHILD | WS_BORDER|WS_TABSTOP,290,45, 90,20,hwnd,(HMENU)ID_Common,((LPCREATESTRUCT) lParam)->hInstance,NULL);Hwnd_EDIT_Set_DB=CreateWindow(TEXT("EDIT"),TEXT(""),WS_CHILD | WS_BORDER|WS_TABSTOP,290,75, 90,20,hwnd,(HMENU)ID_Common,((LPCREATESTRUCT) lParam)->hInstance,NULL);Hwnd_EDIT_Set_User=CreateWindow(TEXT("EDIT"),TEXT(""),WS_CHILD | WS_BORDER|WS_TABSTOP,290,105, 90,20,hwnd,(HMENU)ID_Common,((LPCREATESTRUCT) lParam)->hInstance,NULL);Hwnd_EDIT_Set_Pass=CreateWindow(TEXT("EDIT"),TEXT(""),WS_CHILD | WS_BORDER|WS_TABSTOP,290,135, 90,20,hwnd,(HMENU)ID_Common,((LPCREATESTRUCT) lParam)->hInstance,NULL);Hwnd_EDIT_Set_Interval=CreateWindow(TEXT("EDIT"),TEXT(""),WS_CHILD | WS_BORDER|WS_TABSTOP,290,165, 90,20,hwnd,(HMENU)ID_Common,((LPCREATESTRUCT) lParam)->hInstance,NULL);
很明显,为了使控件支持Tab键,在用CreateWindow创建控件时,必须在窗体风格参数dwStyle上指定WS_TABSTOP风格。。。
可是,一旦debug就发现,程序依然不响应Tab键。。。
解决方案:
虽然指定了WS_TABSTOP风格,但是,如果要程序响应Tab键,则必须要操作系统向程序发送Tab键指令啊。。。问题就处在这里了,对于FrameBased应用项目来说(DialogBased没有试过),正常情况下,你的Tab键消息被操作系统给拦截了,所以即使你指定了WS_TABSTOP风格,程序依然不会响应。
为了解决这个问题,需要在WinMain函数中,窗口进入消息循环时添加一句代码,让操作系统不拦截消息。。。代码如下:
while (GetMessage (&messages, NULL, 0, 0)) { if(!IsDialogMessage(hwnd,&messages))//这一句是必要的,必须添加 { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } }
需要注意的是:上面这样进行操作后,会导致有些消息无法被传入消息处理函数,例如WM_KEYDOWN消息,将直接被操作系统拦截了,导致消息处理函数中关于按键消息的函数响应失败~正确的做法最好如下:
while (GetMessage (&messages, NULL, 0, 0)) { if(!IsDialogMessage(hwnd,&messages)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } else { TranslateMessage(&messages); DispatchMessage(&messages); } }
- Windows SDK设置控件支持Tab键
- sdk TAB控件的应用
- [转]可编辑列表控件(支持TAB键)
- 设置对话框控件tab顺序
- tab控件在SDK中的使用例子
- SDK中Tab控件的使用
- vc编程 控件的TAB键顺序设置
- Win32 SDK控件详细设置
- Tab控件中滚动条的设置
- VC:设置Tab 控件顺序(TabOrder)
- VC如何设置控件Tab顺序
- vc快速设置控件的tab顺序
- c语windows编程tab控件使用
- vim设置tab键
- WIN SDK 添加Tab控件 List Control with CheckBox
- Windows 设置控件字体
- MFC完全自绘Tab控件,支持图片背景
- 控件的Tab键顺序
- JNI 系统钩子
- SAP-SD计划行类别解析
- SQL SERVER日期函数
- 内核中断过程
- Hbase深入学习(六) Java操作HBase
- Windows SDK设置控件支持Tab键
- Android之导入源码到eclipse中以及单模块调试
- 尝试写个爬虫(1)
- Solaris 11程序包IPS的发布和使用
- 目标主机不能到达
- 最近将osx升级到10.9,好多软件不能用,如何骗过安装程序
- OA项目之左导航
- Java log code example
- grep之初学探究