VC初心者なので詳しい方ぜひ教えてください。
ダイアログベースのアプリの起動時に
起動画面(スプラッシュスクリーンなど)を表示させることは
できるのでしょうか。
実装方法がわかる方がいましたら返事をよろしくお願いします。
MFC の SDI や MDI アプリケーションに、
コンポーネントおよびコントロールギャラリから追加する方法を
知っていると仮定して書きます。
まず、ダイアログベースのアプリとは別に、
SDI のプロジェクトを作成し、上記の方法でスプラッシュスクリーンを追加します。
次に、追加した CSplushWnd を含む ソースファイルとヘッダファイルを
ダイアログベースのアプリにコピーし、プロジェクトに追加します。
そして、既存のソースへ次のコードを追加します。
CxxxApp のソースと、CxxxDlg のソースに、
#include <Splash.h>
を追加。
CxxxApp::InitInstance の先頭へ
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
CSplashWnd::EnableSplashScreen(cmdInfo.m_bShowSplash);
を追加。
CxxxApp に仮想関数 PreTranslateMessage を追加後、その中に、
if (CSplashWnd::PreTranslateAppMessage(pMsg))
return TRUE;
を追加。
CxxxDlg::OnInitDialog(または OnCreate)に
CSplashWnd::ShowSplashScreen(this);
を追加。
さらに、スプラッシュスクリーン用のビットマップを
IDB_SPLASH として、リソースに追加しておく必要があります。
以上の追加は、SDI にスプラッシュスクリーンを追加した際、
自動的に追加されるコードをそのままコピーしただけですので、
そちらを参考にすればすぐに分かります。
丁寧に教えていただきましてありがとうございました。
起動画面を表示させることができましたが
もう一つ質問があります。
現状では、スプラッシュスクリーンのサイズが小さい場合に
スプラッシュスクリーンの下からダイアログが見えてしまいます。
スプラッシュスクリーンが消えてから
ダイアログを表示させることはできるのでしょうか?
単純な方法ですが、
CSplashWnd::ShowSplashScreen(this);
で、スプラッシュウィンドウを表示した直後に、
::Sleep(1000);
などとして、処理を停止する方法があります。
この場合、CSplashWnd のタイマー処理は不要になりますので、
削除することができます。
便乗で質問させていただきます。はじめに質問された、けん様お許しください。(^^;
VisualStudio.NETでもスプラッシュ画面を使用したいと思い、VisualStudio6.0まで
の方法と同じような方法で追加しようとしたところ、プロジェクトメニューから追加す
ることができませんでした。
なんと項目が見あたらないのです。MDI、SDI、ダイアログベースと一通り調べ、他の
メニューもいろいろと探し、念のためヘルプも当たってみたのですが、どうも見つける
ことができませんでした。
VisualStudio.NETでは名称が変わってしまったのでしょうか? それともサポート
がうち切られてしまったのか…。試した環境は以下の通りです。何か情報をご存じの方
がいらっしゃいましたら、よろしくおねがいします。
VisualStudio.NET EnterpriseArchitect(?)
Windows2000(SP3)
Google で検索したら良いものが見つかりました。
http://www.codejock.com/developer/article04.htm
ダイアログにスプラッシュスクリーンを表示するサンプルです。
CSplashWnd クラスが同梱されているようなので、
VisualStudio.NET にないようなら、
こちらを参考にしてみてはどうでしょうか?
TAD様、それから最初の質問者のけん様、割り込みで質問を入れたとりです。
> CSplashWnd クラスが同梱されているようなので、
> VisualStudio.NET にないようなら、
> こちらを参考にしてみてはどうでしょうか?
ありがとうございます。早速参考にさせていただきます。(^^)
個人的には「解決チェック」を入れてみたい衝動に駆られるのですが、そこ
まではやめておきます。(^^;;;