Dodonpa2のプロフィール
- ベストアンサー数
- 19
- ベストアンサー率
- 82%
- お礼率
- 0%
- 登録日2007/08/23
- MFCダイアログの終了判定
開発環境:VC++2008 MFCダイアログ プロジェクト作成名:test 簡単なMFCの処理内容を勉強しています。 画像のようなダイアログベースで処理を行っており、 処理の流れは以下です。 1. "参照"で実行ファイルを選択 2. "エディットコントロール"で読み込んだディレクトリの絶対パスを表示 3. "起動"で実行を行う。 上記のプログラムにINIでの保存/読み込みを追加し、(iniは本プログラムと同階層に) 毎回、参照から読み込まなくても、次回以降は自動で変数に読み込まれるようにしようと思ってます。 そこで分からないことが2つあります。 ・質問1: test.cppで閉じるボタンが押されたときに処理を行う方法 ・質問2: INIの同ディレクトリに保存をtestDlg.cpp側で行う方法 質問1補足: 以下のようなOK/キャンセル処理が最初からありますが、 これらのような形式でtest.cpp側で終了判定を行いたいです。 --------------------------------------- INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: ダイアログが <OK> で消された時のコードを // 記述してください。 } else if (nResponse == IDCANCEL) { // TODO: ダイアログが <キャンセル> で消された時のコードを // 記述してください。 } --------------------------------------- ですが、私のプログラムではOK/キャンセルは使っていないので 閉じるボタンを押したとき、上記のような処理をさせることはできないでしょうか? できるならば、そこにINIの保存処理を入れたいと思います。 質問2補足: test.cppのCtestApp::InitInstance()にて --------------------------------------- TCHAR path[_MAX_PATH+1]; GetModuleFileName( NULL, path, _MAX_PATH ); PathRenameExtension( path, TEXT(".ini") ); free((void*)m_pszProfileName); m_pszProfileName=_tcsdup(path); --------------------------------------- "本プログラムを実行したときと同じディレクトリにINIを保存する" ようにしているので testDlg.cppでボタンを押したときに保存する処理を行うと、 保存される場所がWINDOWSファイルの方に行ってしまうため、 どうしていいかわからない状況です。 初歩的な質問ですが、何卒宜しくお願いします。
- 締切済み
- C・C++・C#
- tester-goo0459
- 回答数1
- 別スレッドのデータを受信できない
VC6 MFCです。 よく調べない無精な質問ですがご容赦ください。 別(受信)スレッド中にあるデータをWindowsメインスレッドで受信できません。 public: unsigned long data; HWND hWnd; 受信スレッド: while(1){ ・・・・・・・ ::PostMessageA(hWnd, data, 0, 0); //::SetMessageExtraInfo( data ); ・・・・・・・ } メインスレッド FormView クラス: hWnd = GetSafeHwnd(); MSG msg; while(1){ ・・・・・・・ ::GetMessage( &msg, NULL, 0, 0 ); //data = ::GetMessageExtraInfo(); ・・・・・・・ } これでmsg.messageを観測すると10回に1回データが来ているようです。それとは別のメッセージも含まれ、メッセージキューの格納順序がわからないため『正しい』データの切り出しができません。 **MessageExtraInfo()で付加情報として取得できないかとも考えたのですが、これも失敗しました。 非常に遅くもなります。 ::PostMessageA, ::GetMessageの組み合わせ以外を考えた方がいいのかもしれませんが、メインスレッドのIDを取得する方法が分かりません。 Linuxでは両スレッドのIDが簡単に取得でき、msgsnd, msgrcvで目的のdataが得られたのですが、Windowsではそうはいきませんでした。 メッセージ周りに関する基本理解を欠いておりますが、とにかく結果だけだしたくご教示願えれば幸いです。
- 別スレッドのデータを受信できない
VC6 MFCです。 よく調べない無精な質問ですがご容赦ください。 別(受信)スレッド中にあるデータをWindowsメインスレッドで受信できません。 public: unsigned long data; HWND hWnd; 受信スレッド: while(1){ ・・・・・・・ ::PostMessageA(hWnd, data, 0, 0); //::SetMessageExtraInfo( data ); ・・・・・・・ } メインスレッド FormView クラス: hWnd = GetSafeHwnd(); MSG msg; while(1){ ・・・・・・・ ::GetMessage( &msg, NULL, 0, 0 ); //data = ::GetMessageExtraInfo(); ・・・・・・・ } これでmsg.messageを観測すると10回に1回データが来ているようです。それとは別のメッセージも含まれ、メッセージキューの格納順序がわからないため『正しい』データの切り出しができません。 **MessageExtraInfo()で付加情報として取得できないかとも考えたのですが、これも失敗しました。 非常に遅くもなります。 ::PostMessageA, ::GetMessageの組み合わせ以外を考えた方がいいのかもしれませんが、メインスレッドのIDを取得する方法が分かりません。 Linuxでは両スレッドのIDが簡単に取得でき、msgsnd, msgrcvで目的のdataが得られたのですが、Windowsではそうはいきませんでした。 メッセージ周りに関する基本理解を欠いておりますが、とにかく結果だけだしたくご教示願えれば幸いです。
- 別スレッドのデータを受信できない
VC6 MFCです。 よく調べない無精な質問ですがご容赦ください。 別(受信)スレッド中にあるデータをWindowsメインスレッドで受信できません。 public: unsigned long data; HWND hWnd; 受信スレッド: while(1){ ・・・・・・・ ::PostMessageA(hWnd, data, 0, 0); //::SetMessageExtraInfo( data ); ・・・・・・・ } メインスレッド FormView クラス: hWnd = GetSafeHwnd(); MSG msg; while(1){ ・・・・・・・ ::GetMessage( &msg, NULL, 0, 0 ); //data = ::GetMessageExtraInfo(); ・・・・・・・ } これでmsg.messageを観測すると10回に1回データが来ているようです。それとは別のメッセージも含まれ、メッセージキューの格納順序がわからないため『正しい』データの切り出しができません。 **MessageExtraInfo()で付加情報として取得できないかとも考えたのですが、これも失敗しました。 非常に遅くもなります。 ::PostMessageA, ::GetMessageの組み合わせ以外を考えた方がいいのかもしれませんが、メインスレッドのIDを取得する方法が分かりません。 Linuxでは両スレッドのIDが簡単に取得でき、msgsnd, msgrcvで目的のdataが得られたのですが、Windowsではそうはいきませんでした。 メッセージ周りに関する基本理解を欠いておりますが、とにかく結果だけだしたくご教示願えれば幸いです。
- 別スレッドのデータを受信できない
VC6 MFCです。 よく調べない無精な質問ですがご容赦ください。 別(受信)スレッド中にあるデータをWindowsメインスレッドで受信できません。 public: unsigned long data; HWND hWnd; 受信スレッド: while(1){ ・・・・・・・ ::PostMessageA(hWnd, data, 0, 0); //::SetMessageExtraInfo( data ); ・・・・・・・ } メインスレッド FormView クラス: hWnd = GetSafeHwnd(); MSG msg; while(1){ ・・・・・・・ ::GetMessage( &msg, NULL, 0, 0 ); //data = ::GetMessageExtraInfo(); ・・・・・・・ } これでmsg.messageを観測すると10回に1回データが来ているようです。それとは別のメッセージも含まれ、メッセージキューの格納順序がわからないため『正しい』データの切り出しができません。 **MessageExtraInfo()で付加情報として取得できないかとも考えたのですが、これも失敗しました。 非常に遅くもなります。 ::PostMessageA, ::GetMessageの組み合わせ以外を考えた方がいいのかもしれませんが、メインスレッドのIDを取得する方法が分かりません。 Linuxでは両スレッドのIDが簡単に取得でき、msgsnd, msgrcvで目的のdataが得られたのですが、Windowsではそうはいきませんでした。 メッセージ周りに関する基本理解を欠いておりますが、とにかく結果だけだしたくご教示願えれば幸いです。