コンソールベースでモーダルダイアログ – プログラミング – Home

コンソールベースでモーダルダイアログ
 
通知
すべてクリア

[解決済] コンソールベースでモーダルダイアログ


hai
 hai
(@hai)
ゲスト
結合: 23年前
投稿: 26
Topic starter  

MFCをサポートするコンソールベースのアプリケーションを作成しています。
リソースとして適当なダイアログを追加し、モードレスダイアログとして呼び出します。

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

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

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

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

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


引用未解決
トピックタグ
とおりすがり
 とおりすがり
(@とおりすがり)
ゲスト
結合: 24年前
投稿: 180
 

そんなことできるんだ...。
というかコンソールアプリにする必要性とは?


返信引用
けみ
 けみ
(@けみ)
ゲスト
結合: 24年前
投稿: 22
 

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

MSG msg;

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

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

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


返信引用
hai
 hai
(@hai)
ゲスト
結合: 23年前
投稿: 26
Topic starter  

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

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


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

新規作成->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
 hai
(@hai)
ゲスト
結合: 23年前
投稿: 26
Topic starter  

遅くなりましたが、みなさんありがとうございます。

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました