VC++2005 C++/CLI
先日、[VC++/CLIのアイドル処理]でお世話になったものです。
今回は、このアイドル処理を手動で[ストップ][スタート]したいと考えています。
まずは自分が試した方法を書くべきなのですが、情けないですが何も思い浮かんでいません。
よろしくお願いします。
手動で、とは具体的にどのように操作するのか決めてある?
OnIdle() {
if (!this->flag_todo) return; // ストップ中はなにもしない
...
}
とでもしておき flag_todo に0か1か値を設定すればいいような気が
イベントハンドラを動的に削除・追加するようにする。
最初の状態はどっちになるのでしょうか?
フォームが立ち上がった瞬間からスタートしてもよいのであれば
> Application::Idle += gcnew EventHandler(%frm, &Form1::OnIdle);
をForm_Loadに記述します。
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
// コントロールが作成される前に、Windows XP ビジュアル効果を有効にします
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// メイン ウィンドウを作成して、実行します
Application::Run(gcnew Form1());
return 0;
}
Form1.h
int counter;
public:
System::Void OnIdle(System::Object^ sender, System::EventArgs^ e)
{
++this->counter;
}
private:
void IdleStart()
{
Application::Idle += gcnew System::EventHandler(this, &Form1::OnIdle);
}
void IdleStop()
{
Application::Idle -= gcnew System::EventHandler(this, &Form1::OnIdle);
}
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
MessageBox::Show(this->counter.ToString());
}
System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e)
{
this->IdleStart();
}
System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{
this->IdleStart();
}
System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)
{
this->IdleStop();
}
ただし、IdleStart->IdleStartと連続で押されるのを考慮していないのでフラグなり、
ボタンを触れなくするなりして対処してください。
あ、フラグどうせ使うならtetrapodさんの方法で十分ですね。
tetrapodさん、Blueさん、ありがとうございます。
そうですね。フラグを立てればよかったんですね。
何か特別な処理をしなければならないのでは・・・と、難しく考えすぎていたようです。
無事解決しました。ありがとうございました。
ツイート | ![]() |