Motif XP ライブラリは、ほとんどの MFC クラスおよびメソッドを Motif ウィジェットと X または UNIX 呼び出しに変換することで、Motif と Microsoft Windows との間でコード共有を可能にします。本章では、ライブラリについて説明します。
以下の情報を有効に活用するために、まず、取り扱う MFC クラスを確認してください。 「Motif ウィジェットの Microsoft Windows ウィジェットへの変換」で、この情報が記述されています。次に、本章で説明するクラスの記述を参照し、使用可能なメソッドを確認してください。
注 - xd _ で始まるすべての変数およびメソッドは、Motif XP に固有のものです。これらは Motif 上では使用することができますが、Microsoft Windows 上で使用することはできません。
MFC およびメソッドについての詳細は、Microsoft Windows 上で使用している環境に対応した MFC のマニュアルを参照してください。
Sun WorkShop Visual では、Motif XP に対してのソースコードが用意されています。ユーザーは、希望に応じてこのソースコードに内容を追加することができます。
Motif XP 用のソースコードは、$VISUROOT/src/motifxp/lib にあります ($VISUROOT は、Sun WorkShop Visual のインストールディレクトリです)。各クラスはそれぞれ独立したソースファイルを持っており、場所を示すコメントが付けられています。公開ヘッダー (インクルードファイル) は、 $VISUROOT/src/motifxp/h ディレクトリ内の xdclass.h にあります。
CFrameWnd クラスは、Microsoft Windowsの単一文書インタフェ−スのオ−バ−ラップした機能、あるいはポップアップフレ−ムウィンドウの機能を提供します。この機能は、アプリケーションシェル・ウィジェットをサポートするために、Sun WorkShop Visual が使用します。
シェルウィジェットに対しての XmNtitle の値を獲得します。ウィジェットがまだ作成されていない場合には 0 を返し、その他の場合にはテキストの長さを返します。
ウィジェットの XmNtitle リソースの長さを返します。ウィジェットがまだ作成されていない場合には 0 を返します。
CCmdTarget クラスは、XP ライブラリのメッセージマップ・アーキテクチャの基底クラスです。メッセージマップは、コマンドまたはメッセージをユーザー定義のメンバー関数へ送ります。この Motif バージョンには、機能が組み込まれていません。クラスは、Microsoft Windows コードとの互換性のためだけに組み込まれます。
CWnd クラスは、XP ライブラリ内にあるすべてのウィンドウクラスの基本機能を提供します。以下の MFC のメソッドが実装されています。
ウィジェットのウィンドウテキストを獲得します。これは、仮想メンバー関数 xd_get_window_text() を呼び出すことにより実装されます。
ウィジェットのウィンドウテキストの長さを獲得します。これは、仮想メンバー関数 xd_get_window_text_length() を呼び出すことにより実装されます。
ウィンドウを使用可能、あるいは使用不可能にします。ウィジェットがまだ作成されていない場合には 0 を、ウィジェットが以前に使用可能とされた場合には 0 を、そしてウィジェットが以前に使用不可能にされた場合には 0 以外を返します。
ウィジェットのウィンドウテキストを設定します。これは、仮想メンバー関数 xd_set_window_text() を呼び出すことにより実装されます。
ウィンドウを表示、アイコン化 (アプリケーションシェルまたは最上位シェルのみ) 、あるいは非表示にします。ウィジェットがまだ作成されていない場合には 0 を、ウィジェットが以前に非表示にされた場合には 0 を、そしてウィジェットが以前に可視状態にされた場合には 0 以外を返します。これは、仮想メンバー関数 xd_show_window() を呼び出すことにより実装されます。
最初の xd_call_data() は、そのクラスにコールバックの call_data を格納するために、Sun WorkShop Visual の生成したコードで使用されます。call_data は、2 番目の xd_call_data() を使用して、コールバック・メソッドに取り出すことが可能です。
CDialog クラスは、画面上にダイアログボックスを表示するために使用される基底クラスです。有効なクラスを作成するためには、通常は Cdialog から別のクラスを派生させます。
シェルウィジェットの XmNtitle の値を獲得します。ウィジェットがまだ作成されていない場合には 0 を返します。その他の場合にはテキストの長さを返して、そのテキストを lpszStringBuf に配置します。
ウィジェットの XmNtitle リソースの長さを返します。ウィジェットがまだ作成されていない場合には 0 を返します。
CScrollBar クラスは、Microsoft Windows のスクロールバーコントロールの機能を提供します。
ウィジェットが作成されている場合には、 lpMinPos および lpMaxPos を XmNminimum および XmNmaximum にそれぞれ設定します。
ウィジェットが設定されている場合には、 XmNvalue を nPos に設定し、以前の XmNvalue を返します。その他の場合には 0 を返します。
CFileDialog クラスは、Microsoft Windows の共通ファイルダイアログボックスをカプセル化します。それによって、(その他のファイル選択ダイアログボックスのように) 「開くファイル」および 「別名保存」ダイアログボックスが、Microsoft Windows 準拠の形式で容易に実装されます。
CFileDialog (BOOL bOpenFileDialog, LPCSTR lpszDefExt = NULL, LPCSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT, LPCSTR lpszFilter = NULL, CWnd* pParentWnd = NULL);
コンストラクタは、単純に CFileDialogObject を構築します。 lpszFileName および lpszFilter 引数は、 DoModal() メソッドでファイル選択ボックスの XmNdirSpec と XmNpattern リソースを設定するために使用されます。 pParentWnd リソースは、 CFrameWnd オブジェクトを指します。
XmNdirSpec および XmNpattern リソースをコンストラクタで指定されている通りに設定し、了解、取消し、ポップダウンコールバックが処理されるまで非公開イベントループを実行します。
ユーザーが取消しボタンを押した場合、あるいはウィンドウメニューからダイアログをポップダウンした場合に呼び出されます。ファイル選択を完了する必要がある場合、サブクラスは OnCancel() を上書きする際にこのメソッドを呼び出します。
クラス CMenu は、Microsoft Windows メニューコントロールを処理するためのクラスです。
トグルボタンに対応するメニュー項目に対してのチェック状態を設定します。 nCheck 引数は、項目の要求されている状態 ( MF_CHECKED または MF_UNCHECKED ) と nIDCheckItem の解釈 ( MF_BYCOMMAND および MF_BYPOSITION ) の両方を指定します。これらの 2 つの値は、ビットごとの OR、たとえば menu->CheckMenuItem ( ID_toggle_b , MF_BYCOMMAND | MF_CHECKED ) を使用して指定される必要があります。関数は、メニュー項目が見つからない、あるいはトグルボタンではない場合 (MFC Windows では、セパレータを含むどのようなメニュー項目もチェックすることが可能です) には、-1 を返します。その他の場合には、以前の状態 ( MF_CHECK または MF_UNCHECKED ) が返されます。 nCheck が MF_BYCOMMAND を含む場合には、すべてのサブメニューが検索されます。
メニュー項目を使用可能または不可能にします。 nEnable 引数は、項目の要求されている状態 ( MF_ENABLED または MF_GRAYED ) および nIDEnableItem の解釈 ( MF_BYCOMMAND および MF_BYPOSITION ) の両方を指定します。これらの 2 つの値は、ビットごとの OR、たとえば menu->EnableMenuItem ( ID_toggle_b , MF_BYCOMMAND | MF_GRAYED ) を使用して指定される必要があります。メニュー項目が見つからない場合、あるいは MF_BYCOMMAND が指定されていて、メニューバー、メニュー、セパレータまたはカスケードボタンである場合は、-1 を返します。その他の場合には、以前の状態 ( MF_ENABLED または MF_GRAYED ) が返されます。 nEnable が MF_BYCOMMAND を含む場合には、すべてのサブメニューが検索されます。 MF_DISABLED 状態 (応答不可能であるが、グレー表示されていない) はサポートされていないことに注意してください。
メニュー項目の状態を獲得します。 nFlags 引数は、 nID の解釈 ( MF_BYCOMMAND または MF_BYPOSITION ) を指定します。関数は、メニュー項目が見つからない場合、あるいは セパレータである場合に -1 を返します。その他の場合は、状態のビットごとの OR ( MF_CHECKED 、 MF_UNCHECKED 、 MF_SEPARATOR 、 MF_ENABLED または MF_GRAYED ) が返されます。 nFlags が MF_BYCOMMAND である場合には、すべてのサブメニューも検索されます。MFC の場合は、ポップアップメニューに対する GetMenuState では高順位バイトに項目数をも返します。これは、Motif XP ではサポートされていません。
この関数は、MFC Windows の TrackPopupMenu 関数と同様の動作をします。関数は、 pWnd によって指定されているウィンドウから call_data を取り出します (これは、コールバック関数によって保存されています) 。call_data にあるイベントが ButtonPress イベントである場合には、ポップアップメニューは call_data のイベントを使用して (関数引数ではない) 配置され、メニューがマネージされて、TRUE が返されます。その他の場合には、FALSE が返されます。
CComboBox クラスは、 ComboBox に等価のインタフェースを提供するためにオプションメニューをラップするために使用されます。
nIndex によって識別される項目のテキストのコピーを lpszText 内に獲得し、その長さを返します。ウィジェットがまだ作成されていない場合には 0 を返し、索引が範囲外である場合には LB_ERR を返します。
nIndex によって識別される項目のテキストの長さを返します。ウィジェットがまだ作成されていない場合には 0 を返し、索引が範囲外である場合には LB_ERR を返します。
現在の選択を、 nSelect によって識別される項目に設定します。ウィジェットがまだ作成されていない場合には 0 を返し、索引が範囲外である場合には LB_ERR を返します。その他の場合には、選択された項目の索引を返します。MFC Windows とは異なり、選択を消去するために nSelect を -1 として渡す動作処理はサポートされていません。
lpszStringBuf で選択された項目のテキストを返します。ウィジェットがまだ作成されていない場合には 0 を返し、選択された項目がない場合には LB_ERR を返します。その他の場合には、テキストの長さを返します。
CStatic クラスは、ラベルウィジェットと一緒に実装される単純なテキストフィールドである、Microsoft Windows の静的コントロールを実装します。
XmStringCreateLocalized() で作成されたXmString に、ウィジェットの XmNlabelString リソ−スを lpszString を使用して設定します
Cbutton クラスは、Microsoft Windows のボタンコントロールの機能を提供し、プッシュボタンまたはトグルボタンのいずれかとともに実装されます。
ボタンのチェック状態を獲得します。ウィジェットがまだ作成されていない、ウィジェットがトグルボタンではない、あるいはトグルボタンであっても設定されていない場合には 0 が返されます。ウィジェットがトグルボタンであり、設定されている場合は、1が返されます。MFC では、Motif XP でサポートされていない値 2 (未確定状態) を返すことができます。
XmStringCreateLocalized() で作成された XmString に、ウィジェットの XmNlabelString リソースを、 lpszString を使用して設定します。
CListBox クラスは、ユーザーが表示して選択することができる項目を表示するリストボックスの機能を提供します。
オブジェクトのリストウィジェットを返します。通常のリストの場合には、これはルートウィジェットと同じですが、スクロールリストの場合には、ルートウィジェットとは異なります。
nIndex (最初の項目は 0 ) によって識別されるリスト項目を削除します。ウィジェットがまだ作成されていない場合には 0 を返し、索引が範囲外、あるいはリスト内の残りの項目数以外の場合には LB_ERR を返します。
単一選択リスト内で現在選択されている項目の索引を獲得します ( XmNselectionPolicy が XmSINGLE_SELECT または XmBROWSE_SELECT である場合)。ウィジェットがまだ作成されていない場合は 0 を、リストが複数選択リストである場合または項目が選択されていない場合には LB_ERR を返します。その他の場合は、選択されている項目の索引が返されます。リストが複数選択リストである場合には、Motif XP は常に LB_ERR を返しますが、MFC は任意の正の値を返します。
nIndex によって示される項目の選択状態を返します。ウィジェットがまだ作成されていない、あるいは項目が選択されていない場合には 0 を返します。索引が範囲から外れている場合には LB_ERR を、また、項目が選択されている場合には正の値を返します。
複数選択リスト内で選択されている項目の数を返します。ウィジェットがまだ作成されていない場合には 0 を返します。リストが単一選択リストである場合には LB_ERR を、また、その他の場合には選択されている項目の数を返します。
複数選択リスト内で選択されている項目の索引を獲得し、それを配列 rgIndex にコピーします。ウィジェットがまだ作成されていない場合には 0 を、リストが単一選択リストである場合には LB_ERR を、また、その他の場合にはコピーされた索引の数を返します。
nIndex によって識別される項目のテキストを、 lpszBuffer に獲得します。ウィジェットがまだ作成されていない場合には 0 を、索引が範囲から外れている場合には LB_ERR を、また、その他の場合にはテキストの長さを返します。
nIndex によって識別されるテキストの長さを獲得します。ウィジェットがまだ作成されていない場合には 0 を、索引が範囲から外れている場合には LB_ERR を、また、その他の場合にはテキストの長さを返します。
nIndex により指定されたリスト内の位置に項目を挿入します。nIndex が -1 である場合には、項目はリストの末尾に追加されます。ウィジェットがまだ作成されていない場合には 0 を、索引が範囲から外れている場合には LB_ERR を、また、その他の場合には項目が挿入された位置が返されます。
bSelect に従って、複数選択リスト内の項目の範囲を選択あるいは選択解除します。ウィジェットがまだ作成されていない場合には 0 を、リストが単一選択リストである場合には LB_ERR を、また、その他の場合には LB_ERR 以外の値を返します。
単一選択リスト内で、 nSelect により識別される項目を選択し、スクロールしてその項目を表示します。 nSelect が -1 である場合には、選択は消去されます。ウィジェットがまだ作成されていない場合には 0 を、リストが複数選択リストである、あるいは索引が範囲から外れている場合には LB_ERR を、また、その他の場合には LB_ERR 以外の値を返します。
クラス CEdit は、ユーザーがテキストを入力することが可能な矩形ウィンドウである、Microsoft Windows 編集コントロールの機能を提供します。テキストまたはテキストフィールドウィジェットと一緒に実装されます。
オブジェクトのテキストウィジェットを返します。通常のテキストに対しては、これはルートウィジェットと同じですが、スクロールテキストの場合には異なっています。
選択されているテキストの先頭および末尾を獲得します。テキストが選択されていない場合には、先頭および末尾を 0 として返します。
現在の選択を、 lpszNewText 内に供給されるテキストで置き換えます。選択が存在しない場合には、挿入カーソル位置にテキストが挿入されます。
ウィジェットの XmNeditable リソースを、! bReadOnly になるように設定します。ウィジェットがまだ作成されていない場合には 0 を、また、その他の場合には 1 を返します。
現在の選択を nStartChar および nEndChar によって指定されているテキストに設定します。また、 XmNautoShowCursorPosition を ! bNoScroll に設定します。
C++ コンパイラによっては、リンクに失敗すると、以下のようなエラーが発生します。
Undefined symbol
CWnd::xd_get_window_text_length(void) const
CFrameWnd::xd_get_window_text_length(void) const
CButton::xd_get_window_text_length(void) const
CButton::__vtbl
CMenu::xd_register_menu_item(unsigned int,
_WidgetRec*)
CDialog::xd_show_window(int)
CDialog::xd_get_window_text_length(void) const
CDialog::xd_set_window_text(const char*)
CEdit::__vtbl
private:
// Certain C++ compilers (e.g. gcc 2.5) require there to be an
// implementation of the copy constructor. If your application
// fails to link try using the second version of the constructor
CObject(const CObject& objectSrc); // no default copy
//CObject(const CObject& objectSrc) { abort();} // no default
copy
//CObject(const CObject& objectSrc);
// no default copy
CObject(const CObject& objectSrc) { abort();}
// no default copy
#include <stdlib.h>
サン・マイクロシステムズ株式会社 Copyright information. All rights reserved. |