目次に戻る
一覧ページに戻る
CPWindow::AttachWindowEvent
2001/12/29 update.
ウィンドウ操作が行われたときに呼ばれるコールバック関数を設定します。

書式

  typedef void (* LP_WINDOWPROC)(CPWindow *,CPSTWindowEvent);
  void AttachWindowEvent(LP_WINDOWPROC WindowEvent);

パラメータ


WindowEvent
「void xxxx(CPWindow *,CPSTWindowEvent)」型のstatic関数を指定します。
コールバック関数の第一引数にCPWindowクラスのポインタ、第二引数にウィンドウの状態が格納されたCPSTWindowEvent構造体の情報が入ります。

解説


ウィンドウ操作が行われたときに呼ばれるコールバック関数を設定します。
なお、コールバック関数は必ずstaticの静的関数である必要があります。

コールバック関数の第二引数の「CPSTWindowEvent」では、EventCode に「CP_WINDOWEVENT_CREATE / CP_WINDOWEVENT_DESTROY / CP_WINDOWEVENT_PAINT / CP_WINDOWEVENT_ACTIVE / CP_WINDOWEVENT_NONACTIVE」が入ります。
「CP_WINDOWEVENT_RESIZE」によるウィンドウのリサイズの検出は現在サポートされていません。

コールバックを解除する場合は「DetachWindowEvent( )」を呼び出してください。





ウィンドウ(ダイアログ)を生成して、その中でコールバック関数より再描画のイベントを取得し、独自の描画を行います。

CPWindow win;

//ウィンドウイベントを受け取る
static void OnWindowEvent(CPWindow *lpWin,CPSTWindowEvent ev)
{
    //再描画イベントの場合
    if(ev.EventCode==CP_WINDOWEVENT_PAINT)
    {
        //描画開始
        lpWin->BeginPaint();

        //円を青色で塗りつぶし描画
        lpWin->SetForegroundColor(CP_RGB(0,0,255));
        lpWin->DrawFillCircle(20,20,100,100);

        //描画終了
        lpWin->EndPaint();
    }
}

void main()
{
    //ダイアログを生成する
    win.Clear();
    win.CreateNewDialog("TestDialog",120,120,120,120);

    //ウィンドウイベントのコールバック関数指定
    win.AttachWindowEvent(OnWindowEvent);

    //ダイアログの表示・イベントループの開始
    win.DoModal();
}

この例では、ウィンドウイベントが発生した場合に、「OnWindowEvent」関数が呼ばれます。
このコールバック関数内では、イベントの種類が再描画(CP_WINDOWEVENT_PAINT)であるときに、 「CPWindow::BeginPaint」から「CPWindow::EndPaint」で囲まれた中で独自の描画処理を行っています。

結果、以下のようなダイアログが表示されます。




ビルド時に必要なファイル


ライブラリ :CPartsLib.lib (Macintoshの場合は、CPartsCW.a)
ヘッダ :CPWindow.h


関連リンク


CPWindowクラス
CPWindow::DetachWindowEvent