COLOORREF型の16進法表現

解決


初心者  2008-06-16 15:25:55  No: 68562

.NET2008、MFCです。
初歩的なことだと思うのですが、アドバイスをお願いします。

参考書やネットで検索すると、COLORREF型は、16進法の整数となっています。

しかし、カラーダイアログで、GetColorで、COLORREF型の色を取得し、その色をlong型やCOLORREF型にしたエディットボックスで確かめると、10進法の値になっています。

これは、単純に16進法で見るか、10進法で見るかの違いなのでしょうか。

また、あれこれ検索すると、16進法→10進法、10進法→16進法を置き換える関数はない、と書いてありましたが、自分で計算するしかないのでしょうか。

深く考えずに、COLORREF型の値として変数にしてしまえば、値そのものは見なくても済むとは思うのですが、気になります。

よろしくお願いします。


初心者  2008-06-16 16:33:44  No: 68563

読み直して、自分でも何を質問しているのか分かりにくい、と思いました。

カラーダイアログで、赤を指定し、COLORREF型で宣言した変数に置いてみると、値は、255 になります。
しかし、16進法の表現では、FF0000だと思うのです。

でも、
COLORREF m_color = FF0000は、ビルドを通りません。

開発環境は10進法のままで、
COLORREF m_color = FF0000;
が通るようにする方法はあるのでしょうか。

また、エディットボックスで、赤を「FF0000」と表示する方法はあるのでしょうか。


wclrp ( 'o')  2008-06-16 16:55:12  No: 68564

>単純に16進法で見るか、10進法で見るかの違いなのでしょうか。
そうですね。

>ビルドを通りません。
どのようなエラーですか?

以下のようにすればビルドできます。
COLORREF color;
color = RGB(255,0,0);
color = RGB(0xFF,0,0);
color = 0xFF;


とおりすがった  2008-06-16 18:24:40  No: 68565

COLORREF m_color = FF0000

COLORREF m_color = 0xFF0000;

と言う事ではなくて?


とおりすがっている  2008-06-16 20:20:11  No: 68566

>また、エディットボックスで、赤を「FF0000」と表示する方法はあるのでしょうか。

unsigned char r, g, b;
r = GetRValue( color );  // color : COLORREF 
g = GetGValue( color );  // リトルエンディアンなので
b = GetBValue( color );  // 0xbbggrrで格納されている

CString str;  // これをエディットボックスに表示させる
str.Format( "0x%02x%02x%02x", r, g, b );

COLORREFとRGBの関係は
RGBマクロやGet*Valueマクロを見てみるといいですね。


rin  2008-06-16 21:15:35  No: 68567

>カラーダイアログで、赤を指定し、COLORREF型で宣言した変数に置いてみると、値は、255 になります。
>しかし、16進法の表現では、FF0000だと思うのです。
0x000000FF (=0xFF) です


初心者  2008-06-16 22:24:26  No: 68568

たいへんありがとうございます。

COLORREF  m_Color = 0x000000FF;
でビルドできました。

よく、COLORREF型の色表現として、「FF0000」とか、「FF69B4」というような言葉を使います。
これがイコール「16進法」ではない、ということは理解しました。
2桁づつRGBの値の指定だということは分るのですが、これは何なのでしょうか。
RGBマクロの値を、それぞれ16進法にしたものなのでしょうか。


シャノン  2008-06-17 03:14:11  No: 68569

COLORREF の 16 進表記は RGB ではなく BGR の順に書きます。


  2008-06-17 03:44:16  No: 68570

それも16進数といえる
プログラムでは区別するために0xつけるだけ


wclrp ( 'o')  2008-06-17 05:00:59  No: 68571

「FF0000」とか、「FF69B4」は、書いた人が16進数といえば16進数です。
また、文脈から、COLORREF型や16進数を知っている人は推測で、
16進数と判断することがあります。

>2桁づつRGBの値の指定だということは分るのですが
たぶんそんな感じだと思う。
推測でわかるからわざわざ説明しないでよくつかわれている。

色表現として「FF0000」とか書いている場合は
人間にわかりやすいようにRGBの順番にしていることが多いので
俺は断言しない。
文脈で判断するか不明瞭な場合は質問して確認取った方がいい。

プログラムとしては文脈とか推測とかで判断するわけにはいかないから
C/C++などでは0xを付けて16進数であることを示します。

C/C++などでは
「ABCDEF」は変数名や関数名などと同じ扱いされます。
「011111」は8進数扱いされます。


初心者  2008-06-17 12:29:52  No: 68572

wclrp ( 'o')さん、とおりすがったさん、とおりすがっているさん、rinさん、シャノンさん、かさん、ありがとうございます。

「理解しました」と書くと、「本当に理解したのか」と叱られそうですが、私のレベルなりに、全体像は把握できたと思います。

たいへんありがとうございました。


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

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






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