十、绘图控制
1. 简单绘图
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;
}
2. 设置对话框
设置线宽:
//创建的新对话框类
CSettingDlg dlg;
//用当前视类保存的变量来初始化dlg这个对象的成员变量
//视类的生存周期是知道程序结束时候的
dlg.m_nLineWidth = m_nLineWidth;
//点击OK后保存输入的数字
if (IDOK == dlg.DoModal())
{
m_nLineWidth =dlg.m_nLineWidth;
}
3. 颜色对话框
MFC为我们提供了一个类CColorDialog,它其中有一个CHOOSECOLOR结构体类型的成员变量:m_cc,这个结构体里面的rgbResult变量就保存了用户选择的颜色;
为视类添加一个私有成员变量:m_clr;
COLORREF m_clr;
并初始化为 m_clr = RGB(255,0,0);
CColorDialog dlg;
//想要设置颜色对话框初始选择的颜色,则需要设置该对话框的CC_RGBINIT标记
dlg.m_cc.Flags |= CC_RGBINIT;//像这种位标志的,都不能直接赋值,必须得通过位运算
dlg.m_cc.rgbResult = m_clr;
if(IDOK == dlg.DoModal())
{
m_clr = dlg.m_cc.rgbResult;
}
4. 同时按下CTRL键和TAB键,就可以切换到下一个窗口;
5. 字体对话框
MFC提供了一个CFontDialog类,这个类里面有一个CHOOSEFONT结构体的数据成员:m_cf, 其成员lpLogFont是指向逻辑字体(LOGFONT类型)的指针,在在它的成员里面lfFaceName存放的就是字体的名称;
先为视类增加一个CFont成员变量:m_font
再增加一个CString类型的成员:m_strFontName,用于保存所选字体的名称
字体对象的创建:首先利用CFont类构造一个字体对象,然后利用CFont类的CreateFontInDirect成员函数根据指定特征的逻辑字体(LOGFONT类型)来初始化这个字体对象。
CFontDialog dlg;
if (IDOK == dlg.DoModal())
{
//先判断是否已经存在,存在就删除
//m_hObject是CGdiObject对象数据成员
//类的对象跟资源对象完全是两种东西,不要混淆
if(m_font.m_hObject)
m_font.DeleteObject();
m_font.CreateFontIndirect(dlg.m_cf.lpLogFont);
m_strFontName =dlg.m_cf.lpLogFont->lfFaceName;
}
Invalidate();
6,示例对话框