defineで定義した変数に従ってメッセージボックスに文字列を表示させるには?

解決


トッシ  2006-07-31 18:45:54  No: 62610

初めて質問させていただきます。
皆様よろしくお願いいたします。

質問はタイトルの通りなのですが、例えば
  #define OK  10
  #define NG  20
  #define ERROR  30
と定義しているとして、プログラム上で何かしらの演算結果が得られて
  D = 20
という答えが最終的に得られたとします。
そのときに、SetDlgItemText関数を用いて、エディットボックスに得られた解の「20」ではなく、#defineで定義した「NG」と表示させたいのですが、どのようにすればいいのでしょうか?

演算結果を全て数字ではなく、#defineで定義したそれに対応する文字列で表示させたいと思っています。
ちなみにAPIを用いてプログラムをしております。
どなたかご教授いただければうれしく思います。
以上よろしくお願いいたします。


Blue  2006-07-31 19:06:36  No: 62611

#define OK  10
#define NG  20
#define ERROR  30

#define str(X) #X

BOOL GetMyMessage( const int no, LPTSTR msg )
{
    switch ( no )
    {
    case 10:
        _tcscpy( msg, TEXT( str( OK ) ) );
        break;
    case 20:
        _tcscpy( msg, TEXT( str( NG ) ) );
        break;
    case 30:
        _tcscpy( msg, TEXT( str( ERROR ) ) );
        break;
    default:
        return FALSE;
    }
    return TRUE;
}

みたいな関数をつくるとか。
これでは効率が悪いと思うのならば、
#defineだけではなく、STLのstd::mapとかを組み合わせるとか。
       ~~~~


Blue  2006-07-31 19:08:28  No: 62612

訂正です。

BOOL GetMyMessage( const int no, LPTSTR msg )
{
    switch ( no )
    {
    case OK:
        _tcscpy( msg, TEXT( str( OK ) ) );
        break;
    case NG:
        _tcscpy( msg, str( NG ) );
        break;
    case ERROR:
        _tcscpy( msg, str( ERROR ) );
        break;
    default:
        return FALSE;
    }
    return TRUE;
}


Blue  2006-07-31 19:11:36  No: 62613

あぅ、訂正なのに、TEXTマクロが抜けてしまった。。。orz

何はともあれ、実行時に判定するのは、#defineで定義した値がいつ置換されるかを
考えれば、結構難しいと思います。

類似スレ
ビルド後のdefine値の取得方法
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200607/06070095.txt


επιστημη  2006-07-31 19:37:28  No: 62614

#define OK      10
#define GOOD    10
#define NG      20
#define BAD     20
#define ERROR   30
#define UNKNOWN 30
#define RETRY   30

なんてとき、10/20/30はそれぞれどれに置換しましょうか?
…ってことに対処できないんですけど。


PATIO  2006-08-01 03:38:57  No: 62615

多分、επιστημηさんがあげられているようなパターンに
対処できる方法は無いような気がしますけれど。
#defineで定義されている内容はプリプロセッサの段階で置き換えられて
しまうわけでコンパイル時には残っていませんしねぇ。
数値から文字列を何とかしたいなら数値にユニークにしないと
引っ張りようが無いと思います。
ユニークにする為の付加情報でもあれば振り分けも可能でしょうけれど、
それも無かったら無理でしょうね。

というか、同じような質問をどこかで見たんですが、
最近こういうの流行ってでもいるんですかねぇ。


トッシ  2006-08-03 05:46:49  No: 62616

皆さん丁寧な解答ありがとうございます!
皆さんの意見を参考にしてプログラムを組んでみたいと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加