タイトル | 【Carbon化シリーズ】スクロールバーをAppearance対応に | カテゴリー | Carbon/CF, Carbon化 |
作成日 | 2000/4/29 11:50:26 | 作成者 | 新居雅行 |
Appearance対応のスクロールバーの大きな特徴は、スクロールバーのつまみのサイズが伸縮することだ。ただ、現状でも、昔ながらのつまみサイズが一定のアプリケーションも残っていて使えないわけではない。なんとかコンパイルを通すということも可能なのだが、ここは1つ、モダンなスクロールバーに代えることにした。 エラーが出たソースは、WindowSet.cだけで、これは、ウインドウ関連の関数をまとめているものである。この中に、新しく文書ウインドウを作るMakeDispWindowという関数がある。ここに、スクロールバーを生成するプログラムとして次のようなものがある。 VScrolH = NewControl(targetWindow, &ScrolRect, "\p", false, 0, 0, pageRect.right, scrollBarProc, 0); この最後から2つ目の引数「scrollBarProc」の定数定義がなされていないというコンパイルエラーが出た。これはToolBoxの昔のスクロールバーのプロシージャ番号を本来は定数定義されているのであるが、ヘッダのControls.hからは消えてしまっている。実は、関連する定数はControlDefinitions.hに移動していて、それをインクルードすればscrollBarProcは使えるのであるが、ここはひとつAppearance Managerのスクロールバーを使うことにする。(なお、上記のステートメントの最後から3つ目の引数は、ソース的には違っているのだが、常に0が代入されているので、バイナリ的にはOKなのだ…) AppearanceのスクロールバーのプロシージャはkControlScrollBarProcという定義定数で指定する。ただし、単にそれだけではだめで、Appearanceに対応した、コントロールへの値設定関数を呼び出して、初めて伸縮するつまみが出てくる。結果的に上記の部分を、以下のように変更した。 VScrolH = NewControl(targetWindow, &ScrolRect, "\p", false, 0, 0, 0, kControlScrollBarProc, 0) SetControl32BitMinimum (VScrolH, pageRect.top); SetControl32BitMaximum (VScrolH, pageRect.bottom - ( targetWindow->portRect.bottom - targetWindow->portRect.top)); SetControl32BitValue (VScrolH, targetWindow->portRect.top); SetControlViewSize (VScrolH, targetWindow->portRect.bottom - targetWindow->portRect.top); SetControlで始まる関数は、コントロールに値を与える。コントロールには最大値、最小値、現在の値の3つのパラメータがあったのだが、Appearanceに対応したコントロールの場合には、それぞれ「32Bit」という単語が入った名前の関数に置き換わる。さらに、つまみの大きさをSetControlViewSizeで設定する必要がある。上記のプログラムは、作成したウインドウがtargetWindow変数にあり、pageRectは編集領域を表すRect構造体となっている。なお、垂直のスクロールバーのプログラムを上記のように変更すると同様、水平のスクロールバーの作成部分も同じように変更する。 これらの新しい定義定数や関数を使うようにするためには、まず、ControlDefinisions.hをインクルードしなければならない。TextDrawのソースでは、Constants.hというヘッダにまとめてインクルードしているので、そこに記述を追加した。 さらに、ControlsLib(存在するフォルダは、CodeWarrior Pro 5→Metrowerks CodeWarrior→MacOS Support→Universal→Libraries→StubLibraries)を、プロジェクトに追加する必要がある。新しい関数の呼び出しライブラリで、これを含めておかないと、リンク時にエラーになる。 なお、TextDraw IIIのソースをコンパイルしたときには、kControlUpButtonPartという定義定数がないなどのエラーも出るが、これは、ContorlDefinitions.hをインクルードすれば、エラーは出なくなる。 こうして、Appearance対応のスクロールバーが出てくるが、スクロールバーの処理はウインドウの作成時以外にも行っている。しかしながら、スクロールしたときや、ウインドウのサイズを変更した時の処理は、一切変更しなくても、とりあえず少し使った限りではうまく動いている。これはなかなかすばらしい。例えば、ウインドウのサイズを変更した時に、SizeControl関数でスクロールバーのサイズを変えると、つまみの大きさも変更する必要があるのだが、その処理は自動的になされている。伸縮の度合いを見て、自動的に設定しているのだと思われる。スクロールした時などにスクロールバーの現在の値を設定する場合は、旧来の関数であるSetControlValueでも問題なく動いているようだ。とりあえずはこのまま行くことにする。 ◇AppearanceのスクロールバーになったTextDraw figs/carbon/fig01.png figs/carbon/fig01.gif (ソースプログラムについては、ある程度まとまった段階で、MDOnline講読者の方が利用できるようにする予定だ〜続く) | |
関連リンク |