一、绘图

新建一个工程Graphic。添加一个菜单“绘图”,在这个菜单中添加四个菜单项,分别为点(IDM_DOT)、直线(IDM_LINE)、矩形(IDM_RECTANGLE)和椭圆(IDM_ELLIPSE)。分别为这四个菜单项添加命令响应。在每个命令响应函数中保存用户的选择,定义成员变量UINT

m_nDrawType

private保存用户的选择。在CGraphicView的构造方法中初始化m_nDrawType=0。在OnDot、OnLine、OnRectangle和OnEllipse响应函数中分别设置这个成员变量的值为1、2、3、4。分别捕获鼠标左键按下和松开的消息WM_LBUTTONDOWN和WM_LBUTTONUP。在WM_LBUTTONDOWN中将鼠标按下的这个点保存,在View类中添加成员变量CPoint

m_ptOrgin

private,在构造函数中初始化为0。在OnButtonDownh函数总保存这个点到成员变量中m_ptOrigin=point。

鼠标松开的响应函数ONBUTTONUP中代码如下:

CClientDC dc(this);

CPen pen(PS_SOLID,1,RGB(255,0,0));

dc.SelectObject(&pen);

CBrush

*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

dc.SelectObject(pBrush);

switch(m_nDrawType)

{

case 1:

dc.SetPixel(point,RGB(255,0,0));

break;

case 2:

dc.MoveTo(m_ptOrigin);

dc.LineTo(point);

break;

case 3:

dc.Rectangle(CRect(m_ptOrigin,point));

break;

case 4:

dc.Ellipse(CRect(m_ptOrigin,point));

break;

}

二、设置对话框

1、设置线宽

插入一个对话框:IDI_DLG_SETTING

setting。在对话框上添加一个静态文本框:线宽,一个编辑框:IDC_LINE_WIDTH。双击对话框创建一个对话框的类:CSettingDlg。点右键给编辑框控件关联成员变量:m_nLineWidth

UINT。增加设置菜单项:IDM_SETTING 设置,给菜单项添加命令响应OnSetting,选择view类。

响应函数中的代码如下:

CSettingDlg dlg;

dlg.DoModal();

在view类中增加保存对话框中设置的线宽的成员变量:UINT m_nLineWidth

private。在构造函数中初始化为0。

设置菜单项响应函数OnSetting的代码修改如下:

CSettingDlg dlg;

dlg.m_nLineWidth=m_nLineWidth;

if(IDOK==dlg.Domal())

{

m_nLineWidth=dlg.m_nLineWidth;

}

将WM_LBUTTONUP响应函数中的画笔修改为:CPen

