ウィンドウの表示優先順位 – プログラミング – Home

ウィンドウの表示優先順位
 
通知
すべてクリア

[解決済] ウィンドウの表示優先順位


ごろう
 ごろう
(@ごろう)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

VCはじめて一週間の素人です。
仕事の空き時間に勉強のためVC++(MFC-ダイアログベース)で
携帯の簡単なシミュレータを作成しているのですが行き詰まって
しまった個所があり書き込みました。
環境はWin2000 VC6.0SP4です。

1.レイアウトについてですがダイアログベースにエディットボックスとボタンを
いくつもぺたぺた貼り付けているのですが、エディットボックスが重なりあって
しまったところ(メイン画面の上にサブメニューの表示など)が思ったように表示できません。

画面の更新は下記のように行っています。
((CEdit*)GetDlgItem(IDC_MAINDSP))->SetWindowText((char*)&MAIN_STR_MENU[0]);
((CEdit*)GetDlgItem(IDC_SUBMENUDSP))->SetWindowText((char*)&SBMN_STR_MAIN1[0]);
IDC_MAINDSPの上にIDC_SUBMENUDSPを表示させるようにしたいのですが・・・

2.ある文字列(例:「発信中」)を表示→消去→表示→・・・のように点滅させたいのですが
どのようにすればよいでしょうか?
タイマーの使い方がわからずネット上で調べたのですがさっぱりです。
私のような猿でもわかるようなページ等あれば教えていただけないでしょうか。

(あとダイアログベースにエディットボックスとボタンをひたすら貼るのは邪道ですか?)


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

1. ダイアログエディタを開いて、メニューの「レイアウト」-「タブオーダー」を
選ぶと、表示順を変更できます。

2. SetTimer()でタイマーをセットし、
OnTimer()でタイマーを処理します。
好みのページはこれらをキーワードにして探してください。

> (あとダイアログベースにエディットボックスとボタンをひたすら貼るのは邪道ですか?)

そのユーザインターフェースが、
アプリケーションの動作目的に適っており、
利用者が最も操作しやすいように最善を尽くしてデザインされたものであれば、
邪道ではないと考えます。


返信引用
ごろう
 ごろう
(@ごろう)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

>1. ダイアログエディタを開いて、メニューの「レイアウト」-「タブオーダー」を
これです~ずっと探してました。なんでタブストップにチェックの入っていないものまで
番号振られてるのかずっと不思議に思っていたのですがこのためですね。

>2.
MSDNで調べたのですが以下の処理順がいまいちわかりません。
void CMainFrame::OnStartTimer()
{
m_nTimer = SetTimer(1, 2000, 0);
}

void CMainFrame::OnStopTimer()
{
KillTimer(m_nTimer);
}

void CMainFrame::OnTimer(UINT nIDEvent)
{
MessageBeep(0xFFFFFFFF); // Beep

// Call base class handler.
CMDIFrameWnd::OnTimer(nIDEvent);
}
わかってることは
「OnStartTimerでセットした時間が経過したらOnTimerのビープ音を鳴らすのかな?」
ってぐらいです。(でもOnTimerでもCMDIFrameWnd::OnTimer呼んでるし・・・)
疑問1.OnStopTimerは自分で呼ぶのでしょうか?
疑問2.UINT nIDEventとは?

申し訳ありませんがもう少しおつきあいください


返信引用
SunPac
 SunPac
(@SunPac)
ゲスト
結合: 21年前
投稿: 105
 

OnTimerとは指定したタイミングで呼ばれるメッセージジハンドラです。
上の例だと2秒ごとに呼ばれるわけですね。(2000ミリ秒なので)
ひとつのウィンドウに複数のタイマーをセットできるので識別するのにIDが必要で
す。これがSetTimer()の第1引数です。

StopTimer(KillTimer)は指定IDのOnTimerを無効にします。(nIDEvent == 1かな?)

つまり上の例は、
StartTimer()関数を実行すると2秒ごとにビープが鳴ります。
ただしStopTimer()を実行するとビープは鳴らなくなります。


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

> 疑問1.OnStopTimerは自分で呼ぶのでしょうか?
そうです。止めたい時に自分で呼んでください。

> 疑問2.UINT nIDEventとは?
SetTimerの第一引数に指定した番号が渡されます。
複数のタイマーを起動した場合、これで区別します。


返信引用
ごろう
 ごろう
(@ごろう)
ゲスト
結合: 23年前
投稿: 10
Topic starter  

>SetTimerの第一引数に指定した番号が渡されます。
なるほど~だいぶわかりました。
タイマーはまだ試していないのですが今度実装してみます。
これで一歩前進しました☆みなさまありがとうございます(^-^)


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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