0

アプリケーションの起動時にログイン画面が表示され、カーソルがユーザー名のテキスト ボックスに入力するのを (クリックせずに) 待ちたいと思います。グリッドが読み込まれた後、カーソルをフォーカスすることができました。

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 Web ページ (C#) ではありません。マウスを使用せずにアプリケーションを起動するときに、アプリケーションにフォーカスを設定する方法がわかりません。助言がありますか?

4

1 に答える 1

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;
}
于 2015-01-21T20:20:14.643 に答える