VC++深入详解之第十章绘图控制笔记

此乃作者笔记,仅此而已。


画图操作: void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CClientDC dc(this); switch (m_nDrawType) { case 1: dc.SetPixel(point, RGB(255, 0, 0)); break; case 2: dc.MoveTo( m_prOrigin); dc.LineTo(point); break; case 3: dc.Rectangle( CRect( m_prOrigin, point) ); break; case 4: dc.Ellipse(CRect( m_prOrigin, point)); break; default: break; } CView::OnLButtonUp(nFlags, point); } //对于CClientDC的成员函数Rectangle和Ellipse,其函数参数是一个指向CRect对象的指针,而这里传 递的却是CRect对象,主要是因为CRect类型提供了这样一个成员函数:重载LPCRECT操作符,其作用是将 CRect转换为LPCRECT类型。 再次声明,添加画笔(即修改笔的颜色): CPen pen (PS_SOLID, 1, RGB(255, 0, 0)); dc.SelectObject( &pen); 修改画刷颜色,可以指定为透明: CBrush *pBrush = CBrush::FromHandle( (HBRUSH)GetStockObject(NULL_BRUSH)); dc.SelectObject( pBrush); 修改字体: CFont *pOldFont = pDC ->SelectObject( &m_font); pDC->TextOut( 0, 0, m_strFontName); pDC->SelectObject( pOldFont); 添加设置Pen的宽度的对话框: ①先构造对话框,再生成一个类 ②在对话框中生成一个于控件关联的成员变量,用以保存笔宽。在视类中声明一个成员变量,用以保存 对话框传来的笔宽 ③在menu中添加相应的设置菜单,并且添加响应函数 ④在响应函数中调用设置对话框,并且将对话框中的笔宽取过来,保存在视类的成员变量中 注意:为了让设置对话框打开时显示的是上一次出现的笔宽,还需要在响应函数中,调用DoModal之前, 将上次的笔宽再保存回去 颜色对话框:CColorDialog类 void CGraphicView::OnColor() { // TODO: Add your command handler code here CColorDialog dlg; dlg.m_cc.Flags |= CC_RGBINIT; dlg.m_cc.rgbResult = m_clr; if( IDOK == dlg.DoModal()) { m_clr = dlg.m_cc.rgbResult; } } 字体选择对话框:CFontDialog void CGraphicView::OnFont() { // TODO: Add your command handler code here CFontDialog dlg; if( IDOK == dlg.DoModal()) { if( m_font.m_hObject) m_font.DeleteObject(); m_font.CreateFontIndirect( dlg.m_cf.lpLogFont); m_strFontName = dlg.m_cf.lpLogFont->lfFaceName; } Invalidate(); } 对话框中添加示例: void CSettingDlg::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here // Do not call CDialog::OnPaint() for painting messages UpdateData(); CPen pen( m_nLineStyle , m_nLineWidth, RGB( 255, 0, 0)); dc.SelectObject( &pen); CRect rect; GetDlgItem(IDC_SAMPLE)->GetWindowRect( &rect); ScreenToClient( rect); dc.MoveTo( rect.left + 20, rect.top + rect.Height() /2); dc.LineTo(rect.right - 20, rect.top + rect.Height()/2); } 改变对话框控件的背景及文本颜色: 为了修改对话框颜色,需要捕获WM_CTLCOLOR消息,在响应函数中修改颜色 //字体和Brush在构造函数中已经创建完成。 //m_brush.CreateSolidBrush( RGB(0, 0, 255)); //m_font.CreatePointFont( 200,_T( "华文行楷")); HBRUSH CSettingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: Change any attributes of the DC here // TODO: Return a different brush if the default is not desired if( pWnd->GetDlgCtrlID() == IDC_LINE_STYLE || pWnd->GetDlgCtrlID() == IDC_LINE_WIDTH) { pDC->SetTextColor( RGB(255, 0, 0)); pDC->SetBkMode(TRANSPARENT); return m_brush; } if( pWnd ->GetDlgCtrlID() == IDC_TEXT) { pDC->SelectObject( &m_font); pDC->SetTextColor( RGB( 0, 255, 0)); } return hbr; } 如果要改变按钮控件的背景和文字颜色,需要使用CButton类的一个成员函数:DrawItem 显示位图: ①创建位图,加载位图CBitmap ②创建兼容的DC ③将位图选入兼容DC中 ④将兼容DC中的位图贴到当前DC中BitBlt BOOL CStyleView::OnEraseBkgnd(CDC* pDC) { CBitmap bitmap; bitmap.LoadBitmap( IDB_TEST); CDC dcCompatible; dcCompatible.CreateCompatibleDC( pDC); dcCompatible.SelectObject( &bitmap); CRect rect; GetClientRect( &rect); pDC->BitBlt( 0, 0, rect.Width(), rect.Height(), &dcCompatible, 0, 0, SRCCOPY); // TODO: Add your message handler code here and/or call default return TRUE; } BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop); 与BitBlt函数不同的是,StretchBIt函数可以实现位图的拉伸或压缩,以适合目的矩形区域的尺寸

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值