スタティック、エディットのテキストの色設定 – プログラミング – Home

スタティック、エディットのテキストの色...
 
通知
すべてクリア

[解決済] スタティック、エディットのテキストの色設定


VC初心者
 VC初心者
(@VC初心者)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

誰かお助けください。困っています。

スタティックやエディットのテキストの色を設定したいのですがえらーがでて
そのエラーの意味がよくわからないのです。
環境 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 関数ポインタとして評価されない式を使って関数を呼び出そうとしました。」
というエラーです。ヘルプでも調べたのですが良く分からないのです。
何方かご返答ください。お待ちしています。

以上


引用未解決
トピックタグ
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

見たところ、特にどこが変とは思えないのですが、
実際に出たエラーメッセージを貼り付けたほうが良いような気がします。
とりあえず、簡単なテストプログラムに該当部分を貼り付けてみましたが、
それらしいエラーは起こりませんでした。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

#define RGB なんとか
または
#define SetTextColor かんとか
といった定義がどこかにありませんか?


返信引用
VC初心者
 VC初心者
(@VC初心者)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

dairygoodsさん、探しましたがありませんでした。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

#define SetTextColor m_hDC
としてコードをコンパイルしてみたらC2064が出ました。
このエラーが出るとしたら、pDC->には矛盾が無くて
なおかつ、関数でない物に置き換わらないと出ないみたいですね。

ソースコードのこの部分だけではなんともわからないですね。
switch文の前で
#undef SetTextColor
としたらコンパイルが通るようなら、
どこかに#defineしているところが有ると思いますけれど。

MFC提供の部分ではなくて、自分で作成したヘッダーファイルに
#defineしている部分はないですか?


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

もとい、ヘッダーでなくてもそのソースファイルのその関数よりも前に
定義があったらアウトですね。


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

ばらばらで申し訳ない。(^^;
グローバルに

int a;
#undef RGB
#define RGB a
としても出ました。

この場合は、RGBのマクロが上書きされているから単に#undef RGBではうまくいかないで
すね。
ちなみに
#undef RGB
をしないで

#define RGB a
をすると

再定義されているという警告が出ます。

試しに
RGB(0, 255, 255)

0x00ffff00
としてコンパイルしても出ますか?


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

RGB全体を括ってる余計な括弧が怪しいような気がしますが。


返信引用
VC初心者
 VC初心者
(@VC初心者)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

PATIOさん試しにRGB(0, 255, 255)を「0x00ffff00」にかえて
コンパイルしたらエラーは出ませんでした。
でも、「0x00ffff00」ってRGB(0, 255, 255)の色ですか?
実行しても色が変わらないのですが・・・


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> 実行しても色が変わらないのですが・・・

※の行が実行されていることを確認しましたか?

【確認の例】
※の部分にブレークポイントを設置して、
デバッガで実行したとき、その位置で止まるかどうか調べる


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

RBGというのはマクロで、最終的にはCOLORREF型の数値として色を返却します。
RGB(0, 255, 255)をCOLORREF型で表すとそういう値になるのです。
RGBマクロ調べて見ればわかります。
あと、COLORREF型の説明もあわせて確認してください。


返信引用
VC初心者
 VC初心者
(@VC初心者)
ゲスト
結合: 23年前
投稿: 21
Topic starter  

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました