【N88互換モード】ActiveBasicその10【イラネ】
■ このスレッドは過去ログ倉庫に格納されています
0656632
2008/10/18(土) 23:03:42まあここは僕のプログラムを例に考えましょうよ。
GetWindowRectで取得した矩形を渡しているわけですが、
Rectは通常変数なので関数が呼ばれた時点で必ず有効なデータ範囲です。
hMainWndは破壊されない限り常に有効な数値が入っています。
ImageBox1は名前が間違っていればコンパイル時にエラーになります。
もちろん変数を間違って入れるかもしれませんが、デバッグで確認できます。
その状態でGetDlgItemが失敗するとしたら自分自身のウィンドウ作成と初期化に失敗していることになりますが、
初期化失敗した時点でエラー終了してくれそうな気がします。見てないけど。
仮に異常値が入っていてウィンドウハンドルが無効だったとしましょう。
無効ということはNULLが入るわけですが、これはデスクトップのウィンドウハンドルですよね。
確かにデスクトップの矩形を取れば期待したのとは違う動作をするでしょう。
だけど、実はこの後に続くコードはその矩形を再描画するだけなんです。
再描画は自分のウィンドウハンドルを渡すので他のアプリケーションには影響しません。
失敗してもかまわないんです。
仮に画面のコピーをとるようなメモリアクセスをするとしても、
BitBLTのように無効な範囲を指定してもその範囲で適切に処理してくれる関数を使えば壊れたりしません。
ゲームのように激しく再描画するものなら些細なエラーも解決しないとちらつきが発生して見難かったり、
異常オブジェクトが描画される恐れは確かにありますね。
でもほとんどはWindowsとか標準ライブラリにお任せするアプリケーションでは、
自分ではやりたいことをこれこれと列挙してるだけで十分だと思うんです。
■ このスレッドは過去ログ倉庫に格納されています