前提
MFCでメインダイアログのOnInitDialog()の中でファイル読み込みを行い、その内容をリストコントロールに表示するダイアログを作成しています。
ファイル読み込みは時間がかかるのでファイル読み込み前にスレッドを作成し、その中で別ダイアログを表示させています。
ファイル読み込みが終わるとその別ダイアログを閉じます。
その後メインダイアログが表示されます。
発生している問題
フォルダ内にあるexeをクリックして起動するとメインダイアログがそのフォルダの後ろに隠れてしまいます。
メインのダイアログが起動時のみ最前面に表示させる方法を教えてください。
ちなみにフォルダの後ろに別の何かがあってもその後ろには行きません。
該当のソースコード
MFC
1FileLoadDlg fileDlg(NULL); 2HANDLE LoadThread = NULL; 3 4BOOL mainDlg::OnInitDialog() 5{ 6 //省略 7 FileLoad(); 8 //省略 9 10 SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE); //ダイアログを前面に表示したい 11 12 return TRUE; 13} 14 15void mainDlg::FileLoad() 16{ 17 //省略 18 if (file.Open(FilePath, CFile::modeRead)) 19 { 20 //ファイル読み込み開始 21 LoadThread = CreateThread(NULL, (LPTHREAD_START_ROUTINE)FileLoadThread, this, 0, &threadID); //スレッド開始 22 23 //ファイル読み込み 24 25 //ファイル読み込み終了 26 if (LoadThread != NULL) 27 { 28 fileDlg.PostMessage(WM_DELETE_DIALOG, 0); //別ダイアログ削除 29 30 //スレッド終了 31 while (WaitForSingleObject(LoadThread, 0) != WAIT_OBJECT_0) 32 { 33 //繰り返し 34 } 35 } 36 } 37 //省略 38} 39 40void mainDlg::FileLoadThread() 41{ 42 fileDlg.DoModal(); //別ダイアログ表示 43} 44 45 46
試したこと
メインダイアログのプロパティでTopmostにすると全面に表示されますが、その後にメッセージボックスを表示させるとメインダイアログより前に出てきませんでした。
SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_NOMOVE); をOnInitDialog()のreturn TRUE;の前に配置するとメインダイアログが表示されなくなりました。
補足情報(FW/ツールのバージョンなど)
Visual Studio 2010 Professional
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/12 02:03
2021/01/12 02:13
2021/01/12 02:16 編集
2021/01/12 02:52
2021/01/12 03:03
2021/01/12 03:12
2021/01/12 03:18
2021/01/12 03:41
2021/01/12 04:47
2021/01/12 05:13
2021/01/12 07:49
2021/01/12 07:56 編集