C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: saveFileDialogのカスタマイズ


(過去ログ 52 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■28286 / inTopicNo.1)  saveFileDialogのカスタマイズ
  
□投稿者/ akt (1回)-(2008/11/22(Sat) 23:37:50)

分類:[C++/CLI] 

Visual C++ 2005、C++/CLIを使用しています。

saveFileDialogにコントロールを独自に追加して、カスタマイズしたsaveFileDialogを作成したいと考えています。
.net framework環境ではsaveFileDialogは継承できないようで、どのようにしたらコモンダイアログを利用して、
カスタマイズ化したダイアログが作れるのでしょうか。

.NETで解決できなくても、WIN32を用いる方法などでも良いです。(可能なのかわかりませんが)

MFCでは過去に同様のことを行ったことがあるのですが、.NET環境でMFCが使えるのかよく理解できておりません。

よろしくお願い致します。
引用返信 編集キー/
■28290 / inTopicNo.2)  Re[1]: saveFileDialogのカスタマイズ
□投稿者/ Azulean (227回)-(2008/11/23(Sun) 00:37:29)
> saveFileDialogにコントロールを独自に追加して、カスタマイズしたsaveFileDialogを作成したいと考えています。
> .net framework環境ではsaveFileDialogは継承できないようで、どのようにしたらコモンダイアログを利用して、
> カスタマイズ化したダイアログが作れるのでしょうか。
色々とめんどくさい手順を踏まないと実現できないと思います。

C#の例ですが、軽く検索した結果です。(手法についてまでは細かく見ていません)
http://www.codeproject.com/KB/dialog/OpenFileDialogEx.aspx
http://www.codeproject.com/KB/dialog/CustomizeFileDialog.aspx

> MFCでは過去に同様のことを行ったことがあるのですが、.NET環境でMFCが使えるのかよく理解できておりません。
C++/CLIプロジェクトにおいて、MFCを使うこともできます。
開発効率を考えて、うまく使い分けると良いかもしれません。
引用返信 編集キー/
■28292 / inTopicNo.3)  Re[2]: saveFileDialogのカスタマイズ
□投稿者/ akt (3回)-(2008/11/23(Sun) 00:51:15)
No28290 (Azulean さん) に返信

> C#の例ですが、軽く検索した結果です。(手法についてまでは細かく見ていません)
> http://www.codeproject.com/KB/dialog/OpenFileDialogEx.aspx
> http://www.codeproject.com/KB/dialog/CustomizeFileDialog.aspx
リンクを提示頂きありがとうございます。
私も調べてはいたのですが、上記ページは見落としていました。
一応Microsoftのページで以下は発見でき、ソースコードも軽く見たのですが、
C#が理解できていないので、どうしたものかと考えていたところです。
http://msdn.microsoft.com/en-us/library/ms996463.aspx#extensibledialogs_topic3
提示されたものもC#なので、なんとかわからないなりに読んでみようと思います。

>>MFCでは過去に同様のことを行ったことがあるのですが、.NET環境でMFCが使えるのかよく理解できておりません。
> C++/CLIプロジェクトにおいて、MFCを使うこともできます。
> 開発効率を考えて、うまく使い分けると良いかもしれません。
.NETのプロジェクトにMFCコードを追加しようとすると、追加できないと怒られました。
DLL化してそれを.NETから呼び出すなどの方法が必要なのでしょうか。
引用返信 編集キー/
■28296 / inTopicNo.4)  Re[3]: saveFileDialogのカスタマイズ
□投稿者/ Azulean (228回)-(2008/11/23(Sun) 11:53:38)
> .NETのプロジェクトにMFCコードを追加しようとすると、追加できないと怒られました。
> DLL化してそれを.NETから呼び出すなどの方法が必要なのでしょうか。
MFCプロジェクトとして準備しておかないと、MFCクラスの追加はできません。

・プロジェクトの設定の全般にある「MFCの使用」で「共有DLLでMFCを使う」にする。
・プロジェクトの設定の全般にある「共通言語ランタイムのサポート」で「共通言語ランタイムサポート(/clr)」にする。
・stdafx.hにMFCのヘッダファイルのインクルードなど、書き込む。

ヘッダファイルのインクルード等は、MFCのプロジェクトを1つダミーで作って、そこから切り貼りした方が良いかもしれません。


#動きを見る限り、MFCクラスの追加を認める条件は、afxwin.hをインクルードしているかどうかのようです。
#但し、プロジェクトの設定を変えておかないとビルドに失敗するので、設定も書いています。
引用返信 編集キー/
■28395 / inTopicNo.5)  Re[1]: saveFileDialogのカスタマイズ
□投稿者/ .SHO (171回)-(2008/11/25(Tue) 17:41:28)
No28286 (akt さん) に返信

