我在一个对话框程序中用了控件 picture ,当触发某消息时显示一张位图,否则不显示任何位图
if(!chackflag)
{
hBitmap = (HBITMAP)LoadImage( NULL, //不是资源文件
mPicture, //图片路径
IMAGE_BITMAP, 0, //源位图宽
0, //
LR_LOADFROMFILE|LR_DEFAULTSIZE); pStatic->ModifyStyle(0xF, SS_BITMAP|SS_CENTERIMAGE);
pStatic->SetBitmap(hBitmap);
}
else
{
//pStatic->ModifyStyle(0xF, SS_BITMAP|SS_CENTERIMAGE);
pStatic->SetBitmap(NULL);
} UpdateData(FALSE);程序运行正常,后来为了实现静态文本背景透明我增加了WM_CTLCOLOR消息,并在相应处理函数中添加代码:
HBRUSH CGOPOSDlg::OnCtlColor(CDC* pDC,.....)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT); //设置背景透明
pDC->SetTextColor(RGB(255,255,255)); //字体颜色
return HBRUSH(GetStockObject(HOLLOW_BRUSH));
}
return hbr;
}结果原来控制位图显示的 pStatic->SetBitmap(NULL); 失去了作用,上一次显示的位图不能被取消(不能改变已经输出了的位图)
如果屏蔽了return HBRUSH(GetStockObject(HOLLOW_BRUSH)); 就可以恢复正常难道是GetStockObject(HOLLOW_BRUSH)和 SetBitmap()有冲突吗?我该怎么做呢?谢谢回答^_^
if(!chackflag)
{
hBitmap = (HBITMAP)LoadImage( NULL, //不是资源文件
mPicture, //图片路径
IMAGE_BITMAP, 0, //源位图宽
0, //
LR_LOADFROMFILE|LR_DEFAULTSIZE); pStatic->ModifyStyle(0xF, SS_BITMAP|SS_CENTERIMAGE);
pStatic->SetBitmap(hBitmap);
}
else
{
//pStatic->ModifyStyle(0xF, SS_BITMAP|SS_CENTERIMAGE);
pStatic->SetBitmap(NULL);
} UpdateData(FALSE);程序运行正常,后来为了实现静态文本背景透明我增加了WM_CTLCOLOR消息,并在相应处理函数中添加代码:
HBRUSH CGOPOSDlg::OnCtlColor(CDC* pDC,.....)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT); //设置背景透明
pDC->SetTextColor(RGB(255,255,255)); //字体颜色
return HBRUSH(GetStockObject(HOLLOW_BRUSH));
}
return hbr;
}结果原来控制位图显示的 pStatic->SetBitmap(NULL); 失去了作用,上一次显示的位图不能被取消(不能改变已经输出了的位图)
如果屏蔽了return HBRUSH(GetStockObject(HOLLOW_BRUSH)); 就可以恢复正常难道是GetStockObject(HOLLOW_BRUSH)和 SetBitmap()有冲突吗?我该怎么做呢?谢谢回答^_^
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货