获取对话框当前cfont_MFC设置对话框、字体对话框、颜色对话框(转)
一、绘图
新建一个工程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设置对话框、字体对话框、颜色对话框(转)相关推荐
- 获取对话框当前cfont_获取对话框当前cfont_MFC设置对话框、字体对话框、颜色对话框(转)...
一.绘图 新建一个工程Graphic.添加一个菜单"绘图",在这个菜单中添加四个菜单项,分别为点(IDM_DOT).直线(IDM_LINE).矩形(IDM_RECTANGLE)和椭 ...
- java jtextarea字体_Jtextarea如何设置不同字体、颜色
展开全部 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ArtFont extends ...
- python怎么把字体变大_idle怎样设置代码字体大小 颜色 又快又好
今天小编我看到idle字体有点细微,就随手修改放大字体好让自己看得舒服.下面小编我就分享这篇关于 idle设置代码字体大小和字体颜色的给大伙. 工具/材料 电脑 python3.x idle 操作方法 ...
- CSDN-markdown 文字样式设置(字体, 大小, 颜色, 高亮底色)与数学表达式设置
文字样式1(内嵌HTML) Size:规定文本的尺寸大小,取值从 1 到 7 ,浏览器默认值是 3. <font face="黑体">我是黑体字</font> ...
- UILabel设置多种字体、颜色
前言 开发中常用到的设置UILabel的文本样式代码片段: NSMutableAttributedString *str = [[NSMutableAttributedString alloc] in ...
- android 设置html字体背景颜色
如何设置html文件中字体的背景色 Author : Aoyousatuo Zhao http://blog.sina.com.cn/aoyousatuo html可以说是一种常用的标记文件,它被广泛 ...
- html去除背景颜色怎么设置,界面字体背景颜色怎样去掉
如果 在 出现 这种情况 我给你提供三个方法(我也出现此种情况成功解决) 1.右键"我的电脑"--属性--高级--"性能"栏点击"设置"-- ...
- qt中颜色对话框弹出时应用程序输出栏出现QWindowsWindow::setGeometry: Unable to set geometry 180x30+345+311 (frame: 202x8
引言 在项目中点击按钮,弹出颜色选择对话框,但同时应用程序会在应用程序输出一栏中显示 QWindowsWindow::setGeometry: Unable to set geometry 180x3 ...
- qt中颜色对话框弹出时应用程序输出栏出现setGeometry: Unable to set geometry 152x30+682+300 on QWidgetWindow/‘QColorDialo
前言 在项目中点击按钮,弹出颜色选择对话框,但同时应用程序会在应用程序输出一栏中显示. setGeometry: Unable to set geometry 152x30+682+300 on QW ...
最新文章
- CSS3绘制圆角矩形的简单示例
- htc one m7刷Linux,HTC one m7官方刷机详细操作教程
- Android FFmpeg移植总攻略——获取视频帧数(亲测可用)
- wangEditor编辑器在laravel中上传图片(二)
- jsp response对象
- 导出全部记录到excel
- 面向中文短文本的实体链指任务竞赛亚军DeepBlueAI团队技术分享
- WCF中安全的那些事!!!
- 修改输入框placeholder的默认样式
- vSwitch报文转发分析
- 菜鸟学Linux 第093篇笔记 keepalived
- 应用程序委托协议栈发送消息
- *最近培训的一个题目:蚂蚁爬竿
- 怎么计算算法复杂度 big O
- html怎么命令打开文件夹下,dos下打开文件夹命令 怎么用dos命令进入指定的文件夹...
- 郑州园博园“私房照”曝光,8月试运营对市民免费开放!这可是咱郑州人家门口的“苏州园林”!...
- android 策略模式和代理模式,秒懂设计模式之策略模式(Strategy Pattern)
- 3559a sample_vio 修改中遇到的奇怪问题
- 文件中的EOF是什么
- 双硬盘装双系统 (ubuntu)
热门文章
- Memory Barriers: a Hardware View for Software Hackers
- android 清华镜像,清华镜像网站下载android源码并编译
- 快速梳理23种常用的设计模式
- 提升领导力的8点建议
- 68个经典励志小故事,让你终身受益[转]
- 对话系统 | (3) 阿里云小蜜对话机器人背后的核心算法
- Excel2007 不能清除剪贴板
- 【bzoj4292】 [PA2015]Równanie 乱搞
- springboot本地启动报错discard long time none received connection
- L2-离散变量分布:Bernoulli分布、二项分布、泊松分布等