あまつぶ

2.17 1:00 【ウィンドウ外に描画】

 某番組は放送の予定を1回繰り下げることになったらしい。いろいろ苦情があったのかな。

 昨日スクリーンを載せた時計だけど、ちょっとずつデザイン変更。2本の針がほぼまっすぐになった時が間抜けな問題をなんとかするために針の先を太くしてみた。それから中央の円の周りに細いリングをつけてなんとなくしゃれた(?)感じに。なんとか24時間周期で回るものをつけたいなぁと、文字盤の一番外側に小さな三角形を追加した。右半分にある時は午前、左半分だと午後と。上半分と下半分の方がわかりやすいかもしれないけど、、また考えよう。まだ再考の余地があるのでスクリーンはそのうち(笑)。

 QTのエフェクトについて。いろいろ調べてみたが、具体的な方法については相変わらず不明。PixMapをソースとして指定してやってエフェクトのシーケンスを作成して……、、なんだかわからん(笑)。一筋縄ではいかなそうな感じなので保留。
 オリジナルイメージをフローティングウィンドウに表示するのはやはり邪魔だということでなんとかする算段をいろいろ考える。やはりImageReadyのようにとりあえずは1つのウィンドウで変換前/変換後のイメージを切り替えて表示できるのがいちばんいいのかなぁ。両方同時に見てチェックしたいという要望に答えるために別ウィンドウにわける方法も考えないといけないけど。
 まずは1つのウィンドウで切り替えて表示することができるようにプログラムを書き換える。ウィンドウの下の水平スクロールバーの左側にボタンを作ってそこで切り替えられるようにしてみた。機能自体はすぐにできたのだけど、ボタンが小さかったからか慣れないからか、どちらの状態になっているのかがぱっと見てわからないという問題が。タイトルバーにどちらの状態なのかを表示するくらいしか思いつかないけど、、難しい(^^;;
 みかけの問題は後回しにして、今度は別ウィンドウにわける方法を考える。ImageReadyではウィンドウの上の方にタブがあってそこで切り替え、また外にドラッグすることによってウィンドウをわけることができた(Photoshopのパレットなんかも似たインタフェースだな)。これを真似して作ってみようと思ったのだが、、ウィンドウの外になにかを描画する方法を知らない(^^;; IconPartyの以前のバージョンではウィンドウをはみ出た場所に描画してしまうというとんでもないバグがあったが、ああいうのとは関係ないよなぁ。
 自分で考えていてもわかるわけがないのでちょっと情報を探す。どこかWebで見た記憶があるのでありそうなページを探して……、と、見つけた。K.Nakagawa's Home PageのQ&Aに「デスクトップに直接描画する方法」というのが載っている。GetCWMgrPortってルーチンでデスクトップのポートを取得できるんだそうな。これを使ってポートを取得してカレントポートを変更してDragGrayRgnを呼ぶ……、めでたく一発でうまくいった。あとはドラッグが終了された場所をチェックしてそこにウィンドウを作成してやればokと。なんとかなりそうかなー。

 で、ひさしぶりに今日のToolbox。前がいつだったか探すのに苦労してしまった(^^;; とりあえず少しでもわかりやすいようにと、月毎のインデックスに[Toolbox]という印をつけることにした。ちなみに前回は99.1.31らしい。

pascal void	GetCWMgrPort(CGrafPtr *wMgrCPort);
デスクトップのポートを取り出す。ウィンドウの外になにかを描画したい場合に使用。
描画した内容はあとでちゃんと消すこと。白黒の場合は下のGetWMgrPortを使う。
返り値	なし。
wMgrCPort	デスクトップのポートが返る。
pascal void	GetWMgrPort(GrafPtr *wPort);
デスクトップのポートを取り出す。ウィンドウの外になにかを描画したい場合に使用。
描画した内容はあとでちゃんと消すこと。カラーの場合は上のGetCWMgrPortを使う。
返り値	なし。
wPort	デスクトップのポートが返る。


ちなみにColor QuickDrawが使用可能な環境でないと上のGetCWMgrPortは動かないと思う。下のルーチンならどちらの環境でも使えるようなので何も考えずにGetWMgrPortを使うのがいいかも。SetPortに渡す時にキャストしなくていいし(笑)。
 ルーチンの説明にも書いたようにアプリケーションで描画した内容はちゃんと消してやらないと残ってしまうので注意。まあぼくがやったみたいにDragGrayRgnを呼ぶだけなら何も問題は起こらないと思うけど。

to February 16, 1999 ↑ to February index → to February 18, 1999