重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

チャイルドウィンドウタイプのモードレスダイアログを表示すると
 マウスでエディットボックス(など)をクリックしてもフォーカスが移動しない
という現象がおきています。(tabキーではOK)

数年前に一度作ったときの記憶を頼りに作っているのですが、下記以外に設定などが必要になるのでしょうか?
…というか、このやり方で問題ないのでしょうか?…



◎環境

WindowsXP
Visual C++ 6.0 & MFC
アプリケーションの種類…SDI


◎やったこと

1.ダイアログリソースを追加
リソースのプロパティ
 「一般」タブ
  ID…「IDD_DIALOGA」
 「スタイル」タブ
  スタイル…チャイルド
  境界線…ダイアログ枠
  その他…すべてoff
 「その他のスタイル」タブ
  可視のみon
 「拡張スタイル」、「その他の拡張スタイル」タブ
  すべてoff

 このダイアログにいくつかのボタンやエディットボックスを配置


2.親windowのヘッダファイルに追加したもの
private:
dialogA *pDlg;


3.親windowのソースファイルに追加したもの
BOOL CModlessDialogApp::InitInstance()
にコードを追加

……
// フレームをリソースからロードして作成します

pFrame->LoadFrame(IDR_MAINFRAME,
WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL,
NULL);

//↓↓ここから追加↓↓
pDlg = NULL;
pDlg = new dialogA();
if(pDlg)
{
pDlg->Create(IDD_DIALOGA);
pDlg->ShowWindow(SW_SHOWNA /*SW_SHOW|SW_RESTORE*/);
}
//↑↑ここまで追加↑↑

// メイン ウィンドウが初期化されたので、表示と更新を行います。
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
……


スタイルを「オーバーラップ」「ポップアップ」にするとマウスクリックでフォーカスが移動します。

A 回答 (1件)

> 3.親windowのソースファイルに追加したもの


と書いておられますが、追加しているのは親ウインドウの中でなく、Appに追記されているのですよね?
追加部分のコードは、pFrameのクラスのOnCreate内に記述すべきなのではないでしょうか?
それと、今手元に開発環境が無いのでうろ覚えですが、DialogのCreate関数には、親ウインドウを指定する引数があったかと。これを明示的に指定してやるべきだと思います。
もう一つ。ダイアログテンプレートの設定ですが、有効化がチェックを入れられていないのでは?(これっぽいなぁ…)
オーバーラップ・ポップアップでは、モーダル動作開始前にウインドウが有効化されるので動作するわけですが。(これだなぁ、多分)
pDlg作成後に「EnableWindow()」を呼んでみて下さい。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
原因と思われることを1つづつ試してみましたが状況は変わりませんでした。
そのため、ダイアログベースで作り直すことにしました。

お礼日時:2006/05/04 21:24

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