ページ 11

マクロ名を画面に描画

Posted: 2012年2月28日(火) 11:45
by 小太郎
#defineで定義した名前を、文字列として画面に描画することは可能でしょうか?

キーコンフィグ画面を作ろうと思っているのですが、下の様な形にしたいです。
①矢印を上下で動かし、Enterで指定すると入力待ちに。
②何かキーを押すとそのキーのマクロ名が表示される。

  UP    KEY_INPUT_UP
> DOUN  _
  LEFT KEY_INPUT_LEFT
  RIGHT KEY_INPUT_RIGHT

ですがそのマクロ名の表示をどうしていいのか分かりません・・・

Re: マクロ名を画面に描画

Posted: 2012年2月28日(火) 11:47
by 小太郎
忘れていましたが、
VC++2008、DXライブラリとC言語でプログラムを組もうと思っています。

Re: マクロ名を画面に描画

Posted: 2012年2月28日(火) 11:57
by beatle

コード:

DrawString(0, 0, "KEY_INPUT_UP", GetColor(255, 255, 255));
という感じでどうでしょうか。

Re: マクロ名を画面に描画

Posted: 2012年2月28日(火) 12:18
by YuO
マクロ名自体はコンパイル時に消えるので,そのままではマクロ名を使うことは出来ません。

なので,マクロ名を表示しようとするならば,

コード:

struct MacroNames
{
    int value;
    const char * name;
};
const MacroNames[] macroNames =
{
#define VAL(v) { (v), #v }
VAL(KEY_INPUT_UP),
VAL(KEY_INPUT_LEFT),
/* ... */
#undef VAL
};
のような対応表を用意して,探索をかける必要があります。

Re: マクロ名を画面に描画

Posted: 2012年2月28日(火) 12:25
by 小太郎
YuO さんが書きました:マクロ名自体はコンパイル時に消えるので,そのままではマクロ名を使うことは出来ません。

なので,マクロ名を表示しようとするならば,

コード:

struct MacroNames
{
    int value;
    const char * name;
};
const MacroNames[] macroNames =
{
#define VAL(v) { (v), #v }
VAL(KEY_INPUT_UP),
VAL(KEY_INPUT_LEFT),
/* ... */
#undef VAL
};
のような対応表を用意して,探索をかける必要があります。
なるほど、そんなに難しいことになるんですね・・・
ちなみに検索をかけたとして、表示する方法の例を教えて頂けますでしょうか?

Re: マクロ名を画面に描画

Posted: 2012年2月28日(火) 12:58
by beatle
検索と表示のアルゴリズム
  • key_codeにKYE_INPUT_UPやKEY_INPUT_LEFTが代入されているとする。
  • macroNames.value == key_codeとなるiを求める。
  • macroNames.nameを何らかの文字列表示用関数で表示する

そんなに難しいアルゴリズムではないと思いますが、わからないところがあったら言ってください。

Re: マクロ名を画面に描画

Posted: 2012年2月28日(火) 13:03
by 小太郎
beatle さんが書きました:検索と表示のアルゴリズム
  • key_codeにKYE_INPUT_UPやKEY_INPUT_LEFTが代入されているとする。
  • macroNames.value == key_codeとなるiを求める。
  • macroNames.nameを何らかの文字列表示用関数で表示する

そんなに難しいアルゴリズムではないと思いますが、わからないところがあったら言ってください。


理解できました!
お二人方とも、ありがとうございます!