文章 "改进面板:增加透明化、改变背景色以及继承于 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);
//--- 设置控件 CBmpButton 的 bmp 文件名称
   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 不是更简单吗?这样,其中包含的所有用户界面元素都会自动滚动。只需在处理程序中 指定ClientArea 滚动即可。

 
Mihail Matkovskij #:

你好,弗拉基米尔。您在窗口中添加了一个额外的 ClientArea。然后您使用 CMyWndClient::ShiftButton 方法来滚动按钮。这不是很方便,因为窗口中可能有很多按钮。此外,除了按钮之外,还可能有很多 UI 元素。因此,为每个元素编写方法并在滚动处理程序中不忘记调用它们是一项挑战。滚动ClientArea 不是更简单吗?这样,其中包含的所有用户界面元素都会自动滚动。只需在处理程序中 指定ClientArea 滚动即可。

请写一个这样的例子。我想大家都会对这样的实现感兴趣。

 
Vladimir Karputov #:

请写一个这样的例子。我想每个人都会对这样的实现感兴趣。

经过一番思考,我想明白了。无法实现这种滚动是因为无法部分隐藏任何图表对象(在本例中是ClientArea 按钮)。其他用户界面的实现方式有所不同。它们显示的是滚动区域 内的一个矩形区域,而其他一切都被隐藏起来。因此造成了混淆。

 
完美
 
谢谢,弗拉基米尔,干得漂亮。
如何实现标题的透明度?