> .NETで解決できなくても、WIN32を用いる方法などでも良いです。(可能なのかわかりませんが)

WIN32でも良いのなら GetSaveFileName() を使えば、基本的には何でも出来ちゃうと思います。
引用返信 編集キー/
■28575 / inTopicNo.6)  Re[2]: saveFileDialogのカスタマイズ
□投稿者/ akt (5回)-(2008/11/28(Fri) 00:23:46)
返信遅れました。

>Azulean さん

>・プロジェクトの設定の全般にある「MFCの使用」で「共有DLLでMFCを使う」にする。
>・プロジェクトの設定の全般にある「共通言語ランタイムのサポート」で「共通言語ランタイムサポート(/clr)」にする。
>・stdafx.hにMFCのヘッダファイルのインクルードなど、書き込む。
>ヘッダファイルのインクルード等は、MFCのプロジェクトを1つダミーで作って、そこから切り貼りした方が良いかもしれません。
>#動きを見る限り、MFCクラスの追加を認める条件は、afxwin.hをインクルードしているかどうかのようです。
>#但し、プロジェクトの設定を変えておかないとビルドに失敗するので、設定も書いています。

ご指摘どおり、プロジェクトを設定して行ったところ、たしかにMFCクラスを追加できました。
ありがとうございます。
CFileDialogを派生した自作クラスも追加して、ビルドはできたのですが、実行しようとすると
フォームなどが現れる前に

Debug Assertion Failed!
dbgheap.c
Line 1473

Expression: _CrtIsValidHeappointer(pUserData)
というダイアログが出て、中止すると、そのままプロセスが残りタスクマネージャーで強制終了しなければなりませんでした。

原因を追ってみたいと思います。
#もしくは、MFC用のプロジェクト設定が不足している??


No28395 (.SHO さん) に返信
> ■No28286 (akt さん) に返信
>
>>.NETで解決できなくても、WIN32を用いる方法などでも良いです。(可能なのかわかりませんが)
>
> WIN32でも良いのなら GetSaveFileName() を使えば、基本的には何でも出来ちゃうと思います。
返信ありがとうございます。
たしかにそのとおりですね。MFCでしか経験がなかったので、Win32での方法も調べてみたいと思います。


引用返信 編集キー/
■28576 / inTopicNo.7)  Re[3]: saveFileDialogのカスタマイズ
□投稿者/ Azulean (234回)-(2008/11/28(Fri) 00:35:20)
> Debug Assertion Failed!
> dbgheap.c
> Line 1473

「MFC /clr」で検索しました。
http://search.live.com/results.aspx?q=MFC+%2Fclr&form=QBRE&lf=1
http://www.google.co.jp/search?hl=ja&q=MFC+%2Fclr&lr=lang_ja

検索結果から:
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=671312&SiteID=7
引用返信 編集キー/
■28583 / inTopicNo.8)  Re[4]: saveFileDialogのカスタマイズ
□投稿者/ akt (8回)-(2008/11/28(Fri) 01:19:30)
No28576 (Azulean さん) に返信
>>Debug Assertion Failed!
>>dbgheap.c
>>Line 1473
> 
> 「MFC /clr」で検索しました。
> http://search.live.com/results.aspx?q=MFC+%2Fclr&form=QBRE&lf=1
> http://www.google.co.jp/search?hl=ja&q=MFC+%2Fclr&lr=lang_ja
> 
> 検索結果から:
> http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=671312&SiteID=7
調べていただきありがとうございます。
なんとかMFCをつかうことができました。

【手順】
1. プロジェクト Windowsフォームアプリケーション作成
2. プロジェクト→プロパティ→構成プロパティ→全般→「MFCの使用」を「共有DLLでMFCを使う」に変更
3. プロジェクト→プロパティ→構成プロパティ→全般→「共通言語ランタイムのサポート」を「共通言語ランタイムサポート(/clr)」に変更
4. stdafx.hに#include <afxwin.h>を追加
5. プロジェクト→プロパティ→構成プロパティ→リンカ→詳細→エントリポイントを「wWinMainCRTStartup」に変更
6. プロジェクト名.cppのmain関数を以下のように書き換える
#if 0
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
	// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
	Application::EnableVisualStyles();
	Application::SetCompatibleTextRenderingDefault(false); 

	// メイン ウィンドウを作成して、実行します
	Application::Run(gcnew Form1());
	return 0;
}
#endif
class CMFCApp : public CWinApp
{
public:
virtual BOOL InitInstance()
{
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 
    // Create the main window and run it
    Application::Run(gcnew Form1());
    return FALSE;
}
} theApp;


以上の手順で
・MFCクラスを追加
・ビルドして実行
が可能になりました。

CFileDialogを派生したクラスでDoModalで表示することもできました。

ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -