いつもお世話になります。

VC++6.0MFCダイアログベースでデスクトップアプリ
を作成しているものです。

アプリ終了でINIファイルにウィンドウ位置を記憶させ
次回起動時に終了位置に表示させているのですが、
アプリが立ち上がったまま、スタートメニューからウィンドウズ自体を
終了させた時、アプリにはどのようなメッセージが飛んできているのか
どなたか教えていただけないでしょうか?
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ユーザが Windowsの終了を選択したり、ExitWindows関数で終了された直後に、トップレベルウィンドウ(この場合ダイアログ)にWM_QUERYENDSESSION メッセージが来ます。


ダイアログでは CWnd::OnQueryEndSession ハンドラを定義してこのメッセージを処理します。

ハンドラには、Windowsを終了してもよければ TRUE を、終了を阻止する場合は FALSE を返すようにコードを書きます。

ダイアログがこのメッセージをハンドルしたら、次に WM_ENDSESSION メッセージが来ます。
ダイアログでは CWnd::OnEndSession ハンドラを定義してこのメッセージを処理します。
ハンドラの BOOL 引数 bEnding が TRUE なら、Windows は終了します。
FALSE なら、終了処理は中断されました。

INIファイルにデータを記録するなら、OnEndSession に TRUE がセットされた時に書き込みを行い、完了したらハンドラから return します。

この時、ウィンドウに WM_DESTROY が来ないかもしれません。
また、メッセージキューに WM_QUIT も来ないかもしれません。
    • good
    • 0

WM_QUIT だったと思います。


