none
Windows10で全角モードにしたとき、1キー入力の状態を他のウィンドウに渡したい RRS feed

  • 質問

  • VisualStudio2010 MFCでソフトを開発しております。 ソフトのターゲットOSは Win7~10です。


    CViewの子クラス 内に ON_WM_KEYDOWN でキー入力のタイミングをとらえて、CEditだけのダイアログを表示してON_WM_KEYDOWNで得た文字をCEditに表示しています。
    (CViewの子クラスで Aキーを押したら、ダイアログを出して、その中のCEdit内に a を表示してカーソルをaの次の位置で点滅させる)

    下記のサンプルソースでは Windows7では半角/全角問題なく表示します。
    Windows10では半角は問題ないですが、全角は何も表示しません。

    IMEオプションがひらがなになっている時、キーボードのAを入力すると
    Windows7では 'あ'と表示しますが、Windows10ではなにも表示しません。
    (理由が分かってませんが、Windows7では edit->PostMessage( WM_KEYDOWN~ など行わないでもなぜか 'あ' が表示します)

    Windows10でもWindows7と動作を合わせるため、 Aキー投打で 'あ' と表示するようにしたいのですが
    必要な処理がありましたらご助力ください。

    よろしくお願い致します。

    // メインのCViewの子クラス
    
    BEGIN_MESSAGE_MAP(CInputTestView, CView)
    	ON_WM_KEYDOWN()
    END_MESSAGE_MAP()
    
    
    
    void CInputTestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
    	CView::OnKeyDown(nChar, nRepCnt, nFlags);
    
    	// CEditだけのダイアログを表示
    	CInputDialog dialog(this);
    
    	dialog._Char	= nChar;
    	dialog._RepCnt	= nRepCnt;
    	dialog._Flags	= nFlags;
    
    	dialog.DoModal();
    }
    
    
    // CViewの子クラスから表示されるダイアログ
    BOOL CInputDialog::OnInitDialog()
    {
    	CEdit* edit = (CEdit*)GetDlgItem( IDC_EDIT );
    
    	_Flags = _Flags << 16;
    
    	edit->PostMessage( WM_KEYDOWN, (WPARAM)_Char, (LPARAM)(_RepCnt+_Flags) );  
    	//edit->PostMessage( WM_IME_KEYDOWN, (WPARAM)_Char, (LPARAM)(_RepCnt+_Flags) );  これでも結果は同じ
    
    	return TRUE; 
    
    }


    2019年10月16日 10:44

すべての返信

  • Freeプログラマーさん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    申し訳ございませんが、Microsoftがこれをサポートしていません。
    入力メソッドエディター(IME)を使用する場合、ブレークポイントを設定することにより、コード内の「_Char」の値を表示できます。 
    この値は常に229(VK_PROCESSKEY:IME PROCESS key)になります。 
    これはWinuser.hで定義されています。 したがって、IMEを通してあなたが望むものを得ることができません。

    次のリンクをご参照ください。
    https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2019年10月22日 8:42
    モデレータ
  • Haruka6002様

    返信ありがとうございます。  別の手が無いかなど もう少し調べてみます。

    2019年10月26日 3:30