イグトランスさん、レスありがとうございます。
改めて調べてみると確かに、SS_REALSIZEIMAGEは
引用:
「SS_BITMAP スタイルや SS_ICON スタイルを持つコントロールの
イメージがロードされたり描画されたりするときに、コントロールサイズが
変更されないようにします。」
とあります。
また、当初自分の調べたページではこう説明されていました。
引用:
「SS_REALSIZEIMAGE : [リアル サイズ イメージ]
SS_BITMAP, SS_ICONでサイズ変更を禁止する.はみ出た分はクリップ. 」
そう言われて改めて読み直すと"イメージを変更しない"とは一言もないですね。
(でもだとすると"はみ出た分はクリップ"としいうのは何を差すのか謎です、、)
これは僕の思い違いかもしれません。。。にしても"リアルサイズイメージ"、
悩ましい。。(笑)
ただ、親ウインドウに合わせてイメージボックスのサイズを動かしたいという
のは是非実装したいところです。それはイメージボックスの画像表示エリアに
「クライアント・エッジ」(WS_EX_CLIENTEDGE)を付けたいということから
です。(落ち窪んだスタイルの)。
一番初めに上のプログラムを実行させた時、その時は
「SS_REALSIZEIMAGE」は付けていなかったんですが、画像はきちんと
実大で表示されました。
ところがよく見るとイメージボックスに拡張スタイルとして付けた
「クライアント・エッジ」が右辺と下辺で消えてしまっていたんです。
どこに行ったんだろうとメインウインドウのサイズを大きくしてみると
(テストしたその画像はかなり大きなものだったので)
ロードした画像に"合わせて"クライアント・エッジが描かれていました。
これは、このコントロールのサイズはセットする画像に合わせて変わるんだと
思い、(ただし、イメージ・ボックスのサイズは親であるメインウインドウの「中」に
無ければ表示上とても不自然になるので)、
そこで画像ロード直後に「SetWindowPos」でサイズを整える処理を
書いたのですが、そうすると今度は画像が拡大縮小されてしまい。。。
ということで今回の質問に至ります。
もっとも今回の質問のプログラムにあるようにメインウインドウのクライアント・
エリア一杯に一枚の画像を表示したいならわざわざイメージ・ボックスを使う
必要も実際無い訳なんですが、将来的にはメインウインドウの
クライアントエリアに複数の画像を表示したい。
各画像はいずれも拡大縮小せず、表示領域の大きさからはみ出ても
その分は無視して、それぞれに「Windowsによく見られる窪んだエッジ」を
付け、また各表示領域は"メインウインドウの大きさに比例して可変"としたい。
例えばこんな感じで。
■■■メイン・ウインドウ■■■ ■メイン・ウインドウ■
■■■■■■■■■■■■■ ■■■■■■■■■
■□□□□□■□□□□□■ ■□①□■□②□■
■□画像①□■□画像②□■ ■■■■■■■■■
■□□□□□■□□□□□■ ■□③□■□④□■
■■■■■■■■■■■■■ ■■■■■■■■■
■□□□□□■□□□□□■
■□画像③□■□画像④□■
■□□□□□■□□□□□■
■■■■■■■■■■■■■
以上のことが実装したいと思ったのです。
そう思ってRADツールをいじってると「イメージ・ボックス」というものを見つけて、
もしかしてこんな場合、これを使うのが"本筋"なのかな、と。
*
とにもかくにも、レス頂いた通り、SS_REALSIZEIMAGEを外し、
SetWindowPosを取り、InvalidateRectを挿入したのですが、
やはり「リサイズイベント」に飛んだ瞬間に画像は拡大縮小が行われる
ようです。加えて、(もしロードしてきた画像がメインウインドウの
サイズよりも大きなもののような場合)「クライアントエッジ」が右辺、下辺で
見えなくなってしまいます。
(と言うか、これこそSS_REALSIZEIMAGEを指定すれば
クライアントエッジの位置が動かなくなってもいいように思えるんですが、
仮にSS_REALSIZEIMAGEを指定してもやはりクライアントエッジは
見えなくなるようです。あくまでコントロール・サイズとそのコントロールの中の
クライアント・エリア・サイズは別物ということでしょうか?だとしたら
SS_REALSIZEIMAGEの存在意義って、ともつい思ってしまいますが。。)
ちょっとどうしたもんかと、まだ考えています。