DoModalを利用してダイアログ立ち上げるとマウスが使えない – プログラミング – Home

DoModalを利用してダイアログ立ち...
 
通知
すべてクリア

DoModalを利用してダイアログ立ち上げるとマウスが使えない


竹下
 竹下
(@竹下)
ゲスト
結合: 20年前
投稿: 7
Topic starter  

VC++6.0で開発しておる者です。
DoModalを利用してダイアログ立ち上げると、マウスが使えない状態になってしまいま
す。
何故かキーボードは有効です。
それともう一つ、
一度違ウィンドウ(例えばエクスプローラーなど)をに触ってから
もう一度ダイアログを触ると、今度は正常に動作します。

ソースはこれです。

DeleteDlg MyDeleteDlg
MyDeleteDlg.DoModal();


引用解決済
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>マウスが使えない状態になってしまいます。
とは?クリックが効かないとか?

DoModalの処理はドコで(どのタイミングで)行っているのでしょうか?

それと一応OSも明記したほうがいいかも。


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

…肝心のDeleteDlg クラスの実装がかかれていないことには何ともはや。


返信引用
竹下
 竹下
(@竹下)
ゲスト
結合: 20年前
投稿: 7
Topic starter  

マウスのクリックが効かなくなってしまいます。
OSですがWindowsXPを使用しています。
DeleteDlgはCDialogを継承したクラスで、VisualC++のクラスウィザードを利用して作成
したクラスです。


返信引用
lala
 lala
(@lala)
ゲスト
結合: 20年前
投稿: 1
 

たぶんWindowをアクティブにしていないのが原因だと思う。
やり方はいまいち状況よめないので。わかりません。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

>DoModalの処理はドコで(どのタイミングで)行っているのでしょうか?
の質問に対するの答えは?

ナンカのイベントのときに呼び出すとそうなるケースがあると思うんですけど。

# 実際私も、リストビューのカラムクリックイベントでダイアログを上げたら
# そうなりました。(PostMessageかなんかして解決したけど)


返信引用
竹下
 竹下
(@竹下)
ゲスト
結合: 20年前
投稿: 7
Topic starter  

竹下です。
遅れてすみませんでした。

CxxxxApp.h ------------------------
afx_msg void DeleteSelected();

CxxxxApp.cpp ------------------------

BEGIN_MESSAGE_MAP(CxxxApp, CWinApp)
ON_COMMAND(ID_DELETE,DeleteSelected)
END_MESSAGE_MAP()

void CxxxxApp::DeleteSelected(){
DeleteDlg MyDeleteDlg
MyDeleteDlg.DoModal();
}

これで呼び出しています。


返信引用
竹下
 竹下
(@竹下)
ゲスト
結合: 20年前
投稿: 7
Topic starter  

>DoModalの処理はドコで(どのタイミングで)行っているのでしょうか?
の質問の答えがわかりました。

DeleteSelectedというメソッドはメニューからとマウスの右クリックで出すポップアップメニュ
ーから呼び出します。
先ほどわかったのですが、メニューから呼び出すときは正常に呼び出されます。
ポップアップメニューから呼び出しが上手くいきません。

下記のソースを書きます。
void CxxxView::OnRButtonDown(UINT inFlags, CPoint ipoint)
{
// サブメニュー( ポップアップ)
CMenu DataTransferMenu;

// メインポップアップメニュー
m_Menu.CreatePopupMenu();
m_Menu.AppendMenu(MF_STRING|MF_ENABLED,ID_FILE_OPEN ,開く(&O));
m_Menu.AppendMenu(MF_STRING|MF_ENABLED,ID_FILE_PRINT ,印刷(&P));
m_Menu.AppendMenu(MF_SEPARATOR);

// ####### ID_DELETE 追加処理 ########################
m_Menu.AppendMenu(MF_STRING|MF_ENABLED,ID_DELETE ,削除(&D));

ClientToScreen(&ipoint);
m_Menu.TrackPopupMenu(
TPM_LEFTALIGN | //クリック時のX座標をメニューの左辺にする
TPM_RIGHTBUTTON, //右クリックでメニュー選択可能とする
ipoint.x,ipoint.y, //メニューの表示位置
this //このメニューを所有するウィンドウ
);
m_Menu.DestroyMenu();

CListView::OnRButtonDown(inFlags, ipoint);
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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