いつもお世話になります。
Win2K, VC6.0++, MFCです。
Dialogベースのプログラムでマウスカーソルの動きを制限するべく、以下のコードを書きまし
たが、コンパイルできません。
単純にクライアント領域のみに制限するだけならば、CMainFrame::を取ればうまくいくのです
が、それだとメニューにもカーソルがアクセスできなくなるので、クライアント領域だけでな
く、親の領域(<--このような表現が適切か知らないのですが)にもアクセスできるようにしたい
のですが。
void CBlockHitGameView::OnDraw(CDC* pDC)
{
	CBlockHitGameDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: この場所にネイティブ データ用の描画コードを追加します。
	CRect clientRect;
	CMainFrame::GetWindowRect(&clientRect);//静的でないメンバ関数の中で呼び出
しが正しくありません。
	ClipCursor(&clientRect);	//'GetWindowRect' の宣言を確認してください。
上記のコンパイルエラーが出現します。
宜しくお願いします。
DialogベースでViewやMainFrameが出てくるのは不思議ですが、
実はSDIであれば、
AfxGetMainWnd()->GetWindowRect(...);
です。
あるいは、GetParent()で順番に親を辿っていって、
親を持たないウィンドウが一番外側の枠です。
インスタンス関数と静的関数の違いを理解しておきましょう。
dairygoods 様、
何時もご指導有難うございます。
ご指摘の如く、SDI baseでした。これすらも自分で分からなくなっているのは、自分の脳みそ
が腐っているためだと思います。申し訳ありません、
つきまては、
>インスタンス関数と静的関数の違いを理解しておきましょう。
というのが理解できません。
もう少しヒントを与えて頂けませんでしょうか。
例によって、毎週末の遠方への出張のために、今も新幹線の中ですので充分にコードを試みるこ
とができません。
本当に申し訳ありません。
適当な参考書を読んでください。
呼び出しにインスタンスを必要とするか否かの違いがあります。
C++の入門ページを一通り読んだらどうですか?
勉強します。有難うございました。
失礼しました。解決の具体的コードを記します。
	CRect clientRect;
	CMainFrame::GetWindowRect(&clientRect);
	ClipCursor(&clientRect);	
これでは駄目、
これはOK
	CRect r;
	AfxGetMainWnd()->GetWindowRect(&r);
	ClipCursor(&r);
これもOK
	CWnd* pw;
	pw = GetParent();
	CRect r;
	pw->GetWindowRect(&r);
	ClipCursor(&r);
でした。インスタンス関数、おぼろげながら理解しつつあります。
>あるいは、GetParent()で順番に親を辿っていって、
ところで、GetParent()はCWnd*の引数を取りませんが、どのように辿っていけばよいでしょう
か。
>::GetParent
HWND hWndChild;
HWND hWndParent = GetParent(hWndChild);
>CWnd::GetParent
CWnd* pWndChild;
CWnd* pWndParent = pWndChild->GetParent();
RAPT様、
ご指導ありがとうございます。
色々とトライしてみます。
