誰かお助けください。困っています。
スタティックやエディットのテキストの色を設定したいのですがえらーがでて
そのエラーの意味がよくわからないのです。
環境 Win2000、VC++6.0、MFCです。
プログラムは以下のとおりです。
//----------------------------------------------------------------------
HBRUSH テキストの色を設定::OnCtlColor(
CDC* pDC,
CWnd* pWnd,
UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
int rtn = pWnd->GetDlgCtrlID();
switch(nCtlColor){
case CTLCOLOR_STATIC :
if(rtn == ID_STATIC13){
※ pDC->SetTextColor((RGB(0, 255, 255))); //
pDC->SetBkMode(TRANSPARENT);
break;
}
case CTLCOLOR_EDIT :
if(rtn == ID_NOEX){
※ pDC->SetTextColor((RGB(0, 255, 255))); //
pDC->SetBkMode(TRANSPARENT); // 背景透過
break;
}
default:
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
return hbr;
}
//------------------------------------------------------------------
このプログラムでビルドしたら、※印のところでエラーがでてそのエラー内容は
「C2064 関数ポインタとして評価されない式を使って関数を呼び出そうとしました。」
というエラーです。ヘルプでも調べたのですが良く分からないのです。
何方かご返答ください。お待ちしています。
以上
見たところ、特にどこが変とは思えないのですが、
実際に出たエラーメッセージを貼り付けたほうが良いような気がします。
とりあえず、簡単なテストプログラムに該当部分を貼り付けてみましたが、
それらしいエラーは起こりませんでした。
#define RGB なんとか
または
#define SetTextColor かんとか
といった定義がどこかにありませんか?
dairygoodsさん、探しましたがありませんでした。
#define SetTextColor m_hDC
としてコードをコンパイルしてみたらC2064が出ました。
このエラーが出るとしたら、pDC->には矛盾が無くて
なおかつ、関数でない物に置き換わらないと出ないみたいですね。
ソースコードのこの部分だけではなんともわからないですね。
switch文の前で
#undef SetTextColor
としたらコンパイルが通るようなら、
どこかに#defineしているところが有ると思いますけれど。
MFC提供の部分ではなくて、自分で作成したヘッダーファイルに
#defineしている部分はないですか?
もとい、ヘッダーでなくてもそのソースファイルのその関数よりも前に
定義があったらアウトですね。
ばらばらで申し訳ない。(^^;
グローバルに
int a;
#undef RGB
#define RGB a
としても出ました。
この場合は、RGBのマクロが上書きされているから単に#undef RGBではうまくいかないで
すね。
ちなみに
#undef RGB
をしないで
#define RGB a
をすると
再定義されているという警告が出ます。
試しに
RGB(0, 255, 255)
を
0x00ffff00
としてコンパイルしても出ますか?
RGB全体を括ってる余計な括弧が怪しいような気がしますが。
PATIOさん試しにRGB(0, 255, 255)を「0x00ffff00」にかえて
コンパイルしたらエラーは出ませんでした。
でも、「0x00ffff00」ってRGB(0, 255, 255)の色ですか?
実行しても色が変わらないのですが・・・
> 実行しても色が変わらないのですが・・・
※の行が実行されていることを確認しましたか?
【確認の例】
※の部分にブレークポイントを設置して、
デバッガで実行したとき、その位置で止まるかどうか調べる
RBGというのはマクロで、最終的にはCOLORREF型の数値として色を返却します。
RGB(0, 255, 255)をCOLORREF型で表すとそういう値になるのです。
RGBマクロ調べて見ればわかります。
あと、COLORREF型の説明もあわせて確認してください。
ありがとうございました。