MFC 对话框程序控件局部刷新方法!

初学mfc编程的小伙伴通常会遇到控件透明制作,小白就来讲一下“基于对话框程序控件透明”的方法:

1、打开类向导(ClassWizard),VC6.0快捷键Ctrl + W, VS2010快捷键Ctrl + Shift + X。

2、重载OnCtlColor,添加如下函数:

if (nCtlColor == CTLCOLOR_STATIC)
{
CRect rc;
pWnd->GetWindowRect(&rc);
ScreenToClient(&rc);
CDC* dc = GetDC();
pDC->BitBlt(0, 0, rc.Width(), rc.Height(), dc, rc.left, rc.top, SRCCOPY); //把父窗口背景图片先画到按钮上
ReleaseDC(dc);
pDC->SetTextColor(RGB(255, 255, 255));//设置字体颜色
pDC->SetBkMode(TRANSPARENT);//设置透明控件
hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH);
}

return hbr;

至此,Static控件已经实现透明效果了!


2.在透明的static上改变文字显示时会出现文字重叠现象,需调用函数 Invalidate(true);  即可,但这样是对所有的控件进行刷新,会造成屏幕闪烁现象,最好的办法就是对控件进行局部刷新,这样就可以保证只刷新单一控件,解决不断闪屏的问题:

二、 局部刷新透明控件:

我们需要自己定义一个函数,再 xxxxDlg.h中的 public:下添加自定义函数

void RefreshIndividualControl(UINT uCtlID);

在xxxxDlg.cpp中实现函数:

void xxxxDlg::RefreshIndividualControl(UINT uCtlID);(注意添加xxxxDlg::,否则会报错,具体原因自行百度)。

下面是代码的实现:

{

CRect rect;      
    GetDlgItem(uCtlID)->GetWindowRect(&rect); //获取控件区域  
    ScreenToClient(&rect);
//屏幕区域对客户区域的转换    
    InvalidateRect(rect);
//刷新 

}

最后在你改变文字代码后面添加该函数即可,示例如下:

GetDlgItem(IDC_STATIC1)->SetWindowText("123");

RefreshIndividualControl(IDC_STATIC1);

三、 小白在做项目的过程中还发现一种方法就是在改变控件文字之后可以用 显示,隐藏来解决静态控件文字重叠的现象:

该方法仅供参考,不太实用:

GetDlgItem(IDC_STATIC1)->SetWindowText("123");

GetDlgItem(IDC_STATIC1)->ShowWindow(SW_HIDE);

GetDlgItem(IDC_STATIC1)->ShowWindow(SW_SHOW);

至此,基于MFC对话框程序静态控件透明的实现,以及控件局部刷新的方法介绍完毕!


  • 4
    点赞
  • 0
    评论
  • 11
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

zhongqiangyaming

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值