お世話になっています。
Win2000,VC6,MFC,SDIの環境です。
Viewの基本クラスにCFormViewを選択しました。
リソースエディタでビットマップをクライアント領域いっぱいに
はりつけています。
OnDraw()で線をひいているのですが、ビットマップがあるせいなのか
線が見えません。ビットマップのタブオーダーは1にしています。
どうすれば線がビットマップより上になるでしょうか?
(線が見えるようになるでしょうか?)
ご存知のかた、ご教授よろしくお願いします。
リソースエディタで貼り付けているというコトは、
そのビットマップはスタティックコントロール(ピクチャーコントロール)上
にあって、OnDraw 内で引いている線(LineTo あたりか)は、ダイアログ上
にある。(スタティックコントロールの下に線を引いているコトになる。)
よって見えない。
・・・ってコトかな。
ならば、OnDraw 内でビットマップもダイアログに直接描画すれば
いいかも。(この場合、スタティックコントロールは不要)
あるいは OnEraseBkGnd 内で。
Shimuraさん レスありがとうございます。
>ならば、OnDraw 内でビットマップもダイアログに直接描画すれば
>いいかも。(この場合、スタティックコントロールは不要)
そう思ってやってみようと思っているのですが
コンボボックスも配置してあるので、ビットマップを描画したら
コンボボックスが見えなくなってしまうのではないかと
心配しています。
>にあって、OnDraw 内で引いている線(LineTo あたりか)は、ダイアログ上
>にある。(スタティックコントロールの下に線を引いているコトになる。)
スタティックの上に描画することは不可能なのでしょうか?
>心配しています
心配するお気持ちはわかりますが、とりあえずはやってみましょう。
ダメだったら「ああ、いい勉強したな」と思えばいいです。
・・・つうか、この答はすでにでてますよね。
CxxFormView::OnDraw() でスタティックコントロール上に線をのばせない
のと同じように、コンボボックス上にビットマップはかぶりません。
で、ここから先は一般的なお話。
見た目にはひとつウィンドウ(ダイアログ)ですけど、そのクライアント領域は、
実際にはいくつもの部品(ウィンドウ)で構成されています。
これがウィンドウズのウィンドウ「ズ」たる所以のひとつなわけです。
でもって、各ウィンドウはそれぞれ固有のデバイスコンテキストハンドル(HDC)
を持っています。ウィンドウハンドル(HWND)がそれぞれのウィンドウで固有ある
ように。ですから、ウィンドウ(A)のデバイスコンテキストハンドルを使って
ウィンドウ(B)に描画することはできません。
逆に云えば、スタティックコントロール(これもウィンドウ)のデバイス
コンテキストを使えば、「スタティックの上に描画すること」も不可能では
ないです。(MFCだと HDC は CDC 内に、HWND は CWnd 内に取り込まれて
ますから、SDK プログラミングのご経験がなければ、ハンドルという言葉には
なじみが浅いかな? 同音異語は結構あるけども。(笑))
ただし、リソースエディタを使ってビットマップを貼り付けていると、
スタティックコントロール上で「ビットマップを描画する」という行為が
すでにシステムによってなされているわけですから、これと線をひく行為と
の関連性を考慮しないと両立しないかもしれません。
なもんで、そういうコトをいろいろと考えながらコーディングしていくと
頭のほうがスパゲティ状態になりかねないので、もし僕がやるとすれば、
「ビットマップ」も「線」も、ダイアログ上に直接描画するでしょうね。
逆に kai さんに質問です。
>リソースエディタでビットマップをクライアント領域いっぱいに
>はりつけています。
とのことですが、そのウィンドウ(メインウィンドウ)はサイズ変更不可の
ウィンドウなのですか?
サイズが変わったら、ウィンドウの右と下にダイアログの地の色(Windows2000 という
コトなので、標準だと灰色かな)が見えてきませんか?
Shimuraさん
>「ビットマップ」も「線」も、ダイアログ上に直接描画するでしょうね。
勉強して、やってみます。
>とのことですが、そのウィンドウ(メインウィンドウ)はサイズ変更不可の
>ウィンドウなのですか?
サイズは変更できません。
またわからないことがあれば質問します。
ありがとうございました。
>サイズは変更できません。
画面のDPIを変更してしまうと、サイズも狂ってくるような気が・・・。
考えすぎかな。