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(); } }

 

posted @ 2017-03-21 01:08  正月龙  阅读(844)  评论(0编辑  收藏  举报
留言板