記憶なのでちょっと自信無し(^^;
実験して見て下さい。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q今度10数名の研修が終了しますが、終了後の意見交換などのコミュニティの

今度10数名の研修が終了しますが、終了後の意見交換などのコミュニティの場を、ネット上に設けたいと考えております。それには(SNS やブログ)などが考えられると思いますが、このようなコミュニティの形成にはどちらが向いているのでしょうか?
私も普通のブログは経験があるのですが、詳しいことは分かりません。またSNSはやったことがありません。皆さまのご意見をお聞かせいただければと存じます。

(SNS やブログ)にもいろいろあるようですが、どこか適当なサービスがご存知でしたら教えていただけますでしょうか。よろしくお願いいたします。

Aベストアンサー

ブログの場合、アカウントを持っている人しか記事が書けないので、そこに他の人がコメントを付ける形になります。別の人もブログのアカウントを作ればそこでまたコメントを付ければ良いのですが、それぞれが別のブログを持つことになります。全員のブログをチェックしないと誰が何を記事にしたか判らないのと、横断的なコミュニケーションが難しいと思います。

SNSの場合、横の繋がりを登録しますので、誰かが記事(日記)を書くと判るようになっています。個人情報がグループ化された人全員に見えてしまうので、選定したSNSを既に個人で利用している人は困惑するかもしれません。他の利用者からグループの存在は見えるようになっています。

So-netがグループ向けに閉じられたSNSを作れるサービスをしていましたが、現在はサービス終了がアナウンスされています。もしかしたら他に同等の物があるかも知れません。

参考URL:http://www.so-netsns.jp/

QMFC VC++6.0 DestroyWindowの実装場所について

[開発環境]:Visual C++ 6.0

現在、Visual C++ 6.0を使ったプログラミングの勉強をしています。
MFC AppWizard (exe)でSDIプログラムのtest1プロジェクト作成後、メインフレームにボタンを実装し、そのボタンを押下するとモードレスダイアログを表示するというアプリケーションを作っているのですが、ダイアログを終了させる時のDestroyWindowの実装場所と実装方法が分かりません。
ダイアログ用のクラスはCmyDialogとしていますが、ダイアログの終了ボタンを実装した場合、そのボタン処理の中すなわちCmyDialogクラスのなかの関数で行うべきなのでしょうか?それともダイアログの作成と同様にメインフレームがわの処理(CTest1Viewクラスでの処理?)として行うべきなのでしょうか?この場合にはどのような場所でどのようなタイミングで実装すればよいのか分かりません。
ご存じの方、これらについて御教授お願いします。

以下プログラムの一部を記載します。
-test1view.cppの一部-(ここでダイアログの作成と表示をしています)
void CTest1View::OnButton1()
{
CmyDialog* myDLG = new CmyDialog;
myDLG->Create(IDD_DIALOG1,this);
myDLG->ShowWindow(SW_SHOW);
}

[開発環境]:Visual C++ 6.0

現在、Visual C++ 6.0を使ったプログラミングの勉強をしています。
MFC AppWizard (exe)でSDIプログラムのtest1プロジェクト作成後、メインフレームにボタンを実装し、そのボタンを押下するとモードレスダイアログを表示するというアプリケーションを作っているのですが、ダイアログを終了させる時のDestroyWindowの実装場所と実装方法が分かりません。
ダイアログ用のクラスはCmyDialogとしていますが、ダイアログの終了ボタンを実装した場合、そのボタン処理の中すなわちCmyDia...続きを読む

Aベストアンサー

ずいぶん回答がないままのようですが、まだお困りでしょうか?

とりあえず、回答します。
DestroyWindowを呼び出す場所については、ゆるされるタイミングで好きな時に。ということになるでしょうか。
つまり、このモードレスダイアログが要らなくなったときですね。
一般的?かどうか自信ないですが、Viewクラスの破棄時に呼ぶのが妥当かと。あるいは、このモードレスダイアログを使用する機能が終了した時とか。
ただご提示のサンプルでは、ダイアログのポインタがOnButton関数内の変数になってしまっているので、メンバ変数にするなどが必要です。

QSo-netSNSの代わりになりうるサービス(ML付き希望)

So-netのSNSレンタルサービスが終了することになってしまいましたが、代わりになりうる無料サービスを探しています。
無料のSNSレンタルは探せば色々あるのですが、出来れば、So-netSNS同様、コミュニティにML機能が付属している所が希望なのですが、どこかにないでしょうか。

Aベストアンサー

コメントありがとうございます。
それで、そ~しゃるぱ~くはお眼鏡にかなわなかったと?

逆にFreeMLは以前、MLとして使ったことはありますが、コミュニティ機能としてどれくらい要望を満たすのか不明。

参考URL:http://www.freeml.com/

QVC++ オリジナルDLLを使用するとアプリを終了させる時にメモリリークする

VisualStudio2005 C++ユーザです。
メモリリークの解決の糸口を探しています。

オリジナルDLLでクラスを作成しそれをオリジナルアプリ側で宣言だけして実行、アプリを閉じると「Detected memory leaks!」と表示されます。
アプリもDLLもデフォルト状態での使用のため、何が原因かさっぱりです。
解決の手引きお願い致します。

●作成DLL
・DLLの種類>MFC拡張DLL
・クラスはエクスポートするように記述変更
 >class AFX_EXT_CLASS CHogehoge : public CObject
・メンバ関数 InitHogehoge() として「int i=0;」のみ記述

●作成アプリ(MDI形式)
・プロジェクト形式 MFC標準
・共有DLLでMFCを使用に設定
・以下のようにクラスの宣言
 >例 void CTestApp::OnAppAbout()内にCHogehoge abc;を宣言

●現象
・アプリを終了させた時に以下が出力される
Detected memory leaks!
Dumping objects ->
d:\実験\f_tool\f_tool.cpp(53) : {65} client block at 0x003B9028, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003B9028, 64 bytes long
a CDynLinkLibrary object at $003B9028, 64 bytes long
{59} client block at 0x003B3298, subtype c0, 64 bytes long.
a CDynLinkLibrary object at $003B3298, 64 bytes long
a CDynLinkLibrary object at $003B3298, 64 bytes long
Object dump complete.
F_TOOL.DLL Terminating!
プログラム '[192] Test.exe: ネイティブ' はコード 0 (0x0) で終了しました。

●特記事項
エクスポートしたクラス自体は参照出来ているので基本的なミスはないつもり。
出力の「d:\実験\f_tool\f_tool.cpp(53) : {65} client block at ・・・.」はDLL側の「new CDynLinkLibrary(F_TOOLDLL);」行。

宜しくお願い致します。

VisualStudio2005 C++ユーザです。
メモリリークの解決の糸口を探しています。

オリジナルDLLでクラスを作成しそれをオリジナルアプリ側で宣言だけして実行、アプリを閉じると「Detected memory leaks!」と表示されます。
アプリもDLLもデフォルト状態での使用のため、何が原因かさっぱりです。
解決の手引きお願い致します。

●作成DLL
・DLLの種類>MFC拡張DLL
・クラスはエクスポートするように記述変更
 >class AFX_EXT_CLASS CHogehoge : public CObject
・メンバ関数 InitHogehoge()...続きを読む

Aベストアンサー

new CDynLinkLibrary(F_TOOLDLL);はAfxTermExtensionModule(F_TOOLDLL);によって解放されるのですが、出力を見ればわかりますが、解放より前にリークの検出が行われている為にリークが報告されているだけで、メモリリークしてないと思われます。

Qどんな趣味の人も楽しめる無料SNSを教えて下さい

Yahoo Daysもgooホームも終了が決定し、友達といっしょに引越しできる似たような感じのSNSを探しています。

友達の要望でmixi facebook twitter、GREE以外のところでお願いします。

条件は

(1) 無料であること
(2) ゲーム系、子育て系など何かに特化したところではないこと。
  (雑談が楽しみたいのです)
(3) ひとことに対するコメントが一覧になって見られること
(4) 本名を表示名にしなくていいこと

どうぞよろしくお願いします!

Aベストアンサー

Googleのバズではダメかな?

Q【VC++6.0(MFC)】適切なSHBrowseForFolder使用方法について教えてください。

いつも大変お世話になっております。
VC++初心者です。

前回質問した内容と重複しますが、
改めて質問させて頂きたいと思います。

現在、SHBrowseForFolderを使用すると、
デバグモードで実行すると以下のようなエラーが出力され困っています。
「例外処理 (初回) は XXXX.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation」
※実行環境:WindowsXp(sp3) VC++6.0(Sp6)
(ちなみ、このエラーは、PCによって発生したりしなかったりしています。)

http://msdn.microsoft.com/ja-jp/library/bb762115%28en-us,VS.85%29.aspx
を参照すると、「SHBrowseForFolderを使う前に、Component Object Model (COM)を初期化しなければいけません。」と表記されてますが、
初期化処理を行った後、SHBrowseForFolderを実行している
サンプルを見つけられません。

お手数ですが、上記サンプルをご提示して頂けませんでしょうか

現在、ここまで書いたので、ご指摘いただけると幸いです。
(ほとんど、他のページからの転用なのですが、、、)

****************
void CAAAAAA::OnButtonSelectFolder()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
UpdateData(TRUE);
BROWSEINFO bInfo;
LPITEMIDLIST pIDList;
TCHAR szDisplayName[MAX_PATH];

// BROWSEINFO構造体に値を設定
bInfo.hwndOwner = AfxGetMainWnd()->m_hWnd; // ダイアログの親ウインドウのハンドル
bInfo.pidlRoot = NULL; // ルートフォルダを示すITEMIDLISTのポインタ (NULLの場合デスクトップフォルダが使われます)
bInfo.pszDisplayName = szDisplayName; // 選択されたフォルダ名を受け取るバッファのポインタ
bInfo.lpszTitle = _T("フォルダの選択"); // ツリービューの上部に表示される文字列
bInfo.ulFlags = BIF_RETURNONLYFSDIRS; // 表示されるフォルダの種類を示すフラグ
bInfo.lpfn = NULL; // BrowseCallbackProc関数のポインタ
bInfo.lParam = (LPARAM)0; // コールバック関数に渡す値


// フォルダ選択ダイアログを表示
pIDList = ::SHBrowseForFolder(&bInfo);
if(pIDList == NULL){

// 戻り値がNULLの場合、フォルダが選択されずにダイアログが閉じられたことを意味します。
}else{
// ItemIDListをパス名に変換します
if(!::SHGetPathFromIDList(pIDList, szDisplayName)){
// エラー処理
}
// szDisplayNameに選択されたフォルダのパスが入っています
m_csFolderName = szDisplayName;
// 最後にpIDListのポイントしているメモリを開放します
::CoTaskMemFree( pIDList );
}

UpdateData(FALSE);//データ初期化(反映)

}