pen(PS_SOLID,m_nLineWidth,RGB(255,0,0);

2、设置线型

在对话框中放置一个组框和三个单选按钮,三个单选按钮名称分别为:实线、虚线和点线。第一个勾选Group。给单选按钮关联成员变量:m_nLineStyle

int。在view类中增加成员变量int m_nLineStyle

private。初始化为0。在OnSetting响应函数中当用户点击Ok的时候保存起来:

CSettingDlg dlg;

dlg.m_nLineWidth=m_nLineWidth;

dlg.m_nLineStyle=m_nLineStyle;

if(IDOK==dlg.Domal())

{

m_nLineWidth=dlg.m_nLineWidth;

m_nLineStyle=dlg.m_nLineStyle;

}

将WM_LBUTTONUP响应函数中的画笔修改为:CPen

pen(m_nLineStyle,m_nLineWidth,RGB(255,0,0);不需要再用switch

case语句,因为三种画笔的定义和我们的定义的值是一致的。

三、颜色对话框

增加菜单项:IDM_COLOR 颜色。添加命令响应:OnColor。在view类中增加成员变量:COLORREF m_clr

private,用来保存用户的颜色选择,在构造方法中初始化m_clr=RGB(255,0,0)。

void CGraphicView::OnColor()

{

CColorDialog dlg;

dlg.m_cc.Flags | =CC_RGBINIT;

dlg.m_cc.rgbResult=m_clr;//记住用户的颜色选择

if(IDOK==dlg.DoModal())

{

m_clr=dlg.m_cc.rgbResult;

}

}

四、字体对话框

添加菜单项:IDM_FONT 字体。增加响应函数OnFont。增加成员变量CFont m_font

private。增加保存字体名字的成员变量CString m_strFontName private,并初始化。

void CGraphicView::OnFont()

{

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();

}

}

在OnDraw响应函数中加入如下代码:

CFont *oldFont=pDC->SelectObject(&m_font);

pDC->TextOut(0,0,m_strFontName);

pDC->SelectObject(oldFont);

五、示例功能

在设置对话框中增加一个组框:IDC_SAMPLE

示例。添加编辑框消息响应函数EN_CHANGE,三个单选按钮分别添加消息响应函数BN_CLICKED。在四个函数中调用:Invalidate();

在CSettingDlg类中点右键,选择WM_PAINT。

void CSettingDlg::OnPaint()

{

CPaintDC dc(this);

UpdateData();

CPen pen(m_nLineStyle,m_nLineWidth,RGB(255,0,0));

dc.SelectObject(&pen);

CRect rect;

GetDlgItem(IDC_SAMPLE)->GetWindowRect(&rect);//GetWindowRect获得的是屏幕的坐标

ScreenToClient(&rect);//将屏幕坐标转换为对话框坐标。

dc.MoveTo(rect.left+20,rect.top+rect.Height()/2);

dc.LineTo(rect.right-20,rect.top+rect.Height()/2);

}

设置示例颜色,在CSettingDlg类中增加成员变量:COLORREF m_clr

public,并初始化m_ctr=RGB(255,0,0)。在View类的OnSetting函数中将View类保存的颜色值传递给对话框的成员变量:dlg.m_clr=m_clr;将OnPaint函数中的画笔修改:CPen

pen(m_nLineStyle,m_nLineWidth,m_clr);

六、改变对话框背景色,对话框中控件的背景色

1、改变对话框背景

参考:WM_CTLCOLOR (OnCtlColor)

在CSettingDlg类中添加响应函数OnCtlColor。添加成员变量:CBrush m_brush

private,并初始化:m_brush.CreateSolidBrush(RGB(0,0,255))。在OnCtrColor函数中加入代码:return

m_brush;

改变组框背景色,设置组框ID:IDC_LINE_STYLE。OnCtlColor会被调用多次。

HBRUSH CSettingDlg::OnCtlColor(CDC *pDC,CWnd *pWnd,UINT

nCtlColor)

{

HBRUSH hbr=CDialog::OnCtlColor(pDC,pWnd,nCtlColor);

if(pWnd->GetDlgCtlId()==IDC_LINE_STYLE)

{

pDC->SetTextColor(RGB(255,0,0));

pDC->SetBkMode(TRANSPARENT);

return m_brush;

}

if(pWnd->GetDlgCtlId()==IDC_LINE_WIDTH)

{

pDC->SetTextColor(RGB(255,0,0));

pDC->SetBkColor(RGB(0,0,255));

return m_brush;

}

return hbr;

}

2、对话框中的文本按照我们设定的字体显示

在设置对话框中增加一个文本框:IDC_TEXT 程序员。在CSettingDlg类中增加成员变量:CFont m_font

private,初始化:m_font.CreatePointFont(200,"华文行楷");在OnCtlColor函数中添加以下代码:

if(pWnd->GetDlgCtlId()==IDC_TEXT)

{

pDC->SelectObject(&m_font);

}

3、改变OK按钮的文本色

参考:CBtton;;DrawItem

添加新类:CTestBtn ,基类选择CButton。CTestBtn->Add virtual

function->DrawItem

void CTestBtn::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

{

UINT uStyle=DFCS_BUTTONPUSH;

ASSERT(lpDrawItemStruct->CtlType==ODT_BUTTON);

if(lpDrawItemStruct->itemState&ODS_SELECTED)

uStyle | =DFCS_PUSHED;

::DrawFrameControl(lpDrawItemStruct->hDC,&lpDrawItemStruct->rcItem,DFC_BUTTON,uStyel);

CString strText;

GetWindowText(strText);

COLORREF

crOldColor=::SetTextColor(lpDrawItemStruct->hDC,RGB(255,0,0));

::DrawText(lpDrawItemStruct->hDC,strText,strText.GetLength(),&lpDrawItemStruct->rcItem,DT_SINGLELINE

| DT_VCENTER | DT_CENTER);

::SetTextColor(lpDrawItemStruct->hDC,crOldColor);

}

为设置对话框的ok按钮关联成员变量m_btnTest CTestBtn。设置对话框的OK按钮的属性styles中的Owner

Draw勾选。

七、如何在窗口中显示位图

1、创建位图

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

2、创建兼容DC

CDC dcCompatible;

dcCompatible.CreateCompatibleDC(pDC);

3、将位图选到兼容DC中

dcCompatible.SelectObject(&bitmap);

4、将兼容DC中的位图贴到当前DC中。

pDC->BitBlt(rect.left,rect.top,rect.Width(),

rect.Height(),&dcCompatible,0,0,SRCCOPY);

位图背景可以在窗口擦除OnEraseBkgnd和OnDraw响应函数中实现。

擦除窗口,增加WM_ERASE响应函数。

BOOL CGraphicView::OnEraseBkgnd(CDC* pDC)

{

// TODO: Add your message handler code here

and/or call default

CBitmap bitmap;

bitmap.LoadBitmap(IDB_BITMAP1);

BITMAP bmp;

bitmap.GetBitmap(&bmp);

CDC dcCompatible;

dcCompatible.CreateCompatibleDC(pDC);

dcCompatible.SelectObject(&bitmap);

CRect rect;

GetClientRect(&rect);

//

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);

pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,

0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

return TRUE;

// return CView::OnEraseBkgnd(pDC);

}

