1

mfc の cedit コントロールを使用して、matlab のようなコマンド ウィンドウを作成しています。

例えば、いくつかのコマンドを入力した後、矢印キー (具体的には上キー) を使用して古いコマンドを表示したい。

古いコマンドの表示には成功しましたが、このコマンドの最後にカーソルを配置できませんでした。原因は、このコマンドの最後にカーソルを置いた後、再度矢印キーを入力したためと思われます。

詳しい状況はこちら。

  • まず、コマンド「play」を入力します
  • Play!.. メッセージが表示されます。
  • そして次のコマンドプロンプトで「↑」キーを押します
  • そして、自動的にストリーミングされる古いコマンド「再生」を成功させました。

しかし、私のカーソルは上の行に上がります。

@ 遊ぶ

プレイ!.. | (←カーソルはここにあります..)

@プレイ| (←「↑」キーを押した後、ここにカーソルを置きたい)

これは私のコードです:

class CEditCommand::CEdit
{
public:
    virtual BOOL PreTranslateMessage(MSG* pMsg);
}

BOOL CEditCommand::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN)
    {
        if (pMsg->wParam == VK_UP)
        {
            int nS = 0; nE =0;
            GetSel(nS, nE);
            int nLineIndex = LineIndex();
            CString str = m_CommandHistory[m_nCommandIndex];
            m_nCommandIndex--;
            SetSel(nLineIndex, nE);
            ReplaceSel(str);
            SetSel(0, -1);
            SetSel(-1, -1);
        }
    }
}

を実行した後、再度「↑」キーを押す理由がわかりませんPreTranslateMessage。誰かがこれについて考えを持っていますか?

4

1 に答える 1

2

エディット コントロールは引き続き上矢印メッセージを受け取るため、CEditCommand::PreTranslateMessage()両方WM_KEYDOWNでTRUE を返す必要WM_KEYUPがあります。pMsg->wParam == VK_UP

于 2013-12-26T09:04:01.627 に答える