【发布时间】:2017-06-14 13:37:06
【问题描述】:
我创建了一个对话框MainDialog.cpp,其中包含2 个编辑控件,其ID 为IDC_EDITCONTROL_A 和IDC_EDITCONTROL_B,变量分别定义为m_editControlA 和m_editControlB。
另外,我有 2 个按钮,它们的 ID 分别是 IDC_MFCBUTTON_KEY_X 和 IDC_MFCBUTTON_KEY_Y,变量分别是 m_buttonKeyX 和 m_buttonKeyY。
以下是源文件中的代码
#include "afxdialogex.h"
IMPLEMENT_DYNAMIC(CMainDialog, CDialogEx)
CMainDialog::CMainDialog(CWnd* pParent): CDialogEx(IDD_MAIN_DIALOG, pParent)
{
}
CMainDialog::~CMainDialog()
{
}
void CMainDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDITCONTROL_A, m_editControlA);
DDX_Control(pDX, IDC_EDITCONTROL_B, m_editControlB);
DDX(Control(pDX, IDC_MFCBUTTON_KEY_X, m_buttonKeyX);
DDX(Control(pDX, IDC_MFCBUTTON_KEY_Y, m_buttonKeyY);
}
BEGIN_MESSAGE_MAP(CMainDialog, CDialogEx)
ON_EN_CHANGE(IDC_EDITCONTROL, &CMainDialog::OnEnChangeEditA)
ON_BN_CLICKED(IDC_MFCBUTTON_KEY_X, &CMainDialog::OnBnClickedButtonX)
ON_BN_CLICKED(IDC_MFCBUTTON_KEY_Y, &CMainDialog::OnBnClickedButtonY)
END_MESSAGE_MAP()
void CMainDialog::OnBnClickedButtonX()
{
m_editControlA.SetWindowTextW(_T("X")); // test
}
void CMainDialog::OnBnClickedButtonX()
{
m_editControlA.SetWindowTextW(_T("Y")); // test
}
我试图了解如何让每个按钮发送它们各自的字符(即在此示例中为X 或Y)到选定的编辑控件如果选择了一个。本质上,我想模拟键盘输入。
我已阅读有关 how to simulate keyboard events 和 sendMessage 的文档,但由于我的 C++ 知识非常基础,我无法理解如何实现它。另外,按照我的previous question,我发现GetFocus 会很有用,但我目前的主要问题仍然是发送输入。
任何示例代码或有用的链接都可能对我了解如何在应用程序中模拟键盘输入非常有用。
【问题讨论】:
-
问题是当按钮被按下时编辑控件会失去焦点。您上一个问题的评论者已经提出了一些如何解决这个问题的建议。另一个想法:用具有
SS_NOTIFY样式的静态控件替换按钮。默认情况下静态不接收焦点。 -
模拟键盘事件可能是错误的方法。您实际上试图解决哪个问题?这看起来像 XY Problem
标签: c++ visual-studio-2015 mfc