いつも大変お世話になっております。
VC++初心者です。

前回質問した内容と重複しますが、
改めて質問させて頂きたいと思います。

現在、SHBrowseForFolderを使用すると、
デバグモードで実行すると以下のようなエラーが出力され困っています。
「例外処理 (初回) は XXXX.exe (NTDLL.DLL) にあります: 0xC0000005: Access Violation」
※実行環境:WindowsXp(sp3) VC++6.0(Sp6)
(ちなみ、このエラーは、PCによって発生したりしなかったりしています。)

http://msdn.microsoft.com/ja-jp/library/bb...続きを読む

Aベストアンサー

 こんばんは。お礼頂きました。

・MFCプロジェクトへのCoInitialize()/CoUninitialize()の必要性

 MFCにおいては、必要無い筈です。
 COMを使用する際には必ずCoInitizlize()等による初期化が必要です。
 其のまま使用すると、その場でプログラムがクラッシュしたりするので直ぐに分かります。

 MFCでは初期化無しでも動いたのですから、MFCアプリがスタートする際に、呼び出されている筈です。
 ただし、何処で呼び出されているのかを特定する時間が無かったので、敢えて言及しませんでした。

Qジャンル特化型のSNSを立ち上げたい

ミクシィとかグリーのようなオールラウンドなSNSではなくて、あるジャンルに特化したSNSを立ち上げたいと考えています。

