VC字体对话框的初始化
本代码需要先添加类成员 LOGFONT lf;
void CMyDlg::OnButton3() { // TODO: Add your control notification handler code here //方法一:直接给这个结构体中的结构体赋值,通过CFontDialog的构造函数实现字体对话框的初始化。
//HDC hDC=GetDC()->m_hDC; //strcpy(lf.lfFaceName,"新宋体"); //lf.lfCharSet=DEFAULT_CHARSET; //lf.lfWeight=FW_NORMAL; //lf.lfHeight=-MulDiv(12, GetDeviceCaps(hDC, LOGPIXELSY), 72); //lf.lfWidth=8; //lf.lfItalic=FALSE; //lf.lfUnderline=FALSE; //CFontDialog cd(&lf,CF_INITTOLOGFONTSTRUCT);//参数二:取消字体对话框中的颜色。
//方法二:不通过构造函数,而是具体给成员m_cf结构体各个成员赋值实现字体对话框的初始化。 CFontDialog cd; cd.m_cf.lStructSize=sizeof(CHOOSEFONT); //字体对话框对象中有个m_cf成员,它是一个结构体。 cd.m_cf.Flags|=CF_INITTOLOGFONTSTRUCT; cd.m_cf.lpLogFont=&lf;//lpLogFont又是这个m_cf成员中的成员,也是一个结构体。 cd.m_cf.hwndOwner=this->m_hWnd; cd.m_cf.rgbColors=mycolor; if (IDOK == cd.DoModal()) { if (myfont.m_hObject) { myfont.DeleteObject(); } myfont.CreateFontIndirect(cd.m_cf.lpLogFont);//myfont是CFont成员变量,需另声明。类型为CFont myfontname = cd.m_cf.lpLogFont->lfFaceName;//用于导出字体对话框中用户选择的字体名称,myfontname也是成员变量,需另声明。类型为CString mycolor = cd.m_cf.rgbColors;//用于导出字体对话框用户选择的颜色,mycolor也是成员变量,需另声明。类型为COLORREF Invalidate();本语句使窗体重绘,具体绘制代码如下: } }
void CMyDlg::OnPaint() {
//////////////////////////////////////////////////////////////////////////////////////////////////
CPaintDC dc(this); CFont* oldfont = dc.SelectObject(&myfont);//重绘时把字体选入设备 dc.SetBkMode(TRANSPARENT);//设置背景模式为透明 dc.SetTextColor(mycolor);//设置输出的字符串颜色 dc.TextOut(10,10,myfontname);//指定位置输出文本,这里是表示字体对话框中用户选择的字体名称 dc.SelectObject(oldfont);//还原设备字体
////////////////////////////////////////////////////////////////////////////////////////////////////
if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); // CDC*p=this->GetDC(); } else { CDialog::OnPaint(); } }