1

RegisterClassEx関数のドキュメントを読んでいて、関数の戻り値の型がATOM.

ATOM RegisterClassEx(CONST WNDCLASSEX *lpwcx);

を使用してウィンドウを作成するCreateWindowExときに、lpClassName でクラス名または ATOM クラスを渡すことができます。

ATOM を classname に渡す意味はありますか? それとも別の方法ですか?

ありがとう。

4

2 に答える 2

3

ATOM文字列のシステム配列へのインデックスのような、文字列へのエイリアスです。ウィンドウ クラスのコンテキストでは、クラス名のエイリアスです。

つまり、同じことを別の方法で行っているだけですが、理論的にはこの方が効率的です。

ATOM を使用する方が理にかなっていると思うのはGetProp/SetPropで、処理されるすべての Windows メッセージに対してその文字列を検索する可能性があります。ATOM を使用すると、ある程度のパフォーマンスが得られる場合があります。とにかく使いやすいので、あなたもそうかもしれません。

興味深いことに、ATOMs テーブルはシステム全体にも適用されるため、2 つのプロセスが同じ名前のウィンドウ クラスを登録すると、クラス情報が異なっていても、同じ ATOM 値を受け取ります。

于 2011-02-03T11:22:10.173 に答える
2

それは単なる代替方法です。この API が導入された Windows 3 (Windows 2.x ではないにしても) では、文字列の比較は遅い操作でした。ATOM により、かなり頻繁にウィンドウを作成する作業が大幅に高速化されました。

于 2011-02-03T11:15:58.700 に答える