特化型のSNSでうまく行きそうなジャンルや、上手く行っているSNSがあれば教えてください。

Aベストアンサー

ただSNSを構築するだけなら簡単ですが、ミクシィやGREEとの違いを鮮明にしないと、集客が厳しくなります。

ミクシィのような大手SNSのコミュニティでは加入しづらいジャンルを狙うといいのではないでしょうか。

ゲイのSNS
http://gaycom.jp/xc/menu/top

キャバクラのSNS
http://cabanet.jp/

とか、ですね。

参考URL:http://gaycom.jp/xc/menu/top,http://cabanet.jp/

QVC++、MFCでSDIでアプリ作成中

現在、VC++、MFCでSDIでアプリ作成中です。
アイコン上にファイル(txtファイル)をドラッグ&ドロップしてメモ帳を起動したいです。
ただ、ドロップされたファイルはうまく読み込めるのですが、そのファイルを開く(表示)することができません。

ドロップされたファイルは、C○○View.cppで

int C○○View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: この位置に固有の作成用コードを追加してください
CStringArrayargv;
if( IsDropOnIcon( &argv, TRUE ) ){
inti;
for( i = 0; i < argv.GetCount(); i++ ){
MessageBox( argv[ i ], "ドロップされたファイルは", MB_OK );
Read(argv[i]);
}
}
}

BOOL C○○View::IsDropOnIcon( CStringArray* argv, BOOL acceptFolder )
{
CStringcmdlin = "";
CStringresToken;
char*p;
intstartnum = 0;

p = AfxGetApp()->m_lpCmdLine;
if( strlen( p ) == 0 || p[ 0 ] == '-')
return FALSE;

cmdlin = p;

resToken= cmdlin.Tokenize( "\"", startnum );
while( resToken != "" ){
if( resToken != " " && IsExist( resToken, acceptFolder ) )
argv->Add( resToken );
resToken= cmdlin.Tokenize( "\"", startnum );
};
return TRUE;
}

/* 引数で貰った文字列がファイルかどうかをチェック */
BOOL C○○View::IsExist( CString filepath, BOOL acceptFolder)
{
CFilefp;

if( fp.Open( filepath, CFile::modeRead ) ){
fp.Close();
return TRUE;
}
return FALSE;
}

のargv[i]で取得しています。

これが、Read(arg[i])でうまく読み込めません。
ちなみにRead(CString filename)は正しく動くことは確認済みです。
Read(arg[i])を入れる場所がOnCreateがいけないとは思うのですが、どのタイミングで
読み込めばいいかがわかりません。
どなたか教えて頂けないでしょうか?

現在、VC++、MFCでSDIでアプリ作成中です。
アイコン上にファイル(txtファイル)をドラッグ&ドロップしてメモ帳を起動したいです。
ただ、ドロップされたファイルはうまく読み込めるのですが、そのファイルを開く(表示)することができません。

ドロップされたファイルは、C○○View.cppで

int C○○View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

