記事"パネルを改善してみましょう(CAppDialog / CWndClientからの継承、背景の色の変更、透明性の追加)"についてのディスカッション - ページ 2

 

ウラジミール、記事をありがとう。もっとつまらない質問があるのですが・・・。

CBmpButton 型のオブジェクトがあります。つまり、ボタンの画像自体がリソースとして機能します。どうすればそのプロパティにアクセスできるのでしょうか?それとも不可能でしょうか?

ドキュメントの

CControlsDialog::CreateBmpButton1()メソッドで遊んでみた:

//+------------------------------------------------------------------+
//| BmpButton1」ボタンを作成する。|
//+------------------------------------------------------------------+
bool CControlsDialog::CreateBmpButton1(void)
  {
//--- 座標
   int x1 = INDENT_LEFT;
   int y1 = INDENT_TOP + (EDIT_HEIGHT + CONTROLS_GAP_Y);
   int x2 = x1 + BUTTON_WIDTH;
   int y2 = y1 + BUTTON_HEIGHT;
//--- 作成
   if(!m_bmpbutton1.Create(m_chart_id, m_name + "BmpButton1", m_subwin, x1, y1, x2, y2))
      return(false);
//--- コントロールのbmpファイル名を設定する CBmpButton
   string name1, name2;
   name1 = "\\Images\\euro.bmp";
   name2 = "\\Images\\dollar.bmp";
   m_bmpbutton1.BmpNames(name1, name2);
   if(!Add(m_bmpbutton1))
      return(false);
   m_chart.Redraw();
   if(ObjectFind(m_chart_id, name1) >= 0)
     {
      DebugBreak();
     }
//--- 成功
   return(true);
  }
//+------------------------------------------------------------------+

パネル上の画像自体のオブジェクトはObjectFind()を使っても見つかりません。もし可能であれば、どのように見つけることができますか?

ありがとうございます。

 
Denis Kirichenko:

ウラジミール、記事をありがとう。もっと下らない質問があるかもしれないが......。

CBmpButton 型のオブジェクトがあります。つまり、ボタンの画像そのものがリソースとして機能しています。そのプロパティにアクセスするにはどうすればいいのでしょうか?それともできないのでしょうか?

ドキュメントの

CControlsDialog::CreateBmpButton1()メソッドで遊んでみた:

ObjectFind()を使っても、パネル上の画像自体のオブジェクトが見つかりません。もし可能であれば、どうやって見つけるのでしょうか?

ありがとうございます。

画像(ドローイング)はオブジェクトではありません。オブジェクトは線、長方形...グラフィック要素です。

 

こんにちは、ウラジミール。あなたはウィンドウに追加のClientAreaを追加しました。そして、CMyWndClient::ShiftButtonメソッドを使ってボタンをスクロールしています。これはあまり便利ではありません。また、ボタン以外にも多くのUI要素が存在します。つまり、各要素のメソッドを書いて、スクロール・ハンドラで呼び出すのを忘れないようにするのは大変なことなのだ。それなら、ClientAreaを スクロールする方が簡単ではないだろうか?そうすれば、そこに含まれるすべてのUI要素が自動的にスクロールされる。ハンドラでClientAreaのスクロールだけを 指定すればいいのだ

 
Mihail Matkovskij #:

こんにちは、ウラジミール。あなたはウィンドウに追加のClientAreaを追加しました。そして、CMyWndClient::ShiftButtonメソッドを使ってボタンをスクロールしています。これはあまり便利ではありません。また、ボタン以外にも多くのUI要素が存在します。つまり、要素ごとにメソッドを書いて、スクロール・ハンドラでそれを忘れずに呼び出すのは大変なことなのだ。それなら、ClientAreaを スクロールする方が簡単ではないだろうか?そうすれば、そこに含まれるすべてのUI要素が自動的にスクロールされる。ハンドラでClientAreaのスクロールだけを 指定すればいいのだ

そのような例を書いてください。誰もがそのような実装に興味を持つと思います。

 
Vladimir Karputov #:

そのような例を書いてください。誰もがそのような実装に興味を持つと思います。

少し考えてわかった。チャート・オブジェクト(この場合は ClientAreaと ボタン)の部分的な非表示が不可能なので、このようなスクロールは実装できない。他のUIでは実装方法が異なる。他のUIでは、スクロール 範囲に入る矩形領域が表示され、それ以外はすべて非表示になる。だから混乱するのだ。

 
パーフェクト