プログラムの再実行

[戻る]
ほわとろ 2001/11/24(土) 01:39:28
ダイアログベースでRGBの値を入れる3つのエディットボックスがあって、
ボタンを押すと、そのRGBで指定した色が表示するという
プログラムを作っているのですが、
RGBの値、0〜255以外の数字が入力されたときに、
エラーメッセージを表示させて、
OKを押したらプログラムを再実行させて、
もう一度最初から処理をしたいのですが、
一応、終了の仕方はわかったのですが、
再実行の仕方をどうやればいいかわかりません。


if (m_r > 255 || m_g > 255 || m_b > 255)
{
        
    int iResults;

    iResults = MessageBox("RGBの範囲外の数値です","エラー", MB_OK | MB_ICONSTOP);

    // 押されたボタンを判定
    switch (iResults)
    {
    case IDOK:
        CDialog::OnOK();
        break;
    }
}


問題のプログラムの箇所を載せておきます。
よろしくお願いします。

toru [E-Mail] [HomePage] 2001/11/24(土) 03:04:23
再実行ってのはアプリを再実行って事ですか?

そんなの無理ですよ。範囲外を入力されたらウィンドウの内容を初期化すれば
いいだけでは無いんですか?

それと範囲外を判別するなら

> if (m_r > 255 || m_g > 255 || m_b > 255)

これだとマイナス値を入れられたらアウトでは?

まあ、再実行したいなら他のアプリを起動して(このアプリも自作します)
その間に自分自身を終了。そしてそのアプリから一定時間後に
起動させる......っていうか実用性ゼロですね。

なので範囲外だったら終了させずにウィンドウの初期化のみを行うってのがいいと思います。

と、ここまで書いてて気づいたんですがメッセージボックスにMB_OKを指定してるじゃないですか?
その場合ってOK以外ないと思うんですが...その後のswitchは必要あるんですか?

ほわとろ 2001/11/24(土) 03:56:35
> これだとマイナス値を入れられたらアウトでは?

たしかにマイナスではだめですね。
修正しておきます。

> と、ここまで書いてて気づいたんですがメッセージボックスにMB_OKを指定してるじゃないですか?
> その場合ってOK以外ないと思うんですが...その後のswitchは必要あるんですか?

よくよく考えてみると意味ありませんね。

> そんなの無理ですよ。範囲外を入力されたらウィンドウの内容を初期化すれば
> いいだけでは無いんですか?

あっそうですね。
初期化すればよかったんですね。
ずっと再実行のことばっか考えていたもので。
それで、初期化とはどうやるのでしょうか?

CdS 2001/11/24(土) 12:46:34
エラーにならずに色を表示させたときの値を記憶しておいて、それに戻せばいいだけだと思いますが。
どういう初期化をするかは、ほわとろさんが決めることです。
エラー後に、RGB(0,0,0)にしたいのならそうすればいいし、RGB(255,255,255)にしたければそうすればいいし。

toru [E-Mail] [HomePage] 2001/11/24(土) 13:23:40
そういえばスピンコントロールをくっつけたら値が補正されませんでしたっけ?

つまりですね、マイナスを入れられたら0になって
255以上を入れられたら255になるんですよ。

事実上範囲外は無くなります。
まあ、根本的な解決にはなって無い気がしますが。

古いスレッドには追加発言できません。