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按键,当我在输入完用户名之后按一下按键光标移动到密码输入框这种效果。
请问应该怎么做呢?



...全文
2918 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
迷路的指南针 2021-05-06
  • 打赏
  • 举报
回复
引用 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 2021-05-05
  • 打赏
  • 举报
回复
从资源文件上看, 两个Edit没有 WS_TABSTOP 属性

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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