字体、链接、浏览等空间的编程
1) 字体列表
在资源中加入Combox控件,并将属性设置为dropList,将OwnerDraw属性设置为Fixed,将has strings属性设置为TRUE。利用ClassWizard为该控件设置CMFCFontComboBox变量,利用该类的成员函数进行属性设置和变量。
m_FontCombox.SelectFont(_T("Arial"));
利用Combox控件的改变消息获取当前选择的字体
CMFCFontInfo*pFontInfo = m_FontCombox.GetSelFont();
if(pFontInfo != NULL)
{
m_CurFontName= pFontInfo->m_strName;
m_CurFontCharSet= pFontInfo->m_nCharSet;
}
改变属性并设置
UpdateData();
int nFontType = 0;
if(m_Device)
{
nFontType|= DEVICE_FONTTYPE;
}
if(m_Raster)
{
nFontType|= RASTER_FONTTYPE;
}
if(m_TrueType)
{
nFontType|= TRUETYPE_FONTTYPE;
}
m_FontCombox.Setup(nFontType);
m_FontCombox.SelectFont(m_CurFontName,m_CurFontCharSet);
利用字体直接在列表框中进行绘制,只需要改变CMFCFontComboBox的m_bDrawUsingFont属性即可。
UpdateData( );
m_FontCombox.m_bDrawUsingFont= m_DrawUsing;
m_FontCombox.RedrawWindow();
2) 位图编辑
VS2010提供了位图编辑功能,能够弹出对话框进行位图的编辑,首先在对话框中添加位图编辑区域为Picture型控件,获得区域并绘制位图。
m_ImageArea.GetClientRect(&m_ImageRect);
m_ImageArea.MapWindowPoints(this,&m_ImageRect);
m_BmpTest.LoadBitmap(IDB_TEST_BMP);
BITMAP bm;
m_BmpTest.GetBitmap(&bm);
m_ImageRect.right = m_ImageRect.left +bm.bmWidth;
m_ImageRect.bottom = m_ImageRect.top +bm.bmHeight;
添加按钮并定义为CMFCButton型,并为该按钮添加图标
m_EditBut.SetImage(IDB_IMAGE);
m_EditBut.SetTextHotColor(RGB(0,0,255));
在按钮按下消息中调用位图编辑对话框,并获取已经编辑的位图并显示。
HBITMAPm_hBmp = (HBITMAP)::CopyImage(m_BmpTest.GetSafeHandle(),IMAGE_BITMAP,0,0,0);
if(m_hBmp)
{
CMFCImageEditorDialog m_EditImageDlg(CBitmap::FromHandle(m_hBmp),this);
If(m_EditImageDlg.DoModal()== IDOK)
{
m_BmpTest.DeleteObject();
m_BmpTest.Attach(m_hBmp);
InvalidateRect(m_ImageRect);
}
}
在对话框的onPaint()中增加绘图刷新代码,在退出位图编辑对话框时刷新
CRectrectFrame = m_ImageRect;
rectFrame.InflateRect(1,1);
dc.Draw3dRect(rectFrame,GetSysColor(COLOR_3DLIGHT), GetSysColor(COLOR_3DSHADOW));
rectFrame.InflateRect(1,1);
dc.Draw3dRect(rectFrame,GetSysColor(COLOR_3DHILIGHT), GetSysColor(COLOR_3DDKSHADOW));
dc.DrawState(m_ImageRect.TopLeft(),m_ImageRect.Size(),&m_BmpTest,0);
3) 链接按钮
在资源中增加按钮控件,并定义为CMFCLinkCtrl型,并完成初始化代码
m_LinkBut.SetURL(_T("http:\\www.hao123.com"));
m_LinkBut.SetTooltip(_T("我¨°的Ì?主¡Â页°3"));
4) CVSListCtrl控件
在资源中增加CStatic控件,建立变量,并定义为CVSListBox类型,并进行初始化
m_ListBox.SetStandardButtons();
m_ListBox.EnableBrowseButton();
m_ListBox.AddItem(_T("Test Item1"));
m_ListBox.AddItem(_T("Test Item2"));
5) EditBrowse控件
在资源中增加EDIT控件,建立变量,并定义为以CMFCEditBrowseCtrl为基类的CMyBrowseEdit类型,并进行初始化
m_FolderList.EnableFolderBrowseButton();
m_FileListCtrl.EnableFileBrowseButton();
为了控制Edit中的显示内容,需要对OnBrowse函数进行重载,如本例中,文件浏览只显示文件名,而不显示文件目录名,文件夹浏览只显示目录名,而不显示前面的文件目录系统。
virtual voidOnBrowse()
{
CStringm_str;
int len,i;
CMFCEditBrowseCtrl::OnBrowse();
GetWindowText(m_str);
len= m_str.GetLength();
for(i=len-1;i>=0;i--)
{
if(m_str[i] =='\\')
break;
}
m_str= m_str.Right(len-i-1);
SetWindowText(m_str);
}
最终软件运行界面: