現在、暇を見付けてはMDI形式で作成しているのですが、全体のウインドウハンドル
をうまく取得できず困ってます。(取得自体はできた。)Veiw.cppのOnDraw()内で
GetParent()を使えば何かうまくいくようですが、何故でしょう?描画だからクライアント領域から見るのだと思うのですが、この領域の親が子ウインドウの全体を
指すと言うことでしょうか?(変な言いまわしでスミマセン)
また、View.cppではMDIGetActive()を呼び出せません。(これが使用出来れば問題なかったのだが)使用には何か条件がいるのでしょうか。
追記
::GetParent()と::を付けると引数を聞いてきてコンパイルが通りません。
::この記号の意味は何でしょう?(コード内のその位置で使用できる関数を列挙するものだとばかり思ってました)
ちょっと長くなってしまいましたが、お願いします、教えて下さい。
>全体のウインドウハンドル
とは?
MDIの場合
MDI Frame Window (User defined)
- MDI Client Window (System defined ["MDICLIENT"])
- MDI Child Window (User defined)
というウィンドウの階層になります。
ViewはたぶんMDI Child Windowに付随すると思うのですが,
GetParentすればMDI Client Windowが取得されると思いますよ。
#MFCは使わない人間ので……。
>::この記号の意味は何でしょう?
スコープ解決演算子です。名前が所属する名前空間やクラスを指定します。
演算子の前に識別子がない場合は大域名前空間を意味します。
結果として,MFCのCWnd::GetParentではなく,APIのGetParentを呼び出すようになります。
GetParentのプロトタイプは
HWND GetParent(HWND);
ですから,引数が一つ必要です。
全体のウインドウハンドル = 子ウインドウのウインドウハンドルです
目的として、子ウインドウのサイズを変更したかったので。
そんな訳で今の所はこんなソース使ってます。
GetParent()はMDI Client Window を取得してると思ってるのですが、
以下なにか変な所有るのでしょうか?
void CImageViewView::OnDraw(CDC* pDC)
{
CImageViewDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: この場所にネイティブ データ用の描画コードを追加します。
if(draw == TRUE){
// 子フレームウインドウハンドル取得(クライアント領域部)
HWND hWnd = pDC->GetWindow()->m_hWnd;
Image.Draw(hWnd);
// 描画するビットマップの大きさに合わせて子ウインドウを変更
CWnd* ChildWnd = GetParent();
ChildWnd->MoveWindow(0,0,Image.GetWide(),
Image.GetHeight(),TRUE);
}
}
ありがとうございました。
ツイート | ![]() |