获取对话框当前cfont_MFC设置对话框、字体对话框、颜色对话框(转)相关推荐

  1. 获取对话框当前cfont_获取对话框当前cfont_MFC设置对话框、字体对话框、颜色对话框(转)...

    一.绘图 新建一个工程Graphic.添加一个菜单"绘图",在这个菜单中添加四个菜单项,分别为点(IDM_DOT).直线(IDM_LINE).矩形(IDM_RECTANGLE)和椭 ...

  2. java jtextarea字体_Jtextarea如何设置不同字体、颜色

    展开全部 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ArtFont extends ...

  3. python怎么把字体变大_idle怎样设置代码字体大小 颜色 又快又好

    今天小编我看到idle字体有点细微,就随手修改放大字体好让自己看得舒服.下面小编我就分享这篇关于 idle设置代码字体大小和字体颜色的给大伙. 工具/材料 电脑 python3.x idle 操作方法 ...

  4. CSDN-markdown 文字样式设置(字体, 大小, 颜色, 高亮底色)与数学表达式设置

    文字样式1(内嵌HTML) Size:规定文本的尺寸大小,取值从 1 到 7 ,浏览器默认值是 3. <font face="黑体">我是黑体字</font> ...

  5. UILabel设置多种字体、颜色

    前言 开发中常用到的设置UILabel的文本样式代码片段: NSMutableAttributedString *str = [[NSMutableAttributedString alloc] in ...

  6. android 设置html字体背景颜色

    如何设置html文件中字体的背景色 Author : Aoyousatuo Zhao http://blog.sina.com.cn/aoyousatuo html可以说是一种常用的标记文件,它被广泛 ...

  7. html去除背景颜色怎么设置,界面字体背景颜色怎样去掉

    如果 在 出现 这种情况 我给你提供三个方法(我也出现此种情况成功解决) 1.右键"我的电脑"--属性--高级--"性能"栏点击"设置"-- ...

  8. qt中颜色对话框弹出时应用程序输出栏出现QWindowsWindow::setGeometry: Unable to set geometry 180x30+345+311 (frame: 202x8

    引言 在项目中点击按钮,弹出颜色选择对话框,但同时应用程序会在应用程序输出一栏中显示 QWindowsWindow::setGeometry: Unable to set geometry 180x3 ...

  9. qt中颜色对话框弹出时应用程序输出栏出现setGeometry: Unable to set geometry 152x30+682+300 on QWidgetWindow/‘QColorDialo

    前言 在项目中点击按钮,弹出颜色选择对话框,但同时应用程序会在应用程序输出一栏中显示. setGeometry: Unable to set geometry 152x30+682+300 on QW ...

最新文章

  1. CSS3绘制圆角矩形的简单示例
  2. htc one m7刷Linux,HTC one m7官方刷机详细操作教程
  3. Android FFmpeg移植总攻略——获取视频帧数(亲测可用)
  4. wangEditor编辑器在laravel中上传图片(二)
  5. jsp response对象
  6. 导出全部记录到excel
  7. 面向中文短文本的实体链指任务竞赛亚军DeepBlueAI团队技术分享
  8. WCF中安全的那些事!!!
  9. 修改输入框placeholder的默认样式
  10. vSwitch报文转发分析
  11. 菜鸟学Linux 第093篇笔记 keepalived
  12. 应用程序委托协议栈发送消息
  13. *最近培训的一个题目:蚂蚁爬竿
  14. 怎么计算算法复杂度 big O
  15. html怎么命令打开文件夹下,dos下打开文件夹命令 怎么用dos命令进入指定的文件夹...
  16. 郑州园博园“私房照”曝光,8月试运营对市民免费开放!这可是咱郑州人家门口的“苏州园林”!...
  17. android 策略模式和代理模式,秒懂设计模式之策略模式(Strategy Pattern)
  18. 3559a sample_vio 修改中遇到的奇怪问题
  19. 文件中的EOF是什么
  20. 双硬盘装双系统 (ubuntu)

热门文章

  1. Memory Barriers: a Hardware View for Software Hackers
  2. android 清华镜像,清华镜像网站下载android源码并编译
  3. 快速梳理23种常用的设计模式
  4. 提升领导力的8点建议
  5. 68个经典励志小故事,让你终身受益[转]
  6. 对话系统 | (3) 阿里云小蜜对话机器人背后的核心算法
  7. Excel2007 不能清除剪贴板
  8. 【bzoj4292】 [PA2015]Równanie 乱搞
  9. springboot本地启动报错discard long time none received connection
  10. L2-离散变量分布:Bernoulli分布、二项分布、泊松分布等