ウィンドウサイズ変更時のダイアログ起動について – プログラミング – Home

ウィンドウサイズ変更時のダイアログ起動...
 
通知
すべてクリア

[解決済] ウィンドウサイズ変更時のダイアログ起動について


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

こんにちは

■開発環境: VC++6.0 MFC MDI, XP(SP3)

MDIアプリでViewのウィンドウの境界を掴んでサイズ変更しようとしたときに
ダイアログをDoModalで出しユーザー認証を求める、といった動作をさせたいです。

まずViewクラスのOnSize()内にダイアログ表示処理を追加したところ、
マウス操作ができない現象がありました(枠拡大カーソルのまま。tabキーでは移動可)。

他に試したこと:
ChildFrame内のOnGetMinMaxInfo()にダイアログ表示処理を記述

→この場合、マウス操作は出来るもののダイアログを閉じた後に
 ウィンドウの境界を掴みっぱなしになるという現象が出てしまいました。

このような現象を回避できる方法をご教示いただけましたらと思います。
どうぞよろしくお願いいたします。


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

CChildFrameにて
WM_NCLBUTTONDOWN(OnNcLButtonDown)のメッセージを使う。

OnNcLButtonDownの第1引数のnHitTestの値を見れば、
押されたときにカーソルがどの位置にあるかわかる。
境界線上にあるなら、望みの処理を行う。

#2005以降しかもってないので、VC6としての資料は確認してないです。


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

ryoさん、ありがとうございます。

OnNcLButtonDownの中で、ダイアログを呼び出したところ
マウス操作ができない現象が回避できました。

ダイアログを閉じた後はやはり境界線を掴みっぱなしになったため、
WM_LBUTTONUPをSendしてあげることで解決できました。


返信引用
ryo
 ryo
(@ryo)
ゲスト
結合: 23年前
投稿: 252
 

>ダイアログを閉じた後はやはり境界線を掴みっぱなしになったため、
>WM_LBUTTONUPをSendしてあげることで解決できました。
推測ですが、認証・ダイアログなどの追加した処理を行ったあとに
OnNcLButtonDownの本来の動作を行っていませんか?

OnNcLButtonDownをクラスウィザードなどで追加した場合

CChildFrame::OnNcLButtonDown( nHittest,point)
{
CMDICihldFrameWnd::OnNcLButtonDown(nHittest,point);  //*1
}

となっていたと思います。
この*1の行が、継承元の関数を呼び出す、つまり「本来の動作を呼び出す」ための一行
です。
なので、「本来の動作をさせたくない」場合は、こいつを避ける必要があります。

たとえば、こんな感じ
CChildFrame::OnNcLButtonDown( nHittest,point)
{
if( nHittest関連){
// 認証処理
return; //ここで抜ける
}
CMDICihldFrameWnd::OnNcLButtonDown(nHittest,point);  //*1
}


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

仰るとおり、
CMDICihldFrameWnd::OnNcLButtonDown(nHittest,point);  //*1
が必ず通るようになっていたため、でした。

とても勉強になりました。ありがとうございました!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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