MFC中非模态对话框的控件字体输出

8 篇文章 0 订阅

用到MessageBox时,必须鼠标点击之后,才能继续执行后面的程序。但是有时,只需要给出一个提示,在不需要点击按钮的情况下继续执行后面的操作,用到了非模态对话框去模拟一个MessageBox。 并且,在外部调用非模态对话框,并在文本框中输出文字。

自定义一个非模态对话框,样式与MessageBox差不多就行,ID号为 IDD_QUERYING 。
对话框中文本控件,显示提示语,ID号为 IDC_TEXT_QUERY。

// 1、创建非模态对话框,居中。
CDialog *pQueryDlg=new CDialog;
pQueryDlg->Create(IDD_QUERYING);
pQueryDlg->CenterWindow();
// 2、获取控件dc,这里需要用到对话框指针
CDC *pdc=(pQueryDlg->GetDlgItem(IDC_TEXT_QUERY))->GetDC();

// 这里GetDlgItem()只能用于子窗口,须通过父窗口指针获取控件指针
// 3、创建字体,根据字体情况设置参数
CFont font;
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
lf.lfHeight = -12;  // 高度(该参数已足够)
lf.lfWeight = FW_NORMAL; // 磅数
lf.lfClipPrecision = CLIP_LH_ANGLES; //剪贴精度
strcpy(lf.lfFaceName, "宋体");// 字体名称
font.CreateFontIndirect(&lf);
CFont *pOldFont = pdc->SelectObject(&font);
// 4、字体输出。
CRect rect = CRect(20, 30, 200, 200);
CString strQuery = "ABC....123.....";
pdc->DrawText((LPCTSTR)strQuery, &rect, DT_LEFT);
//pdc->TextOutA(20, 30, strQuery);  //2选1

//可以直接设置相对于控件的坐标输出,或者利用控件Rect操作
// 5、释放资源,中间可执行其他程序。
pdc->SelectObject(pOldFont);
font.DeleteObject();
CWnd::ReleaseDC(pdc);

    //这里可以处理其他程序

if(pQueryDlg)
    pQueryDlg->DestroyWindow();  //若未点击关闭窗口,手动释放

有关上面非模态对话框,及其控件,其他操作。
1、获取窗口控件的句柄

// 获得窗口的控件句柄
HANDLE hdl = ::GetDlgItem(QueryDlg.m_hWnd,IDC_TEXT_QUERY); 

2、获取控件指针,控件rect

CStatic *ptrQuery = (CStatic *)(pQueryDlg-> GetDlgItem(IDC_TEXT_QUERY));

CRect rect;
ptrQuery->GetClientRect(&rect);

以上为学习中遇到的问题,试验正确之后发布,用于加深学习和回顾。有问题,可共同探讨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aworkholic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值