none
RichEdit50Wで縦書き入力を行ったとき、矢印カーソルの移動が90度回転しているので見た目通りの移動に変更したい。

    質問

  • VS2010 MFCで開発をしています。

    CRichEditCtrl(RichEdit50W)で縦書き入力を行っているのですが、矢印キーの動作が90度ずれている(上矢印で右移動、右矢印で下移動する)
    のを見た目に違和感ない動きに合わせようとしています。

    添付はCRichEditCtrlのサブクラスにPreTranslateMessageを定義して、キーをすり替えようとしたのですが、
    右矢印キーを押すと、VK_RIGHTが来るのでVK_UPに変換するまではいいのですが、その後またVK_UPが来るためVK_LEFTに変換されて結果、下移動します。
    左矢印を同じですが、 上下矢印を押したときはそのキーだけの動作になるので意図通り動きます。
    なぜ、左右キーを上下キーに変換した時だけ、また このサブクラスのPreTranslateMessageに来るのかも判っていません。


    良い方法がありましたらご教授ください。  (本問題を回避できるならキーすり替え以外でも結構です)

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

    BOOL CVerticalEditCtrl::PreTranslateMessage(MSG* pMsg) 
    {
    	if(pMsg->message == WM_KEYDOWN )
    	{
    		if(pMsg->wParam == VK_LEFT)
    		{
    			pMsg->wParam = VK_DOWN;
    			TRACE(_T("VK_LEFT => VK_DOWN\n"));
    		}
    		if(pMsg->wParam == VK_RIGHT)
    		{
    			pMsg->wParam = VK_UP;
    			TRACE(_T("VK_RIGHT => VK_UP\n"));
    		}
    
    		if(pMsg->wParam == VK_DOWN)
    		{
    			pMsg->wParam = VK_RIGHT;
    			TRACE(_T("VK_DOWN => VK_RIGHT\n"));
    		}
    		if(pMsg->wParam == VK_UP)
    		{
    			pMsg->wParam = VK_LEFT;
    			TRACE(_T("VK_UP => VK_LEFT\n"));
    		}
    	}
    
       	return CRichEditCtrl::PreTranslateMessage(pMsg);
    
    }

    2017年11月9日 12:19

回答

  • 2 番目の if から if の前に else を付けてみてはどうでしょうか?

    あと、少なくとも Windows 10 においては、キーイベントを書き換えなくても、矢印のキーが見た目上のカーソル移動と一致していました。Msftedit.DLL のバージョンをみてキーイベントを書き換えるかどうか判定する必要があるかもしれません。

    2017年11月9日 12:39

すべての返信

  • 2 番目の if から if の前に else を付けてみてはどうでしょうか?

    あと、少なくとも Windows 10 においては、キーイベントを書き換えなくても、矢印のキーが見た目上のカーソル移動と一致していました。Msftedit.DLL のバージョンをみてキーイベントを書き換えるかどうか判定する必要があるかもしれません。

    2017年11月9日 12:39
  • kenjinote様

    Res大変ありがとうございました。

    初歩的な間違いに気づかず失礼しました。
    if はやめて Switch で分岐する事で上手く動くようになりました。

    この問題は
    家のWin7/8/10では全て発生するのですが、クライアントの一部の環境で起きない と聞いていたので、納得が行きました。

    これからdllバージョンを調べてこの処理を入れるかどうか の判定処理に進みます。


    2017年11月9日 23:16
  • どのdllからこの問題が直ったか調べる方法はありますか ?
    2017年11月9日 23:44
  • どのバージョンで MsftEdit.DLL 矢印キーの動作が変更されたか、明確にはわかりませんでした。少なくとも私の環境では

    File Version : 5.41.21.2510 (Windows 7) → 矢印キーと見た目の動作が合っていない
    File Version : 6.2.14393.1770 (Windows 10 1607) →矢印キーと見た目の動作が合っている

    という動作になりました。色々な MsftEdit.DLL のバージョンを調査していくしかないのかなと思っています。どこかにドキュメントがあればよいのですが・・・。

    2017年11月10日 4:26
  • 返答ありがとうございます。

    更新プログラムの内容を見ているのですが、なかなか見つかりませんね。公開せずにこそっと直している可能性があります。

    今のところ、8/10は最新の状態になっていればこの問題はでないようですので、7のみに対応でクライアントに調整見ようと考えています。


    2017年11月10日 5:08