添加设置对话框
1.插入对话框资源
2.创建一个对话框类
3.给编辑框关联一个UNIT型变量作为用户设定值
4.添加一个用来显示对话框的菜单项
5.给菜单项添加命令响应
6.在view中添加对话框头文件
7.构造一个对话框类对象然后调用对象的成员函数DoModal()显示对话框
8.通过DoModal的返回值判断用户选择
9.注意对话框对象的生命周期导致的设置无法保存问题
Radio控件
通过在第一个radio控件的属性设为group讲之后的若干控件设为一组
第一个控件关联的变量就会代表着一组radio中的选择
创建颜色对话框
CColorDialog dlg;
dlg.DoModal();
dlg.m_cc.rgbResult保存了用户选择的颜色
创建字体对话框
CFontDialog dlg;
if (dlg.DoModal() == IDOK)
{
// Create the font using the selected font from CFontDialog.
LOGFONT lf;
memcpy(&lf, dlg.m_cf.lpLogFont, sizeof(LOGFONT));
CFont font;
VERIFY(font.CreateFontIndirect(&lf));
// Do something with the font just created...
CClientDC dc(this);
CFont* def_font = dc.SelectObject(&font);
dc.TextOut(5, 5, _T("Hello"), 5);
dc.SelectObject(def_font);
// Done with the font. Delete the font object.
font.DeleteObject();
}
dlg.m_cf.lpLogFont.lfFaceName存储了字体的名字
画图实例功能
捕获用户改变设置的时候的消息
给每个控件添加EN_CHANGE响应函数
给每个函数中调用Invalidate();
在对话框类中增加WM_PAINT响应函数 在其中画图
注意屏幕坐标与程序坐标的转换
ScreenToClient(rect);
*当一个控件和一个变量关联的时候,如果想让数据交换,需要调用
UpdateData();
改变对话框控件背景颜色及文字颜色
在对话框类中增加WM_CTLCOLOR响应函数
在对话框类中创建一个画刷 在WM_CTLCOLOR响应函数中返回
//在响应函数中对某个控件的背景色进行控制
if(pWnd->GetDlgCtrlID()==IDC_LINE_STYLE)
{
pDC->SetTextColor(RGB(255,0,0));//设置文字颜色
pDC->SetBkMode(TRANSPARENT);//设置透明背景
return m_brush;
}
改变按钮的颜色需要 重写CButton类中的DrawItem函数
并将按钮与新建的CButton类的对象关联
在窗口中贴图
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);
BitBlt按照1:1拷贝 无法使位图自动随窗口大小伸缩
StretchBlt解决这个问题后者仅比前者多了2个参数
在OnDraw中做贴图闪烁比较大 而在OnEraseBkgnd中闪烁较小