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

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

ソースはこれです。

DeleteDlg MyDeleteDlg
MyDeleteDlg.DoModal();

Blue 2005/05/03(火) 15:28:15
>マウスが使えない状態になってしまいます。
とは?クリックが効かないとか?

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

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

RAPT 2005/05/04(水) 00:05:13
…肝心のDeleteDlg クラスの実装がかかれていないことには何ともはや。

竹下 2005/05/04(水) 14:40:24
マウスのクリックが効かなくなってしまいます。
OSですがWindowsXPを使用しています。
DeleteDlgはCDialogを継承したクラスで、VisualC++のクラスウィザードを利用して作成
したクラスです。

lala 2005/05/04(水) 16:19:08
たぶんWindowをアクティブにしていないのが原因だと思う。
やり方はいまいち状況よめないので。わかりません。

Blue 2005/05/04(水) 22:16:18
>DoModalの処理はドコで(どのタイミングで)行っているのでしょうか?
の質問に対するの答えは?

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

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

竹下 2005/05/04(水) 22:35:10
竹下です。
遅れてすみませんでした。

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();
}

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

竹下 2005/05/04(水) 22:50:01
>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);
}

古いスレッドには追加発言できません。