Windows Embedded Compact 2013 - 初始应用程序焦点

时间:2015-01-09 16:20:28

标签: c++ silverlight visual-studio-2012 windows-embedded-compact blend-2012

我的应用程序启动时有一个登录屏幕,并希望光标在用户名文本框中等待输入(不点击)。在网格加载后我能够聚焦光标:

HRESULT MainPage::OnLoaded(__in IXRDependencyObject* pRoot)
{
    UNREFERENCED_PARAMETER(pRoot);

    HRESULT hr = InitializeComponent();

    if (FAILED(hr))
    {
        goto Error;
    }

    if (m_pLogin)
    {
        m_pLogin->AddLoadedEventHandler(CreateDelegate(this, &MainPage::Login_Loaded));
    }
Error:
    return hr;
} // OnLoaded

HRESULT MainPage::Login_Loaded (IXRDependencyObject* pSender, XRRoutedEventArgs* pArgs)
{
    HRESULT hr = S_OK;

    m_pUserName->Focus(&pBool);

    return hr;
}

这允许我输入但光标实际上不可见。

我见过其他线程解释说浏览器插件必须首先关注,但这是一个嵌入式Silverlight应用程序(C ++),而不是一个silverlight网页(C#)。我无法弄清楚如何在不使用鼠标的情况下将焦点设置到应用程序。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

如果没有鼠标点击,我无法完成此操作 - 但我使用SendInput来合成鼠标点击,因此用户不需要。

HRESULT MainPage::OnLoaded(__in IXRDependencyObject* pRoot)
{
    UNREFERENCED_PARAMETER(pRoot);

    HRESULT hr = InitializeComponent();

    if (FAILED(hr))
    {
        goto Error;
    }

    if (m_pLogin)
    {
        m_pLogin->AddLoadedEventHandler(CreateDelegate(this, &MainPage::Login_Loaded));
        m_pLogin->AddMouseLeftButtonUpEventHandler(CreateDelegate(this, &MainPage::Login_MouseLeftButtonUp));
    }
Error:
    return hr;
} // OnLoaded

HRESULT MainPage::Login_Loaded (IXRDependencyObject* pSender, XRRoutedEventArgs* pArgs)
{
    HRESULT hr = S_OK;

    // execute mouse click
    INPUT ip;
    ip.type = INPUT_MOUSE;

    ip.mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE;
    SendInput(1,&ip,sizeof(INPUT));

    ip.mi.dwFlags = MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE;
    SendInput(1,&ip,sizeof(INPUT));

    return hr;
}

HRESULT MainPage::Login_MouseLeftButtonUp (IXRDependencyObject* pSender, XRMouseButtonEventArgs* pArgs)
{
    HRESULT hr = S_OK;

    m_pUserName->Focus(&pBool);

    return hr;
}