网站一年要多少钱,常用网站推广方法电商,wordpress 博客样式,网站开发交流最终成果#xff1a;背景半透明、但是控件不透明的对话框。 对话框上用图片代表功能#xff0c;当点击图片时#xff0c;响应点击事件#xff0c;弹出相对应的对话框。 对话框固定大小#xff0c;不可放大缩小#xff0c;以免影响图片的显示数量。 步骤一#xff1a;背景…最终成果背景半透明、但是控件不透明的对话框。 对话框上用图片代表功能当点击图片时响应点击事件弹出相对应的对话框。 对话框固定大小不可放大缩小以免影响图片的显示数量。 步骤一背景透明、控件不透明 方法一创建一个对话框CTransparentDlg在OnInitDialog()函数中添加代码 SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)|WS_EX_LAYERED); SetLayeredWindowAttributes(0,150,LWA_ALPHA);
得到的效果是 对话框和控件一起半透明。原因
BOOL SetLayeredWindowAttributes(
HWND hwnd, // 指定分层窗口句柄
COLORREF crKey, // 指定需要透明的背景颜色值可用RGB()宏
BYTE bAlpha, // 设置透明度0表示完全透明255表示不透明
DWORD dwFlags // 透明方式
);
其中dwFlags参数可取以下值
LWA_ALPHA时crKey参数无效bAlpha参数有效
LWA_COLORKEY窗体中的所有颜色为crKey的地方将变为透明bAlpha参数无效。其常量值为1。
LWA_ALPHA | LWA_COLORKEYcrKey的地方将变为全透明而其它地方根据bAlpha参数确定透明度。
#define LWA_COLORKEY 0x00000001
#define LWA_ALPHA 0x00000002
设置LWA_ALPHA参数时对话框只取决于设置的透明度是整体窗体包括窗体上的控件相同的透明度 方法二在OnInitDialog()函数中添加代码 COLORREF maskColor RGB(255,255,255); //掩码颜色 SetWindowLong(this-GetSafeHwnd(), GWL_EXSTYLE, GetWindowLong(this-GetSafeHwnd(),GWL_EXSTYLE)| 0x80000); //设定窗体使用扩展模式 SetLayeredWindowAttributes(maskColor,128,LWA_COLORKEY)
同时添加OnCtlColor响应函数
HBRUSH CTransparentDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{HBRUSH hbr CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);// TODO: Change any attributes of the DC hereif(nCtlColor CTLCOLOR_DLG) //此处设置为窗体透明CTLCOLOR_DLG表示对话框 { CBrush *brush; brush new CBrush(RGB(255,255,255)); return (HBRUSH)(brush-m_hObject); } if(nCtlColor CTLCOLOR_DLG || nCtlColor CTLCOLOR_BTN || nCtlColor CTLCOLOR_STATIC) //静态文本背景透明 { pDC-SetBkMode(TRANSPARENT); pDC-SetTextColor(RGB(0,0,0)); return (HBRUSH)GetStockObject(HOLLOW_BRUSH); }// TODO: Return a different brush if the default is not desiredreturn hbr;
}
最终的效果为 窗体全透明控件不透明。原因 在OnCtlColor函数中brush new CBrush(RGB(255,255,255))将窗体背景色全部刷成RGB(255,255,255)白色。 而OnInitDialog()函数中COLORREF maskColor RGB(255,255,255); 且SetLayeredWindowAttributes参数设置为LWA_COLORKEY代表将对话框中颜色为RGB(255,255,255)的部分替换为全透明色。于是就出现了窗体全透明而控件不透明的情况。
以上2种方法都没有解决我需要的“窗体半透明控件不透明”的问题等找到解决方案后再补充
PS20180327 补充让美工做了一张半透明的图片加载资源到工程作为整个对话框的主背景23333333333......
步骤二添加图片和图片响应事件 resource资源视图下导入bmp格式的图片。 对话框添加图片控件控件属性—Type改为Bitmap于是Image就可以下拉选择刚才导入的图片了 修改图片控件的ID图片在MFC中被包装成static类vs对static类的控件都不提供Wizard设置Notify属性为TRUE于是就可以为图片添加点击事件了。 ———————————————— 版权声明本文为CSDN博主「della_Xiang」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。 原文链接https://blog.csdn.net/sunflower_della/article/details/79668165