1

Visual C++ を使用して MFC で簡単なダイアログを作成しようとしています。私の問題は、画面にダイアログが表示され、編集ボックス フィールドに入力しようとしたときに、文字「a」を 1 回入力すると、編集ボックスに「aaaaaaaaaaa」(つまり 12 a)と表示されることです。さらに、矢印キーを使用してボックス内を移動しようとすると、カラットは一度に 12 文字移動します。

エディットボックスからの出力はまだ「aaaaaaaaaaaa」であるため、単なる表示エラーではありません。

コードを投稿したいのですが、投稿するものは実際にはありません。Visual Studio のツールボックスを使用して編集ボックスを追加し、クラスで変数を割り当てたので、これは特別な編集ボックスではありません。

何が起こっているのかについて誰かが考えているなら、それは大歓迎です。残念ながら、どこから始めればよいかわかりません。

いつもありがとう。

4

5 に答える 5

1

これをデバッグするには、ダイアログに PreTranslateMessage 関数を追加し、キーダウンが処理されている正確な回数を確認します。

BOOL DialogName::PreTranslateMessage(MSG* pMsg)
{

    if(pMsg->message==WM_KEYDOWN)
    {
        // TODO: see what is going on here
        return TRUE; //do not dispatch this message, so keydown will have no effect
    }

    return CDialog::PreTranslateMessage(pMsg);
}
于 2009-01-08T00:37:33.360 に答える
0

WinXp 64 OSにサービスパック2をインストールしましたが、問題は解決しました:)

于 2009-12-29T13:45:21.270 に答える
0

これは新しいプロジェクトで発生していますか、それとも新しいプロジェクトでこの問題を再現できますか? それがコードで行ったものなのか、インストールで行ったものなのかを識別するのに役立ちます。

于 2009-01-05T16:05:20.070 に答える
0

何らかの理由で、これは MFC との初期の闘争の漠然とした記憶を呼び戻します。相互再帰を探しましたか?私は永遠に、最初のメソッドを呼び出した別のメソッドによってピックアップされたメッセージ (私には知られていない) を送信したアプリの一部で何かをしていました...

私の推測では、それは額を叩くものの1つです。それは、私が具体的に作ることができないというこのしつこい既視感を私に与えます.

相互再帰の場合は、ブレーク ポイントの適切な場所を見つけることができれば、コール スタックで確認できるはずです。

于 2008-12-27T21:01:50.173 に答える
0

PreTranslateMessage() 関数またはアプリ内の他の場所で WM_KEYUP などのイベントをキャプチャしていますか?

キーボード イベントの既定の処理をオーバーライドした場合、表示されている症状が発生する可能性があります。

于 2009-01-02T23:29:43.840 に答える