MFCをサポートするコンソールベースのアプリケーションを作成しています。
リソースとして適当なダイアログを追加し、モードレスダイアログとして呼び出します。
リソース名:IDD_DIALOG クラス名:testDIA
testDIA dlg;
dlg.Create(IDD_DIALOG);
dlg.ShowWindow(SH_SHOW);
と記述すると、ダイアログは呼び出されのですが、そのダイアログ上にマウスカーソルを合わせ
ると砂時計のカーソルに変わってしまい、移動することもクリックすることも出来なくなってし
まいます。この現象を回避する手段はないのでしょうか?
また、ダイアログ上のボタンをクリックしたことを、親(?)のコンソールウィンドウに通知する
ことは可能でしょうか。
VC++6.0
windows2000
を使用しています。
そんなことできるんだ...。
というかコンソールアプリにする必要性とは?
ShowWindowの後でループしている(プログラムが終わっちゃう?ので)部分が
あると思うのですがそこでメッセージ処理。とか。。
MSG msg;
for(;;) {
// なんか処理
if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) &&
!AfxGetThread()->PreTranslateMessage(&msg)) {
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}
試してみたらできましたけど、あまり詳しくないので。。。
過去ログでDoEventsやPeekMessageなどを検索したら出てきます。
ありがとうございます。早速試してみます。
コンソールアプリにする理由は、基本的にはUNIXプログラムを作成するのと
ほとんど変わらないからです。
ただ、一部においてダイアログを使用したいという訳です。
なかなかコンソールアプリについて載っていないので
困っていました。
今後ともよろしくお願いします。
新規作成->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;
}
遅くなりましたが、みなさんありがとうございます。
結局、私の環境ではモードレスダイアログでは、砂時計を消すことはできませんでした。
今回は、都合によりあまり時間をかけられなかったので
無理やりモーダルダイアログに変更して対処しました。