0

MFC アプリケーションでレイヤード ウィンドウをセットアップしています。ウィンドウのレンダリング方法のさまざまな部分をカスタマイズできるように、CDialog の独自の派生をセットアップしました。最小化と最大化について心配し始めるまで、すべてが正常に機能します。

最小化または最大化をクリックすると、ウィンドウは期待どおりに反応します (つまり、レイヤード ウィンドウを使用していない場合とまったく同じです)。ただし、ウィンドウを復元すると、非常に奇妙なことが起こります。

私のテスト ウィンドウの既定のクライアントの四角形は 324x102 です。たとえば、最小化された状態から復元すると、OnSize に渡される cx と cy は 994, 550 です。その後、(OnSize 内で) GetClientRect を実行すると、これはウィンドウに対して報告されるサイズです。奇妙なことに、GetWindowRect を実行すると、正しいサイズが返されます (ただし、クライアント以外の領域はすべて含まれています)。

ここで何が起こっているのか、さらに重要なことに、GetClientRect が正しい情報を報告するように修正する方法を知っている人はいますか?

前もって感謝します!

4

1 に答える 1

1

この問題を解決するための一種のハックを思い付きました。OnSize と OnMove では、受け取った (c)x と (c)y を無視し、GetWindowRect からすべてを処理します。アプリケーションが期待どおりに反応するようになりました。[HACK] コメントでコードをマークしました。これは非常に奇妙に思えますが、なぜこれが起こっているのかを知りたいです。

于 2009-09-21T10:42:28.500 に答える