親ウィンドウでイベント処理をする

[戻る]
SHO 2008/04/21(月) 19:57:16
子クラスで受けたWM_NCHITTESTのイベントを親ウィンドウで
処理させたいのですがその場合、どうしたらいいのでしょうか?

親にメッセージを送る?のが一番いい方法なのでしょうか?
その場合は、親ウィンドウのWinProc?で処理させるのでしょうか?

初心者ですみません。

LRESULT CViewTest::OnNcHitTest(CPoint point)
{
    return CWnd::OnNcHitTest(point);
}

SHO 2008/04/21(月) 20:30:48
すみません、説明を追加します。
親ウィンドウで子ウィンドウ(親と同じサイズ)を作成し
親ウィンドウと子ウィンドウを一緒に移動させたいのです。

子で下記のようにすると子だけが動いてしまいます。
親と子を一緒に移動させるにはどうしたらいいでしょうか?

LRESULT CViewTest::OnNcHitTest(CPoint point)
{
    return return HTCAPTION;
}

Kerry 2008/04/21(月) 22:00:26
↓こんな感じでどうでしょうか?

LRESULT CViewTest::OnNcHitTest(CPoint point)
{
    return HTTRANSPARENT;
}

LRESULT 親ウィンドウ::OnNcHitTest(CPoint point)
{
    LRESULT result = 基本クラス::OnNcHitTest(point);
    if (result == HTCLIENT)
        return HTCAPTION;
    else
        return result;
}

HTTRANSPARENTを返せば、自身をすり抜けて後ろのウィンドウ
(すなわち親ウィンドウ)にWM_NCHITTESTメッセージが流れます。

複数の子ウィンドウが重なっているようなケースでは上手く
いかないかもしれません。

SHO 2008/04/22(火) 10:58:19
ありがとうございます。
これで親ウィンドウを移動させることができました。

同じようにして右端にある場合は、サイズを変更するみたいなことが
なことをしたいのですが、これだとHTBOTTOMRIGHTが飛んできません。
こういう使い方はできないということなのでしょうか?

LRESULT 親ウィンドウ::OnNcHitTest(CPoint point)
{
    LRESULT result = 基本クラス::OnNcHitTest(point);
  
  if (result == HTBOTTOMRIGHT)
      //処理?? 

    if (result == HTCLIENT)
        return HTCAPTION;
    else
        return result;
}

SHO 2008/04/22(火) 11:56:27
下記のようにようにすればウィンドウの移動とサイズ変更が可能になりました。
サイズ変更する場合は、子ウィンドウのサイズが変更されません。
子ウィンドウのサイズをMoveWindowで変更するしか方法はないのでしょうか?

LRESULT 親ウィンドウ::OnNcHitTest(CPoint point)
{  
  LRESULT result = 基本クラス::OnNcHitTest(point);

  if (point タイトルバーのマウスが範囲内だったら)
        return HTCAPTION;

   if (point サイズ変更可能な範囲内だったら)
        return HTBOTTOMRIGHT;
 
  return result;
}

古いスレッドには追加発言できません。