マウスカーソルの制限 – プログラミング – Home

通知
すべてクリア

[解決済] マウスカーソルの制限


Beginner
 Beginner
(@Beginner)
ゲスト
結合: 23年前
投稿: 63
Topic starter  

いつもお世話になります。
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' の宣言を確認してください。

上記のコンパイルエラーが出現します。

宜しくお願いします。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

DialogベースでViewやMainFrameが出てくるのは不思議ですが、
実はSDIであれば、
AfxGetMainWnd()->GetWindowRect(...);
です。

あるいは、GetParent()で順番に親を辿っていって、
親を持たないウィンドウが一番外側の枠です。

インスタンス関数と静的関数の違いを理解しておきましょう。


返信引用
Beginner
 Beginner
(@Beginner)
ゲスト
結合: 23年前
投稿: 63
Topic starter  

dairygoods 様、

何時もご指導有難うございます。
ご指摘の如く、SDI baseでした。これすらも自分で分からなくなっているのは、自分の脳みそ
が腐っているためだと思います。申し訳ありません、

つきまては、

>インスタンス関数と静的関数の違いを理解しておきましょう。

というのが理解できません。
もう少しヒントを与えて頂けませんでしょうか。
例によって、毎週末の遠方への出張のために、今も新幹線の中ですので充分にコードを試みるこ
とができません。
本当に申し訳ありません。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

適当な参考書を読んでください。
呼び出しにインスタンスを必要とするか否かの違いがあります。


返信引用
hu
 hu
(@hu)
ゲスト
結合: 22年前
投稿: 4
 

C++の入門ページを一通り読んだらどうですか?


返信引用
Beginner
 Beginner
(@Beginner)
ゲスト
結合: 23年前
投稿: 63
Topic starter  

勉強します。有難うございました。


返信引用
Beginner
 Beginner
(@Beginner)
ゲスト
結合: 23年前
投稿: 63
Topic starter  

失礼しました。解決の具体的コードを記します。

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*の引数を取りませんが、どのように辿っていけばよいでしょう
か。


返信引用
RAPT
 RAPT
(@RAPT)
ゲスト
結合: 22年前
投稿: 10
 

>::GetParent
HWND hWndChild;
HWND hWndParent = GetParent(hWndChild);

>CWnd::GetParent
CWnd* pWndChild;
CWnd* pWndParent = pWndChild->GetParent();


返信引用
Beginner
 Beginner
(@Beginner)
ゲスト
結合: 23年前
投稿: 63
Topic starter  

RAPT様、

ご指導ありがとうございます。
色々とトライしてみます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました