求代码VC6.0 MFC 实现按钮d出的颜色对话框和字体对话框,选择确定后改变编辑框中的输入文字颜色 和字体

求代码VC6.0 MFC 实现按钮d出的颜色对话框和字体对话框,选择确定后改变编辑框中的输入文字颜色 和字体,第1张

//全局变量或是类成员变量

CFont font;

COLORREF color=RGB(255,0,0); //初始颜色

//在OnInitDialog( )中

SetDlgItemText(IDC_EDIT1,"微软"); //设置edit控件文字

//在第一个按钮(颜色选择按钮)单击响应函数

CColorDialog cc(RGB(255,0,0),0,this);

if(IDOK==ccDoModal())

{

color=ccGetColor();

CDC dc=GetDC();

Invalidate();

dc->FillSolidRect(0,0,50,50,color);

}

//在第二个按钮(字体选择按钮)单击响应函数中

        LOGFONT lf;

CFontDialog ff;

memset(&lf,0,sizeof(LOGFONT));

if(IDOK==ffDoModal())

{

fontCreateFontIndirect(ffm_cflpLogFont);

GetDlgItem(IDC_EDIT1)->SetFont(&font);

}

//增加WM_CTLCOLOR消息响应

if(pWnd->GetDlgCtrlID()==IDC_EDIT1)

{

pDC->SetTextColor(color);

}

错误提示是说函数不能接受两个参数。这是因为命名控件造成的。MFC中很多函数名跟SDK里的都是重复的。如果你在MFC中要用API那么建议养成良好习惯在函数前面加:: 也就是改为"::GetDlgItemText(xxx,xxx)"对于第一个句柄参数你可以用this指针。::GetDlgItemText(this->m_hWnd,xxx,xxx,xxx)第二个参数是控件ID,第三个是接受的字符的缓存指针,第四个是最大接受几个字符的个数;如果你省略了"::"那么默认是使用的 MFC的CWnd类的方法。可以这样调用:CString str;this->GetDlgItemText(IDC_TEXT,str); 补充: 完蛋了,现在才发现原来已经回答了好几个你的相关问题,不知道会不会被举报刷分。 追问: 不好意思,还是不行。说明下:我把上面的GetDlgItemText和SetDlgItemText函数写在线程里了。为什么不行呢?还是有错误提示!谢谢! 回答: 错误提示是什么你也不贴上来 不过我已经大致猜出来了 既然你是写在线程函数里 那么错误提示 应该是说this不是静态变量什么的。当然啊,线程函数是不能使用类的成员的。解决方法有两个第一:定义一个全局变量保存窗口句柄,在线程函数里用全局变量。第二:把类的指针当做参数传递给线程函数。你创建线程的时候 CreateThread(NULL,0,NULL,this,0,NULL);线程处理函数:DWORD WINAPI ThreadPro(LPVOID lpvoid){ xxxxxx p = (xxxxxx )lpvoid;//关键就是这句代码了,把传进来的参数转换成类指针。"XXXXXX"是你的类名。

首先m_font要作为类成员变量。

在m_fontCreateFontIndirectW(&lf)这句之后调用Invalidate();

上面一段代码应该是在OnDraw函数中,那么在TextOut前后加上字体选择即可:

CFont oldfont = pDC->SelectObject(&m_font);

pDC->TextOutW(rectWidth()/2,rectHeight()/2,L"菜单实例");

pDC->SelectObject(oldfont);

大概就是这样,因为你没有描述更多信息,可能具体步骤需要调整。

设置字体类型可以使用CFontDialog,代码如下,LOGFONT m_Font,COLORREF m_ColorFont为对话框成员变量

CFontDialog fontDlg(&m_Font);

fontDlgm_cfrgbColors = m_ColorFont;

if ( IDOK == fontDlgDoModal() )

{// 字体选择对话框

fontDlgGetCurrentFont( &m_Font );

m_ColorFont = fontDlgGetColor();

}

获取信息后可以派生CEdit自绘完成edit的字体和颜色

如果是在头文件定义的,直接包含该头文件即可。

如果是在cpp文件定义的,需要使用extern关键字声明引用,但这种方式在MFC程序中不推荐使用。

MFC下,推荐使用的全局变量,是在APP类定义成员变量,这样在任意框架内位置,只需通过AfxGetApp函数都可以获取全局APP并访问变量。

这是我利用字体对话框设置编辑控件字体的代码,你可以参考一下:

LOGFONT LogFont;

CFont font=this->GetFont();

if(font==NULL)

{

font=new CFont;

font->CreatePointFont(120, "隶书");

font->GetLogFont(&LogFont);

delete font;

}

else

{

font->GetLogFont(&LogFont);

}

CFontDialog FontDlg(&LogFont);//字体对话框

if(FontDlgDoModal()==IDOK)

{

m_fontDeleteObject();

m_fontCreateFontIndirect(&LogFont);

SetFont(&m_font);//这样设置不能改变编辑框文字颜色,仅能改变字体其他属性

//改变文字颜色必须响应WM_CTLCOLOR消息

//在消息函数处理

//CHARFORMAT cf;

//cfdwMask=CFM_CHARSET|CFM_COLOR;

//cfcrTextColor=FontDlgGetColor();

crTextColor=FontDlgGetColor();//crTextColor在WM_CTLCOLOR消息函数中用于设

//置文字颜色

InvalidateRect(NULL);

//cfdwEffects=~CFE_AUTOCOLOR;

//SetDefaultCharFormat(cf);

}

下面例子是装(调)入MS Song 中文字体。

关键语句:

fontCreateFontIndirect(&lf); // 建字体

oldfont = pDC->SelectObject(&font); //用字体

LOGFONT

lf;

lflfHeight = 240;

lflfWidth = 120;

lflfEscapement = m_ang;

lflfOrientation = m_ang;

lflfWeight = 520;

lflfItalic = 0;

lflfUnderline = 0;

lflfStrikeOut = 0;

lflfCharSet = GB2312_CHARSET;

lflfOutPrecision = 0;

lflfClipPrecision = CLIP_STROKE_PRECIS;

lflfQuality = 0;

lflfPitchAndFamily = 0;

strcpy(lflfFaceName, "MS Song");

fontCreateFontIndirect(&lf);

oldfont = pDC->SelectObject(&font);

TextOut后,就是 MS Song 中文 字符。

static CFont font; //定义静态变量,也可以定义全局变量或者对话框的成员变量,临时变量或者局部变量是不行的

fontCreatePointFont(120, "隶书");

GetDlgItem(IDC_STATIC1)->SetFont(&font);

可将静态文本控件IDC_STATIC1的字体设置为隶书

以上就是关于求代码VC6.0 MFC 实现按钮d出的颜色对话框和字体对话框,选择确定后改变编辑框中的输入文字颜色 和字体全部的内容,包括:求代码VC6.0 MFC 实现按钮d出的颜色对话框和字体对话框,选择确定后改变编辑框中的输入文字颜色 和字体、MFC获取控件文本和显示控件文本谢谢~~、我想在mfc视图中输出一段文字,然后调用系统的字体来更改这段文字的字体等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9729721.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存