WEB开发网
开发学院软件开发VC 用VC实现对属性表按钮区的位图绘制 阅读

用VC实现对属性表按钮区的位图绘制

 2008-11-13 19:30:14 来源:WEB开发网   
核心提示: CPropertySheetWithLogoDlg dlg("属性表按钮区绘制");CFirstPropertyPage FirstPage; //进行类的实例化dlg.SetLogoText("Example Vision"); //对要在按钮区域

  CPropertySheetWithLogoDlg dlg("属性表按钮区绘制");
  CFirstPropertyPage FirstPage; //进行类的实例化
  dlg.SetLogoText("Example Vision"); //对要在按钮区域绘制的字符串进行赋值
  dlg.AddPage(&FirstPage); //向属性表中添加属性页
  int nResponse = dlg.DoModal();
  if (nResponse == IDOK){}
  else if (nResponse == IDCANCEL){}
  return FALSE;

这段代码使由Wizard代码生成器生成的应用程序的主框架(mainframe)成为一个属性表。其中SetLogoText是CPropertySheetWithLogoDlg类的用户自定义方法,它是给写在属性表按钮区的字符串赋值。

下面就是如何对按钮区域进行操作。属性表按钮区是非窗口客户区,因此我们不能通过重载CPropertySheetWithLogoDlg类的OnDraw方法来直接对属性表按钮区进行操作。而必须重载CPropertySheetWithLogoDlg类的OnPaint方法。其具体实现代码如下:

  void CPropertySheetWithLogoDlg::OnPaint()
  {
  CPaintDC dc(this); //获得绘制的设备环境。
  if(m_LogoText.IsEmpty())//判断字符串是否为空。
  return;
  CRect rectTabCtrl;
  GetTabControl()->GetWindowRect(rectTabCtrl);//获得属性表的制表控件的客户区屏幕坐标。
  ScreenToClient(rectTabCtrl);//屏幕坐标转换为窗口逻辑坐标。
  CRect rectOk;
  GetDlgItem(IDOK)->GetWindowRect(rectOk);//获得客户区最左按钮屏幕坐标。
  ScreenToClient(rectOk); //屏幕坐标转换为窗口逻辑坐标。
  dc.SetBkMode(TRANSPARENT);//背景模式设为透明。
  CRect rectText;
  rectText.left = rectTabCtrl.left;
  rectText.top = rectOk.top;
  rectText.bottom = rectOk.bottom;
  rectText.right = rectOk.left;//获得所需绘制按钮区窗口逻辑坐标。
  CFont * OldFont = dc.SelectObject(&m_fontLogo);//选择所需字体。
  COLORREF OldColor = dc.SetTextColor( ::GetSysColor( COLOR_3DHILIGHT));//设置文本颜色。
  dc.DrawText( m_LogoText, rectText + CPoint(1,1), DT_SINGLELINE | DT_LEFT | DT_VCENTER);//显示字符串。
  dc.SetTextColor( ::GetSysColor( COLOR_3DSHADOW));
  dc.DrawText( m_LogoText, rectText, DT_SINGLELINE | DT_LEFT | DT_VCENTER);//显示字符串3D阴影。
  dc.SetTextColor( OldColor);//恢复原文本颜色。
  dc.SelectObject(OldFont);//恢复原字体。
  }

Tags:VC 实现 属性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接