コンソールベースでモーダルダイアログ

[戻る]
hai 2002/06/25(火) 23:56:16
MFCをサポートするコンソールベースのアプリケーションを作成しています。
リソースとして適当なダイアログを追加し、モードレスダイアログとして呼び出します。

リソース名:IDD_DIALOG   クラス名:testDIA

  testDIA dlg;
  dlg.Create(IDD_DIALOG);
  dlg.ShowWindow(SH_SHOW);

と記述すると、ダイアログは呼び出されのですが、そのダイアログ上にマウスカーソルを合わせ
ると砂時計のカーソルに変わってしまい、移動することもクリックすることも出来なくなってし
まいます。この現象を回避する手段はないのでしょうか?

また、ダイアログ上のボタンをクリックしたことを、親(?)のコンソールウィンドウに通知する
ことは可能でしょうか。

  VC++6.0
  windows2000
を使用しています。

とおりすがり 2002/06/26(水) 09:56:11
そんなことできるんだ...。
というかコンソールアプリにする必要性とは?

けみ 2002/06/26(水) 11:25:26
ShowWindowの後でループしている(プログラムが終わっちゃう?ので)部分が
あると思うのですがそこでメッセージ処理。とか。。

    MSG msg;

    for(;;) {
        // なんか処理

        if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) &&
            !AfxGetThread()->PreTranslateMessage(&msg)) {
            ::TranslateMessage(&msg);
            ::DispatchMessage(&msg);
       }
    }

試してみたらできましたけど、あまり詳しくないので。。。
過去ログでDoEventsやPeekMessageなどを検索したら出てきます。

hai 2002/06/26(水) 23:00:21
ありがとうございます。早速試してみます。
コンソールアプリにする理由は、基本的にはUNIXプログラムを作成するのと
ほとんど変わらないからです。
ただ、一部においてダイアログを使用したいという訳です。

なかなかコンソールアプリについて載っていないので
困っていました。
今後ともよろしくお願いします。

n [E-Mail] 2002/06/26(水) 23:49:03
新規作成->Win32Application->「単純なWin32アプリケーション」
で作ったスケルトンを、こう改造してみました。
デバッガで実行して「*」と「-」がどのように表示されていくか見てみると
結構面白いと思います。
(WinMe,VC6 SP4or5です)

#include "stdafx.h"

void CALLBACK TimerProc( HWND,UINT,UINT,DWORD ){
 OutputDebugString( "*" );
}

int APIENTRY WinMain( HINSTANCE,HINSTANCE,LPSTR,int ){
 SetTimer( NULL,1,500,TimerProc );
 BOOL b;
 MSG msg;
 while( b=GetMessage( &msg,NULL,0,0 ), 0<b ){
  OutputDebugString( "-" );
  if( IDCANCEL==MessageBox( NULL,"OKで継続","test",MB_OKCANCEL ) )
   PostMessage( NULL,WM_QUIT,0,0 );
 }
 OutputDebugString( "\n" );
 return b;
}

hai 2002/07/16(火) 00:26:30
[[解決]]
遅くなりましたが、みなさんありがとうございます。

結局、私の環境ではモードレスダイアログでは、砂時計を消すことはできませんでした。
今回は、都合によりあまり時間をかけられなかったので
無理やりモーダルダイアログに変更して対処しました。

古いスレッドには追加発言できません。