是这样的,工程是基于对话框的。我给对话框的背景贴了一张图
上面有一些文本空间static,
开始因为和背景不同,挺难看的,就想着让他们都透明了,但是后来发现,在我需要跟新static空间内容的时候,就会发生重叠现象。晕啊。。高手指点下,这个怎么做我的空间是用来跟新显示时间和日期的,名称分别为:IDC_DLG_STATIC_DAY,IDC_DLG_STATIC_TIME为了是Cstatic透明,加添OnCtlColor函数,如下:HBRUSH CRTUPCV1Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if((pWnd->GetDlgCtrlID()==IDC_STATIC)||(pWnd->GetDlgCtrlID()==IDC_DLG_STATIC_DAY)||(pWnd->GetDlgCtrlID()==IDC_DLG_STATIC_TIME))
{
pDC->SetBkMode( TRANSPARENT ); //设置背景透明,这样,输出字符的时候就 //是所谓的空心字,而不是有白的底色
hbr=(HBRUSH)::GetStockObject(NULL_BRUSH); //用透明
}
// TODO: Return a different brush if the default is not desired
return hbr;
}然后在OnTimer:
void CRTUPCV1Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 0:{ SYSTEMTIME stTime;
GetLocalTime(&stTime);
m_strDlgStaticDay.Format("%4d年%2d月%2d日",stTime.wYear,stTime.wMonth,stTime.wDay);
int n=m_strDlgStaticDay.Replace(" ","0");
m_strDlgStaticTime.Format("%2d:%2d:%2d",stTime.wHour,stTime.wMinute,stTime.wSecond);
n=m_strDlgStaticTime.Replace(" ","0");
m_ctrlDlgStaticDay.SetWindowText(m_strDlgStaticDay);
m_ctrlDlgStaticTime.SetWindowText(m_strDlgStaticTime);
}break;
default:break;
}
CDialog::OnTimer(nIDEvent);
}
上面有一些文本空间static,
开始因为和背景不同,挺难看的,就想着让他们都透明了,但是后来发现,在我需要跟新static空间内容的时候,就会发生重叠现象。晕啊。。高手指点下,这个怎么做我的空间是用来跟新显示时间和日期的,名称分别为:IDC_DLG_STATIC_DAY,IDC_DLG_STATIC_TIME为了是Cstatic透明,加添OnCtlColor函数,如下:HBRUSH CRTUPCV1Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if((pWnd->GetDlgCtrlID()==IDC_STATIC)||(pWnd->GetDlgCtrlID()==IDC_DLG_STATIC_DAY)||(pWnd->GetDlgCtrlID()==IDC_DLG_STATIC_TIME))
{
pDC->SetBkMode( TRANSPARENT ); //设置背景透明,这样,输出字符的时候就 //是所谓的空心字,而不是有白的底色
hbr=(HBRUSH)::GetStockObject(NULL_BRUSH); //用透明
}
// TODO: Return a different brush if the default is not desired
return hbr;
}然后在OnTimer:
void CRTUPCV1Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 0:{ SYSTEMTIME stTime;
GetLocalTime(&stTime);
m_strDlgStaticDay.Format("%4d年%2d月%2d日",stTime.wYear,stTime.wMonth,stTime.wDay);
int n=m_strDlgStaticDay.Replace(" ","0");
m_strDlgStaticTime.Format("%2d:%2d:%2d",stTime.wHour,stTime.wMinute,stTime.wSecond);
n=m_strDlgStaticTime.Replace(" ","0");
m_ctrlDlgStaticDay.SetWindowText(m_strDlgStaticDay);
m_ctrlDlgStaticTime.SetWindowText(m_strDlgStaticTime);
}break;
default:break;
}
CDialog::OnTimer(nIDEvent);
}
解决方案 »
- 如何在VS2005中的MFC应用程序单文档中添加 OnKeyDown 这个消息响应函数
- CSOCKET的UDP框架如何获得客户端的IP和端口
- MFC ACCESS数据库的菜鸟问题,急!急!在线等
- 属性表单的奇怪问题,添加成员变量就错!谢谢!
- 为什么PostMessage发送消息不成功?
- 在线等待....,在网页提交中POST和GET有什么区别?
- 急!请问各位前辈,如何把一个按钮(Button)标题的字体改变?
- 请各位高手指点迷津,VC用ODBC存储WORD文本到ACCESS数据库的字段中?急!
- 谁用过SOFTICE?
- 视图切分
- CButtonST 按钮使用入门问题 咋不显示按钮
- 关于COM组件传递指针的问题、流文件
程序如下:
void CRTUPCV1Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case 0:{
// m_strDlgStaticDay.Empty();
// m_strDlgStaticTime.Empty(); SYSTEMTIME stTime;
GetLocalTime(&stTime);
m_strDlgStaticDay.Format("%4d年%2d月%2d日",stTime.wYear,stTime.wMonth,stTime.wDay);
int n=m_strDlgStaticDay.Replace(" ","0");
m_strDlgStaticTime.Format("%2d:%2d:%2d",stTime.wHour,stTime.wMinute,stTime.wSecond);
n=m_strDlgStaticTime.Replace(" ","0");
m_ctrlDlgStaticDay.SetWindowText(m_strDlgStaticDay);
m_ctrlDlgStaticTime.SetWindowText(m_strDlgStaticTime);
RefreshControl(IDC_DLG_STATIC_DAY);
RefreshControl(IDC_DLG_STATIC_TIME);
}break;
default:break; }
CDialog::OnTimer(nIDEvent);
}
void CRTUPCV1Dlg::RefreshControl(UINT uCtlID)
{
CRect rc;
GetDlgItem(uCtlID)->GetWindowRect(&rc);
ScreenToClient(&rc);
InvalidateRect(rc);
}
这样子的话有时候会闪动