0

編集フィールドが選択されるたびにポップアップするオンスクリーン キーボードを作成できるようにしたいと考えています。MFC Visual studio 2005 (C++ ベース) を使用しています。

以下はこれまでの私のコードです:

void CTestHarnessDlg::OnEnChangeEdit3()
{
    CKeyboard Dlg;
    Dlg.DoModal();
}

ダイアログ ボックスを実行して選択したフィールドをクリックすると、キーボードのキーを押すまでオンスクリーン キーボードが開きません。テキストフィールドに何も入力せずにキーボードを開く方法はありますか?

私は ON_EN_SETFOCUS を見てきましたが、MFC は初めてです。コード内でCEDITコマンドクラスを使用する方法さえわかりません...助けていただければ幸いです。

4

1 に答える 1

1

Visual Studio Class Wizard を使用してコマンドを追加する方法

Visual Studio でプロジェクトを開き、上部のメニューで次の場所に移動します。

  • プロジェクト>クラスウィザード
  • プロジェクトとクラス名を選択します(あなたの場合 CTestHarnessDlg
  • Commands検索フィールドのタブで、編集 ID を入力します。
  • それを選択すると、呼び出された ListBox にMessagesそのコントロールからのすべてのメッセージが入力されます。
  • 任意の名前を選択EN_SETFOCUSして押しAdd Handlerて入力するか、デフォルトのままにしておきます
  • 次に、[OK] を押すかEdit Code、メソッドの実装がすぐそこにあるはずです
  • すべてがクラス ウィザードによって自動的に設定および作成される必要があります: メソッド宣言、メソッド実装、メッセージ マップ

コマンドを手動で追加する方法

  • クラス宣言 (通常は .h ファイル内) に移動し、メソッド宣言を追加します。追加する必要がある関数の型を知る必要があります。

    afx_msg void OnSetfocusEdit();

  • メッセージ マップ (通常は cpp ファイル内) に移動し、マッピングを追加します。使用する必要があるマクロを知る必要があります。この場合は ON_EN_SETFOCUS です。

    ON_EN_SETFOCUS(IDC_YOUR_EDIT_ID, &CTestHarnessDlg::OnSetfocusEdit)

  • cpp (通常は cpp ファイル内) に移動し、メソッドの実装を追加します

void CTestHarnessDlg::OnSetfocusEdit()
{
    TCHAR sysDir[MAX_PATH];
    if( !GetSystemDirectory( sysDir,  MAX_PATH) )
    {
        ASSERT(FALSE);
        return;
    }
    ShellExecute(NULL, NULL, L"osk.exe", _T("") , sysDir, SW_SHOW);
}

osk.exe の使用

このコマンドは、ShellExecute(NULL, NULL, L"osk.exe", _T("") , sysDir, SW_SHOW);ウィンドウの画面上の仮想キーボードを開きます。独自のキーボード ダイアログを作成する必要はありません。Windows には既定で既に 1 つ存在します。

osk.exe を使用しない

独自のダイアログ (CKeyboard) を作成する必要がありますが、IMO ではCDialog::DoModalメソッドを使用しないでください。CDialog ::Createを使用してダイアログをモードレスにし、次に CWnd::ShowWindowを使用してから、 CWnd::SetWindowPosを使用して移動するあなたが望む場所にあなたのダイアログ。

于 2015-05-07T08:43:42.603 に答える