ATL 中 Tabstop无效果问题/无法使下个控件获取到焦点

迷路的指南针 南昌航空大学 2021-04-29 10:20:16
题主我学习ATL开发插件时发现Tab键切换焦点无效?

应该不复杂,没有加任何逻辑代码在里面,在项目的rc文件中
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_WEBLOGIN DIALOGEX 0, 0, 320, 163
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU
FONT 9, "MS Shell Dlg", 0, 0, 0x0
BEGIN
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,8,35,305,1
RTEXT "用户名称",IDC_STATIC,68,48,57,12,SS_CENTERIMAGE | WS_TABSTOP
RTEXT "用户密码",IDC_STATIC,68,60,57,12,SS_CENTERIMAGE | WS_TABSTOP
EDITTEXT IDC_EDIT1,132,48,86,12,ES_AUTOHSCROLL
EDITTEXT IDC_EDIT2,132,60,86,12,ES_PASSWORD | ES_AUTOHSCROLL
PUSHBUTTON "登录",IDC_BUTTON1,167,78,50,14
CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,8,114,305,1
RTEXT "选择语言",IDC_STATIC,144,139,57,12,SS_CENTERIMAGE
COMBOBOX IDC_COMBO1,207,139,93,54,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
END

////////////////////////////////////////////////////////////////////////////
主界面代码
#pragma once

#include "../resource.h" // 主符号

#include <atlhost.h>

using namespace ATL;

// CWebLogin

class CWebLogin :
public CAxDialogImpl<CWebLogin>
{
public:
CWebLogin()
{
}

~CWebLogin()
{
}

enum { IDD = IDD_WEBLOGIN };

BEGIN_MSG_MAP(CWebLogin)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)

CHAIN_MSG_MAP(CAxDialogImpl<CWebLogin>)
END_MSG_MAP()

// 处理程序原型:
// LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);

LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
CAxDialogImpl<CWebLogin>::OnInitDialog(uMsg, wParam, lParam, bHandled);
bHandled = TRUE;
return 1; // 使系统设置焦点
}

virtual BOOL PreTranslateMessage(MSG * pMsg)
{
::OutputDebugString(L"111111");
return FALSE;
};

};
我本来打算在PreTranslateMessage中拦截消息的,但是打断点在PreTranslateMessage,貌似都没有在这里面执行。
现在我的问题就是,我想通过Tab按键或者Enter按键,当我在输入完用户名之后按一下按键光标移动到密码输入框这种效果。
请问应该怎么做呢?



...全文
336 点赞 收藏 2
写回复
2 条回复
引用 1 楼 zgl7903 的回复:
从资源文件上看, 两个Edit没有 WS_TABSTOP 属性
不是这个问题,我一开始验证过,只是发现无效之后脑子抽到了,怀疑是不是CEdit无效,就试了试CStatic. 我修改后的代码 ///////////////////////////////////////////////////////////////////////////// // // Dialog // IDD_WEBLOGIN DIALOGEX 0, 0, 320, 163 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_SYSMENU FONT 9, "MS Shell Dlg", 0, 0, 0x0 BEGIN CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,8,35,305,1 RTEXT "用户名称",IDC_STATIC,68,48,57,12,SS_CENTERIMAGE RTEXT "用户密码",IDC_STATIC,68,60,57,12,SS_CENTERIMAGE EDITTEXT IDC_EDIT1,132,48,86,12,ES_AUTOHSCROLL | WS_TABSTOP EDITTEXT IDC_EDIT2,132,60,86,12,ES_PASSWORD | ES_AUTOHSCROLL | WS_TABSTOP PUSHBUTTON "登录",IDC_BUTTON1,167,78,50,14 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,8,114,305,1 RTEXT "选择语言",IDC_STATIC,144,139,57,12,SS_CENTERIMAGE COMBOBOX IDC_COMBO1,207,139,93,54,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP END
回复 点赞
zgl7903 05月05日
从资源文件上看, 两个Edit没有 WS_TABSTOP 属性
回复 点赞
发动态
发帖子
ATL
创建于2007-09-28

3023

社区成员

4.8w+

社区内容

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区公告
暂无公告