VC++6.0で開発しておる者です。
DoModalを利用してダイアログ立ち上げると、マウスが使えない状態になってしまいま
す。
何故かキーボードは有効です。
それともう一つ、
一度違ウィンドウ(例えばエクスプローラーなど)をに触ってから
もう一度ダイアログを触ると、今度は正常に動作します。
ソースはこれです。
DeleteDlg MyDeleteDlg
MyDeleteDlg.DoModal();
>マウスが使えない状態になってしまいます。
とは?クリックが効かないとか?
DoModalの処理はドコで(どのタイミングで)行っているのでしょうか?
それと一応OSも明記したほうがいいかも。
…肝心のDeleteDlg クラスの実装がかかれていないことには何ともはや。
マウスのクリックが効かなくなってしまいます。
OSですがWindowsXPを使用しています。
DeleteDlgはCDialogを継承したクラスで、VisualC++のクラスウィザードを利用して作成
したクラスです。
たぶんWindowをアクティブにしていないのが原因だと思う。
やり方はいまいち状況よめないので。わかりません。
>DoModalの処理はドコで(どのタイミングで)行っているのでしょうか?
の質問に対するの答えは?
ナンカのイベントのときに呼び出すとそうなるケースがあると思うんですけど。
# 実際私も、リストビューのカラムクリックイベントでダイアログを上げたら
# そうなりました。(PostMessageかなんかして解決したけど)
竹下です。
遅れてすみませんでした。
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();
}
これで呼び出しています。
>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);
}