VC++ 6.0 MFCウイザードでできるダイヤログをモーダルからモードレスにするには


Visual C++ 6.0 の MFCでウイザードダイヤログを作成すると
無条件でモーダルダイヤログになる。モードレスを使いたい場合は,
以下の方法でモードレスに変更することができる。

ダイヤログのクラス名:CPrintPage で作成した場合,PrintPage.hとPrintPage.cppが
作成されます。そのなかを以下の様に修正します。
※CPrintPageや PrintPage.h PrintPage.cppはクラス名に依存します。
作成したクラス名にあわせてください。

// PrintPage.h の修正

// コンストラクション
public:
CPrintPage(/*CWnd* pParent = NULL*/); // 標準のコンストラクタ  ←変更
BOOL ModelessCreate(CWnd* pParent = NULL ); // ←追加


// PrintPage.cpp の修正

CPrintPage::CPrintPage(/*CWnd* pParent =NULL*/) // ←変更
//: CDialog(CPrintPage::IDD, pParent) // ←変更
{
}

// 以下追加
BOOL CPrintPage::ModelessCreate(CWnd* pParent /* = NULL*/ )
{
BOOL bRet = Create(CPrintPage::IDD, pParent); // ←CPrintPageは自分のクラス名です。
if(bRet){
// OnInitDialogでする処理
}
return bRet;
}



で使うときは,

CPrintPage cDlg;

cDlg.ModelessCreate(); // もしくは,cDlg.ModelessCreate(this);
でできます。



この記事へのコメント

hannya
2009年10月15日 19:33
「VC++ 6.0 MFCウイザードでできるダイヤログをモーダルからモードレスにするには」について
教えに従い やってみたのですが エラー
外部シンボル ""public: __thiscall CParameterDlg::CParameterDlg(class CWnd *)" (??0CParameterDlg@@QAE@PAVCWnd@@@Z)" は未解決です
とでました。解決の糸口を教えてください
intvsn@cityfujisawa.ne.jp です
hannya
2009年10月15日 19:36
それと CPrintPage cDlg;
cDlg.ModelessCreate();
はどこに記述したらよいでしょうか
PrintPage.ccの最後でも良いでしょうか
よろしく おしえてください

この記事へのトラックバック

  • IPアドレスやホスト名を取得するプログラム

    Excerpt: 今回はPCの「IPアドレス」や「ホスト名」を表示するプログラムを紹介する。 IPアドレスを扱うので、前提条件として、PCにはNIC(Network Interface Card)がセットされ、TCP/.. Weblog: エンジニアは健康第一 racked: 2005-08-10 22:48