用VC实现对属性表按钮区的位图绘制
2008-11-13 19:30:14 来源:WEB开发网 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);//恢复原字体。
}
更多精彩
赞助商链接