// TODO: この位置に固有の作成用コードを追加してください
CStringArrayargv;
if( IsDropOnI...続きを読む

Aベストアンサー

InitInstance SDI コマンドライン
でググってみてはいかがでしょうか

Q「教えて!goo」はSNSですか?

WindowsOSとは関係ないのですが
SNS(ソーシャル・ネットワーキング・サービス)という言葉をよく見かけます。
ミクシイがその代表的なものとして常に紹介されています。
私はミクシイ会員ではないので、実感としてSNSのことが解りませんが
「教えて!goo」は次のどれに該当するものなのでしょうか?
1. まさにSNSである。(SNSそのものである)
2. SNSとも言える。(広義のSNSである)
3. SNSとは言えない。(SNSという分類には入らない)
4. 一般の掲示板である。
以上です。

Aベストアンサー

3.ですかね。

掲示板と勘違いしている方、結構いるんですよね……
会員間の歓談の場と勘違いしているような質問をたまに見かけますね。

ソーシャル・ネットワーキング・サービス - wikipedia
http://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%AB%E3%83%BB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0%E3%83%BB%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9
参考にどうぞ。

QVC++でMFCアプリ作成中です。

MFCの既存のフレームで、「最近使ったファイル」という欄があります。
これを選んだ際に、指定したプログラムでそのファイルを開きたいのですが、うまくいきません。
どうすればよろしいでしょうか?

HogeView.cpp

...(省略)

/***************************************
OnOpenRecentFileのオーバーライド
***************************************/
BOOL CWinApp::OnOpenRecentFile(UINT nID)
{
ASSERT_VALID(this);
ASSERT(m_pRecentFileList != NULL);

ASSERT(nID >= ID_FILE_MRU_FILE1);
ASSERT(nID < ID_FILE_MRU_FILE1 + (UINT)m_pRecentFileList->GetSize());
int nIndex = nID - ID_FILE_MRU_FILE1;
ASSERT((*m_pRecentFileList)[nIndex].GetLength() != 0);
  
    /* 選んだファイルを表示 */
AfxMessageBox((*m_pRecentFileList)[nIndex]);

CHogeView *myview = new CHogeView();

★myview->GetDocument()->SetFilePath((*m_pRecentFileList)[nIndex]);

AfxMessageBox(myview->GetDocument()->GetFilePath());

myview->ReadFile((*m_pRecentFileList)[nIndex]);

TRACE2("MRU オリジナル関数内: open file (%d) '%s'.\n", (nIndex) + 1,
(LPCTSTR)(*m_pRecentFileList)[nIndex]);

if (OpenDocumentFile((*m_pRecentFileList)[nIndex]) == NULL){
m_pRecentFileList->Remove(nIndex);
}
return TRUE;
}

/******************************************************************
ファイル読み込み
******************************************************************/
void CHogeViewerView::ReadFile(CString filename){
...(省略)
}


コンパイルはできるのですが、どうやら★のところがうまく行かず、
Debug Assertion Failed!
とエラーがでます。
何が原因なのでしょうか?

MFCの既存のフレームで、「最近使ったファイル」という欄があります。
これを選んだ際に、指定したプログラムでそのファイルを開きたいのですが、うまくいきません。
どうすればよろしいでしょうか?

HogeView.cpp

...(省略)

/***************************************
OnOpenRecentFileのオーバーライド
***************************************/
BOOL CWinApp::OnOpenRecentFile(UINT nID)
{
ASSERT_VALID(this);
ASSERT(m_pRecentFileList != NULL);

ASSERT(nID >= ID_FILE_MRU_FILE1);
ASSERT(nID < ID...続きを読む

Aベストアンサー

ん~ MFCのDOC/VIEWを使うのであればファイルの読み込みをViewクラスでやるのはお勧めできません

質問の直接の原因は Viewクラスは作っているがViewと関連のあるDocumentクラスが無いので
GetDocumentがNULLを返してくるためにアサーションが発生します

OpenDocumentFileからの戻り値の CDocument* を お使いのCDocumentからの派生クラスにキャストしてやれば Documentに関する部分は操作可能になります

CHogeDocument* pDoc = NULL;
if ((pDoc = (CHogeDocument*)OpenDocumentFile((*m_pRecentFileList)[nIndex])) == NULL){
といった具合にif文を書き換えてやります

このif文が成り立つのは Documentクラスを生成できなかった場合です
何らかの原因でドキュメント内容が読み込めなかったとか サイズ0のファイルを指定したとか

ドキュメント内容の取得は CHogeDocumentクラスの Serializeルーチンで読み込むようにしましょう
… 書き込み時もSerializeを使います

読み込み後Viewクラスで何かやりたいのであれば ViewクラスのOnInitialUpdateなどが適当かとおもいます

ん~ MFCのDOC/VIEWを使うのであればファイルの読み込みをViewクラスでやるのはお勧めできません

質問の直接の原因は Viewクラスは作っているがViewと関連のあるDocumentクラスが無いので
GetDocumentがNULLを返してくるためにアサーションが発生します

OpenDocumentFileからの戻り値の CDocument* を お使いのCDocumentからの派生クラスにキャストしてやれば Documentに関する部分は操作可能になります

CHogeDocument* pDoc = NULL;
if ((pDoc = (CHogeDocument*)OpenDocumentFile((*m_pRecentFileList)[nIndex...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング