ライブラリ: EasyAndFastGUIグラフィックインターフェース作成ライブラリ - ページ 14

 

こんにちは。

//+------------------------------------------------------------------+
//| 要素を描画するためのキャンバスを作成する。
//+------------------------------------------------------------------+
bool CElement::CreateCanvas(const string name,const int x,const int y,
                            const int x_size,const int y_size,ENUM_COLOR_FORMAT clr_format=COLOR_FORMAT_ARGB_NORMALIZE)
  {
//--- サイズ調整
   int xsize =(x_size<1)? 50 : x_size;
   int ysize =(y_size<1)? 20 : y_size;
//--- 最後のエラーをリセットする
   ::ResetLastError();
//--- オブジェクトの作成
   if(!m_canvas.CreateBitmapLabel(m_chart_id,m_subwin,name,x,y,xsize,ysize,clr_format))
     {
      ::Print(__FUNCTION__," > アイテムを描画するためのキャンバスの作成に失敗しました。+m_class_name+"): ",::GetLastError());
      return(false);
     }
//--- 最後のエラーをリセットする
   ::ResetLastError();
//--- 基本クラスへのポインタを取得する。
   if(!m_canvas.Attach(m_chart_id,name,clr_format))
     {
      ::Print(__FUNCTION__," > チャートへの描画キャンバスのアタッチに失敗しました:",::GetLastError());
      return(false);
     }
//--- プロパティ
   ::ObjectSetString(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_TOOLTIP,"\n");
   ::ObjectSetInteger(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_CORNER,m_corner);
   ::ObjectSetInteger(m_chart_id,m_canvas.ChartObjectName(),OBJPROP_SELECTABLE,false);
//--- フォーム以外のすべての要素は、メイン要素よりも優先順位が高い。
   Z_Order((dynamic_cast<CWindow*>(&this)!=NULL)? 0 : m_main.Z_Order()+1);
//--- 座標
   m_canvas.X(x);
   m_canvas.Y(y);
//--- 寸法
   m_canvas.XSize(x_size);
   m_canvas.YSize(y_size);
//--- 終点からのインデント
   m_canvas.XGap(CalculateXGap(x));
   m_canvas.YGap(CalculateYGap(y));
   return(true);
  }

CreateBitmapLabel -グラフィック・リソースを作成する

Attach - 同じリソースを読み込み、また同じリソースに書き込む。

それとも何か間違って理解しているのでしょうか?

 

再びこんにちは :)

class CMouse
  {

...............

   //--- (1) カーソルのあるウィンドウの番号、(2) X座標に対応する時間を返す、 
   // (3) Y座標に対応するレベル(価格
   int               SubWindowNumber(void) const { return(m_subwin);                        }
   datetime          Time(void)            const { return(m_time);                          }
   double            Level(void)           const { return(m_level);                         }

タイム&レベルはどこかで使われているのでしょうか?どこにも見当たらないのですが・・・。

SubWindowNumberは何に使うのですか?

私が言いたいのは、ChartXYToTimePriceは マウスを動かすたびに実行するにはかなりコストのかかる操作だということです。

 
Oleksii Chepurnyi:

コメントにすべて書いてある。付け加えることは何もない。

 
Anatoli Kazharski:

コメントにすべて書いてある。付け加えることは何もない。

もしコード内のコメントということであれば、そこですべてが明らかになりますが、質問の趣旨はそこではありません)

 
Oleksii Chepurnyi:

...

私が言いたいのは、ChartXYToTimePriceは、マウスを動かすたびに実行するにはかなりコストのかかる操作だということです...

GUIがメイン・ウィンドウにない場合、相対座標を取得する。

 
Anatoli Kazharski:

GUIがメインウインドウにないときの相対座標を求める。

つまり、GUIがメインウィンドウにないときだけ計算すればいいのでは?:)


それよりも、なぜAttachなのかに興味があります。私が理解する限り、それはCreateBitmapLabelのアクションを繰り返します。

 
Oleksii Chepurnyi:
だから、GUIがメイン・ウィンドウにないときだけ計算すればいいのでは?:)

メインのGUIウィンドウがチャートのサブウィンドウにあり、ダイアログがメインウィンドウにある場合のバリエーションもあります。

それよりも、なぜAttachなのかに興味があります。私が理解している限りでは、CreateBitmapLabel のアクションを繰り返します。

CCanvas::Attach() メソッドのコードがあります:

//+------------------------------------------------------------------+
//| ビットマップ・リソースで新しいオブジェクトをアタッチする。
//+------------------------------------------------------------------+
bool CCanvas::Attach(const long chart_id,const string objname,ENUM_COLOR_FORMAT clrfmt=COLOR_FORMAT_XRGB_NOALPHA)
  {
   if(OBJ_BITMAP_LABEL==ObjectGetInteger(chart_id,objname,OBJPROP_TYPE))
     {
      string rcname=ObjectGetString(chart_id,objname,OBJPROP_BMPFILE);
      rcname=StringSubstr(rcname,StringFind(rcname,"::"));
      if(ResourceReadImage(rcname,m_pixels,m_width,m_height))
        {
         m_chart_id=chart_id;
         m_objname=objname;
         m_rcname=rcname;
         m_format=clrfmt;
         m_objtype=OBJ_BITMAP_LABEL;
         //--- 成功
         return(true);
        }
     }
//--- 失敗
   return(false);
  }
 
Anatoli Kazharski:


CCanvas::Attach() メソッドのコードがあります:

CCanvas::Attach()メソッドのコードがあります。それらを見た。そして、私が理解した限りでは、CreateBitmapLabel は空のリソースを作成し、Attach はそのリソース(any)を読み込んで m_pixels に書き込む。そして、上に書いたように、nameという名前でリソースを作成し(CreateBitmapLabel)、同じリソースを読み込んで(Attach)、読み込んだものをまた同じm_pixelsに書き込みます。

それとも何か間違って理解しているのでしょうか?

PS 実験的には、Attachなしですべてうまくいきました :)

 
Oleksii Chepurnyi:

...

PS 実験的にAttachなしですべてがうまくいった :)

本当に?また何か変化があったんだね。確かに以前はうまくいかなかった。

チャートからGUIを削除したら、オブジェクトが削除された?

 
Anatoli Kazharski:

本当ですか?また変化があったんだね。以前は確かに何かがうまくいっていなかった。

グラフからGUIを削除した後、オブジェクトは削除された?

何もかもきれいになったように見えますが...)

ファイル:
35.png  11 kb
36.png  6 kb