子ウィンドウについて

[戻る]
SHO 2008/04/13(日) 18:58:31
VCを勉強中でダイアログベースのテストサンプルを作っています。
CustomListはCWndを継承したクラスです。

そこで、親ウィンドウが受けたOnPaintのメッセージを
子ウィンドウでも受け取るにはどうしたらいいのでしょうか?

BOOL CTestDlg::OnInitDialog()
{
  CDialog::OnInitDialog();
  
  // 子ウィドウの作成
  m_CustomWnd.Create(NULL, NULL, WS_CHILD, CRect(0, 0, 100, 100), this, 100);

  return TRUE;  
}

wclrp ( 'o') 2008/04/14(月) 00:03:45
そんなことしなくても
子ウィンドウの領域に再描画が必要ならOnPaintが発生するから必要ないと思うんだけど。

CTestDlg::OnPaint内で
m_CustomWnd.Invalidate();
m_CustomWnd.UpdateWindow();

親ウィンドウの一部の描画のためのCTestDlg::OnPaintであっても
子ウィンドウの全体の描画をすることになるよ。

動作確認していないのでうまくいくかわかりません。

SHO 2008/04/14(月) 15:46:10
CTestDlg::OnPaint内で
m_CustomWnd.Invalidate();
m_CustomWnd.UpdateWindow();

両方とも試して見ましたが特に飛んでくる様子はありません。。
CCustomWndに下記の3つを追加しただけなのですが
なにか間違えていますでしょうか?

void CCustomWnd::OnPaint() 

BEGIN_MESSAGE_MAP(CCustomWnd, CWnd)
    ON_WM_SIZE()
    ON_WM_PAINT()
END_MESSAGE_MAP()

afx_msg void OnPaint();

wclrp ( 'o') 2008/04/14(月) 20:51:53
ウィンドウスタイルにWS_VISIBLEがないな。
ほかに何が必要かはわからない。

SHO 2008/04/14(月) 22:11:26
[[解決]]
ありがとうございます。
WS_VISIBLEでOnPaintが呼ばれました。

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