- 締切済み
windowプログラム ダイアログベース
プログラム始めて半年もしない者です。 今、フォームとスタティックテキストがあるのですが、 そのスタティックテキストに円を描きたい場合はどうすればよいのでしょうか? アドバイスでも答えでもよろしくお願いいたします
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
こんばんは。御礼頂き感謝いたします。 ・先ずは訂正です。 BOOL CKaiketuDlg::OnInitDialog() の中にある以下に該当する処理は、必要ありませんでした。失礼致しました //ココから //スタティックコントロールクラスのポインタを取る CWnd* pStatic = this->GetDlgItem(IDC_STATIC); //サブクラス化を解除する HWND hStatic = pStatic->UnsubclassWindow(); //m_staticはCStaticCircleクラスの事です。 //m_staticにスタティックコントロールハンドルを渡してサブクラス化させます m_static.SubclassWindow(hStatic); //ココまで >>'m_static':定義されていない識別子です >>と表示されます。 >>m_staticはCStaticCircleクラスの事とあります。とはその中でm_static変数追加ということですか? はい。ダイアログ用クラスのヘッダーに#include"StaticCircle.h"と置く事です。 続いてMFC ClassWizardにて、「メンバ変数ページ」で、ダイアログクラス上にあるスタティックコントロールのIDを選択して「変数の追加ボタン」を押して 【メンバ変数:m_static】 【カテゴリ:コントロール】 【タイプ:CStaticCircle】 を設定してください。 >>void CStaticCircle::OnPaint() >>これはCStaticCircle.cppに追加すればよいのでしょうか? はい。MFC ClassWizardにてOnPaint()を追加してください。
- machongola
- ベストアンサー率60% (434/720)
こんにちは。強引ですが可能な様です。 CStaticクラスから派生したクラスを準備して置きます(CStaticCircleとします)。 円を描かせる為に、CStaticCircle::OnPaintを実装して置きます。 OnInitDialog内で、搭載してあるスタティックテキストコントロールのポインタを取り出し、サブクラス化を解除します。 最後に、準備しておいた、CStaticCircleクラスにスタティックテキストコントロールのハンドルを渡してサブクラス化をします。 以下参考程度に。 //ダイアログ初期化の中 BOOL CKaiketuDlg::OnInitDialog() { CDialog::OnInitDialog(); //ここら辺は決まり文句なので省略しています // TODO: 特別な初期化を行う時はこの場所に追加してください。 //スタティックコントロールクラスのポインタを取る CWnd* pStatic = this->GetDlgItem(IDC_STATIC); //サブクラス化を解除する HWND hStatic = pStatic->UnsubclassWindow(); //m_staticはCStaticCircleクラスの事です。 //m_staticにスタティックコントロールハンドルを渡してサブクラス化させます m_static.SubclassWindow(hStatic); return TRUE; // TRUE を返すとコントロールに設定したフォーカスは失われません。 } //CStaticCircle メッセージ ハンドラ void CStaticCircle::OnPaint() { CPaintDC dc(this); // 描画用のデバイス コンテキスト // TODO: この位置にメッセージ ハンドラ用のコードを追加してください //取り合えず緑色の鉛筆 CPen pen(PS_SOLID, 1, RGB(0, 255, 0)); dc.SelectObject(&pen); //クライアント領域の矩形を取る RECT rc; this->GetClientRect(&rc); //円を描写させる dc.Ellipse(&rc); // 描画用メッセージとして CStatic::OnPaint() を呼び出してはいけません }
- SAYKA
- ベストアンサー率34% (944/2776)
>スタティックテキストに >円を描きたい これ、何かおかしいと自分で思わない? 文字としての○ならできるかもね。 http://www.google.com/search?lr=lang_ja&q=vc%2B%2B%20%E5%86%86%E3%81%AE%E6%8F%8F%E7%94%BB
お礼
ご回答ありがとうございます。 悩みに悩みましたが、どこがおかしいか自分では気づけませんでした。 下のアドレスを参考にもしてみましたが…
お礼
ご回答ありがとうございます。 コピペして実行してみましたところ、何点かわからないところがあるのでよろしくお願いいたします。 ・'m_static':定義されていない識別子です と表示されます。 m_staticはCStaticCircleクラスの事とあります。とはその中でm_static変数追加ということですか? ・void CStaticCircle::OnPaint() これはCStaticCircle.cppに追加すればよいのでしょうか? 以上よろしくお願いいたします。