1

Windows でアクセント付き文字がどのように実装されているかについての指針は役に立ちます。

目標 - ctrl + ' のようなキーストロークに続いて母音と、MS Word、テキスト パッドなどの標準アプリケーションで動作するその他すべての組み合わせを使用して、アクセント付き文字 (áéíóú) を追加する機能。

今日までの私の調査結果- WM_DEADCHAR メッセージに関連するドキュメント/ブログ/フォーラムを読むことができるあらゆる場所で、私が理解しているのは: ::TranslateMessage は、デッド キーに対応する WM_KEYUP メッセージを WM_DEADCHAR メッセージに変換し、デッド キーによって生成された WM_SYSKEYUP メッセージを WM_SYSDEADCHAR メッセージに変換します。 . Windows には、これらのメッセージを文字メッセージと組み合わせてアクセント付き文字を生成するロジックが用意されているため、通常、デッド キー メッセージは既定の処理に渡されます。

このメッセージを CWnd 派生クラスのメッセージ マップに追加しましたが、OnDeadChar() は呼び出されません。さらに、SPY++ を使用して、これらのキーストロークの組み合わせでアクセント記号付きの文字を追加できる MSWord、Textpad などでも、WM_DEADCHAR メッセージがディスパッチされないことがわかりました。それで、これは WM_DEADCHAR が実際にこの問題に対処する方法ではないということですか?

アクセント付き文字を実装するためのサンプル コード/手順/メカニズムを提供してください。

前もって感謝します!!!

4

1 に答える 1

1

これはすべて、使用しているキーボード レイアウトに依存します。特定のキーボード レイアウトには、基本的により多くの文字を生成するためのキーの組み合わせを可能にするデッド キーがあります。

たとえば、私の`キーはそれ自体では何もしませんが、`押すaà.

ユーザーがアクセント付き文字を入力できるようにするという点では、それを可能にするキーボード レイアウトをインストールするかどうかはユーザー次第です。アプリで処理する必要はありませんWM_DEADCHAR。あなたはただ扱うことができますWM_CHAR

アプリ内でアクセント付き文字をサポートするという点では、Unicode 文字セットとタイプを使用していることを確認してください。たとえばwchar_t/WCHARであり、 ではありませんchar

なんと言っても、私はある時点であなたと同じ目標を持っていたと思います. 基本的にデッド キーをシミュレートし、キーボード フックを使用してアクセント付きの文字を生成するアプリを作成しました。利点は、キーボード レイアウトをインストールしなくてもアクセント付きの char 機能を利用できることです。

ただし、欠点はもっとたくさんあります。この車輪を再発明する意味はありません。キーボード レイアウトは驚くほど強力で、文字入力に関するこれらの問題はすべて解決済みです。独自のメッセージを翻訳してさまざまな文字を生成するのは非常に困難です。この点に関して、アプリごとに要件が異なります。最終的には、キーボードの状態構造を生成し、すべてのキーボード/文字/入力メッセージを処理するまで、キーストロークを完全にシミュレートする必要があります。これを開発していると、メモ帳では問題なく動作するが、Winword では動作しないことに気付くでしょう。次に、winword を修正すると、Qt アプリでは機能しないことがわかります。キーボード レイアウトを使用することをお勧めします。

しかし、これはあなたがやろうとしていることではないかもしれません。その場合、私が言ったことを無視してください:D

于 2012-07-13T11:40:46.770 に答える