いつもお世話になります。
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様、
ご指導ありがとうございます。
色々とトライしてみます。