VC++のタイマーとメッセージ – プログラミング – Home

VC++のタイマーとメッセージ
 
通知
すべてクリア

[解決済] VC++のタイマーとメッセージ


Seiko
 Seiko
(@Seiko)
ゲスト
結合: 21年前
投稿: 3
Topic starter  

フォームにButtonを1つとメッセージボックスが1つあります。
現在は、
①ボタンを押すと6秒おきにOKと新しいフォームがたちあがりメッセージがながれ
てタイマーが動いているここが確認できます。
②6秒後にメッセージボックスに動いてるよと表示されます。
改善したいところは、
①ボタンを押すとタイマーも動くのは当たり前なんですが、
②すぐにメッセージボックスに動いてるよと表示してほしいのです。
(6秒おきにOKというのが立ち上がるのはかわりません)

お分かりになる方は、申し訳ございませんがご連絡いただけたら幸いです。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

void CxxDlg::OnButton()
{
AfxMessageBox(動いているよ);
SetTimer(TIMER_ID, 6000, NULL);
}


返信引用
Tonny
 Tonny
(@Tonny)
ゲスト
結合: 22年前
投稿: 32
 

UINT MyMessageBox(LPVOID pParam)
{
AfxMessageBox(動いているよ);
return 0 ;
}
void CxxDlg::OnButton()
{
::AfxBeginThread(MyMessageBox,0) ;
SetTimer(TIMER_ID, 6000, NULL);
}


返信引用
Tonny
 Tonny
(@Tonny)
ゲスト
結合: 22年前
投稿: 32
 

先程のではモーダルになってしまいますね。

モードレスにする場合
UINT MyMessageBox(LPVOID pParam)
{
::MessageBox(0,動いているよ,キャプション,MB_OK);
return 0 ;
}
void CxxDlg::OnButton()
{
::AfxBeginThread(MyMessageBox,0) ;
SetTimer(TIMER_ID, 6000, NULL);
}


返信引用
Seiko
 Seiko
(@Seiko)
ゲスト
結合: 21年前
投稿: 3
Topic starter  

void CTestDlg::OnButton1()
{
int i;
CEdit * pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
while(1){
i = Dll_T(); //6秒たったら1を返す
if(i){
AfxMessageBox(OK);
}
else{
pEdit->SetWindowText(動いているよ);
}
}

このようになっているのですが、”動いているよ”と表示されません。
VBのDoEventsみたいなのを使わないといけないのでしょうか?


返信引用
とおりがかり
 とおりがかり
(@とおりがかり)
ゲスト
結合: 21年前
投稿: 6
 

表示させるだけなら
pEdit->SetWindowText(動いているよ);
pEdit->UpdateWindow();
で出来ると思います。
ただ、whileでぐるぐる回しっぱなしにしているようなので
ちらつきそうですが。

いっそのことOnTimer側に処理を書いてしまったほうが
すっきりするのではないでしょうか。

DoEventsのようなものを実装したいときは
過去ログでPeekMessageを検索してみてください。(DoEventsでも可)


返信引用
Seiko
 Seiko
(@Seiko)
ゲスト
結合: 21年前
投稿: 3
Topic starter  

dairygoods様、Tonny様、とおりがかり様アドバイスありがとうございます。
とおりがかり様の教えていただいたもので動作の確認はできました。やはり、チラつきま
したね。次は、ちらつかないようにするためにはどうするか?を勉強してみます。
私の質問に貴重なお時間をいただきましてありがとうございました。


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

動いている最中ずっと「動いているよ」と表示していればよいのなら、

...
pEdit->SetWindowText(動いているよ);
pEdit->UpdateWindow();

while(1){
i = Dll_T(); //6秒たったら1を返す
if(i){
AfxMessageBox(OK);
}
}

でよいのでは?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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