画面に文字を描画したいのですが、コンパイルエラーがとれません。
// フォーム情報取得
CClientDC dc(this);
// フォームをグラフィックスに割り当てる
Graphics graphics(dc.m_hDC);
// アンチエイリアス設定
graphics.SetSmoothingMode(SmoothingModeAntiAlias);
StringFormat sf;
PointF rf;
Gdiplus::Font ft(dc.m_hDC);
Gdiplus::Brush br;
~~~~~~~~~~~~~~~~~~~~
graphics.DrawString(ptr,3,&ft,rf,br);
このようなソースになっておりまして、
コンパイルエラーは以下の通りです。
C:\edge5\edge5View.cpp(115) : error C2248: 'Brush::Brush' : protected メンバ (クラス 'Gdiplus::Brush' で宣言されている)にアクセスできません。
c:\progra~1\microsoft platform sdk\include\gdiplusbrush.h(70) : 'Brush::Brush' の宣言を確認してください。
何が問題なのでしょうか。
初歩的な事だと思うのですが、C++の経験が少なくお恥ずかしい質問かも
しれませんが、ご存じの方教えてください。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...
によれば、
> これは抽象基本クラスであり、インスタンス化できません。ブラシオブジェクトを作成するには、SolidBrush、TextureBrush、LinearGradientBrush など、Brush から派生したクラスを使用します。
ってこと。なので、
# Gdiplus::Font ft(dc.m_hDC);
# SolidBrush* myBrush = new SolidBrush(Color::Red);
# Gdiplus::SolidBrush* br = new Gdiplus::SolidBrush(Color::Red);
とかで動くんではないかと(c++ のコード書かなくなって久しいので、ミスがありそうな.....)。
エラーの通り、"protected メンバ"を使おうとしているのでは?
a)"protected メンバ"を使おうとしている間違いを直す
あるいは
b)gdiplusbrush.h(70) : 'Brush::Brush' の宣言
をpublicとかに直す
とよいでしょう。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200204...
ありがとうございます。
大変勉強になります。
ありがとうございます。
大変勉強になります。
資料を見る限りでは、
これは抽象基本クラスであり、インスタンス化できません。ブラシ オブジェクトを作成するには、SolidBrush、TextureBrush、LinearGradientBrush など、Brush から派生したクラスを使用します。
となっています。
例えば、こんな感じで宣言するとよいでしょうか(下記コードが動作するかどうか検証していません)
Gdiplus::SolidBrush brush(Gdiplus::Color.Blue);
ありがとうございます。
大変勉強になります。
おっしゃる通りでした。
(GDI+に詳しくないので的を射ていなかったら、すみません。。)
GDI+のリファレンス(http://msdn2.microsoft.com/en-us/library/ms534424(VS.85).aspx)を読んで見たところ、
Brushクラスが抽象クラスだから「Gdiplus::Brush br;」のようにインスタンス化できないエラーだと思います。
抽象クラスではなく具象クラス(SolidBrush, HatchBrushなど)を使って、「Gdiplus::HatchBrush br;」とインスタンス化するようにコードを修正してみるといかがでしょうか?
個人的な考えでは、ライブラリを使っていて筋が通らないようなエラーに遭遇した場合、はじめに「ライブラリ作者の意図にそぐわない使い方なのかも?」と考えることが多いです。
今回のソース・エラーを見ると、作者が「例えばBrushだと、どのように塗れば良いのか分からないから、具体的にどんなブラシ(ソリッドなのか、ハッチスタイルなのか)で塗るのか決めてね。」と言っているような気がします。(個人的な感覚なので伝わりにくくてすみません)
ありがとうございます。
大変勉強になります。
おっしゃる通りでした。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja...
によれば、
> これは抽象基本クラスであり、インスタンス化できません。ブラシオブジェクトを作成するには、SolidBrush、TextureBrush、LinearGradientBrush など、Brush から派生したクラスを使用します。
ってこと。なので、
# Gdiplus::Font ft(dc.m_hDC);
# SolidBrush* myBrush = new SolidBrush(Color::Red);
# Gdiplus::SolidBrush* br = new Gdiplus::SolidBrush(Color::Red);
とかで動くんではないかと(c++ のコード書かなくなって久しいので、ミスがありそうな.....)。
ありがとうございます。
大変勉強になります。
おっしゃる通りでした。
ありがとうございます。
大変勉強になります。
おっしゃる通りでした。