-
2021-08-27 13:36:40
添加位图资源
bitmap 所以其扩展名为 .bmp
而且不能是24位,最好是256色替换代码
Onpaint()函数的else语句替换一下代码
//CDialog::OnPaint();//要禁止这个调用 CPaintDC dc(this); CRect rect; GetClientRect(&rect); CDC dcMem; dcMem.CreateCompatibleDC(&dc); CBitmap bmpBackground; bmpBackground.LoadBitmap(IDB_BITMAP2); //IDB_Bg为刚刚载入的图片对应的ID BITMAP bitmap; bmpBackground.GetBitmap(&bitmap); CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground); dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
更多相关内容 -
Android系统默认对话框添加图片功能
2020-08-31 18:07:21主要介绍了Android系统默认对话框添加图片的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 -
带有放大镜窗口的MFC对话框图片读取和浏览
2017-11-03 11:22:20VS2010环境下带局部放大小窗口的MFC对话框图片读取和浏览程序,该程序中使用picture控件读取bmp格式的图片,若图片尺寸较大可用滚动条进行浏览,同时利用滑块控件进行图片的放大和缩小。 -
JS打开图片另存为对话框实现代码
2020-10-27 19:18:37使用JS打开图片另存为对话框一直都是网页应用中不可缺少的一部分,本人有些好奇,于是搜集整理了一些实现代码,不知道符不符合大众的口味,在此班门弄斧了,需要的朋友可以了解下 -
C#winform对话框用法大全
2014-11-12 14:49:16对话框用法大全 常用以下几种: 1、文件对话框(FileDialog) 它又常用到两个: 打开文件对话框(OpenFileDialog) 保存文件对话(SaveFileDialog) 2、字体对话框(FontDialog) 3、颜色对话框(ColorDialog) ... -
jquery带对话框提示图片相册特效代码
2021-03-20 04:21:13jquery带对话框提示图片相册是一款带对话框提示,鼠标点击一张张相册图片放大查看的jquery图片相册幻灯片。 -
jquery带对话框提示图片相册
2021-04-02 02:27:43jquery带对话框提示图片相册是一款带对话框提示,鼠标点击一张张相册图片放大查看的jquery图片相册幻灯片。 -
Qt在对话框中插入图片
2013-09-16 15:55:28Qt在对话框中插入图片 欢迎下载 免费观看 -
MFC对话框图片处理
2014-07-10 11:38:35主要在MFC对话框中设置背景颜色、以及动态加载图片 、音乐、窗体贴图等解决方案 -
MFC 在对话框显示图片的多种方法
2018-11-08 21:26:44MFC 在对话框显示图片的多种方法(一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基于对话框的工程,... -
图片、文本文件对话框模块.e.rar
2020-03-12 03:43:23图片、文本文件对话框模块.e.rar -
MFC 对话框背景图片
2020-09-09 20:37:25为了实现美化对话框背景的效果,我们需要让我们的对话框响应WM_CTLCOLOR消息,每当我们的对话框或者它的子控件需要重绘时,我们的对话框都会收到这个消息, 因此,我们需要为对话框添加WM_CTLCOLOR的在windows开发当中做界面的主要技术之一就是使用MFC,通常我们看到的QQ,360,暴风影音这些漂亮的界面都可以用MFC来实现。今天我们来说一下如何用MFC美化对话框,默认情况下,对话框的背景如下:
那么,我们如何将它的背景变成如下界面呢,而且还要保留对话框的移动功能,漂亮背景如下:
为了实现美化对话框背景的效果,我们需要让我们的对话框响应WM_CTLCOLOR消息,每当我们的对话框或者它的子控件需要重绘时,我们的对话框都会收到这个消息,
因此,我们需要为对话框添加WM_CTLCOLOR的消息响应函数,完成对消息的处理,WM_CTLCOLOR的响应函数定义如下:
-
HBRUSH CMFCDialogUIDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
-
{
-
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
-
if (pWnd == this)
-
{
-
return m_bkBrush;
-
}
-
return hbr;
-
}
当我们的对话框需要重绘的时候,我们的对话框就会收到WM_CTLCOLOR消息,然后我们的对话框处理函数会调用OnCtlColor函数来处理该消息,在这个函数中,pDC代表我们要绘制的上下文环境,pWnd代表我们要绘制的窗口指针,nCtlColor代表我们要绘制的窗口类型,在函数的内部我们首先调用父类的OnCtlColor,目的是为了对该消息做默认处理,这是MFC消息响应函数的惯用写法,但是在我们这里,我们不能使用默认处理返回的画刷,所以我们需要做一个特殊的判断,如果pWnd指向的窗口地址是当前对话框,那么我们就返回m_bkBrush,这个画刷是一个图像画刷,它会在我们的对话框客户区绘制我们想让它显示的图片。下面我们看一下m_bkBrush是如何创建的,首先在我们的对话框的头文件中增加一个CBrush变量,变量名是m_bkBrush,然后在对话框的OnInitDialog中初始化它,OnInitDialog的定义如下:
-
BOOL CMFCDialogUIDlg::OnInitDialog()
-
{
-
CDialogEx::OnInitDialog();
-
// 将“关于...”菜单项添加到系统菜单中。
-
// IDM_ABOUTBOX 必须在系统命令范围内。
-
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
-
ASSERT(IDM_ABOUTBOX < 0xF000);
-
CMenu* pSysMenu = GetSystemMenu(FALSE);
-
if (pSysMenu != NULL)
-
{
-
BOOL bNameValid;
-
CString strAboutMenu;
-
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
-
ASSERT(bNameValid);
-
if (!strAboutMenu.IsEmpty())
-
{
-
pSysMenu->AppendMenu(MF_SEPARATOR);
-
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
-
}
-
}
-
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
-
// 执行此操作
-
SetIcon(m_hIcon, TRUE); // 设置大图标
-
SetIcon(m_hIcon, FALSE); // 设置小图标
-
// TODO: 在此添加额外的初始化代码
-
CString strBmpPath = _T(".\\res\\Background.png");
-
CImage img;
-
img.Load(strBmpPath);
-
MoveWindow(0, 0, img.GetWidth(), img.GetHeight());
-
CBitmap bmpTmp;
-
bmpTmp.Attach(img.Detach());
-
m_bkBrush.CreatePatternBrush(&bmpTmp);
-
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
-
}
现在我们看一下,在OnInitDialog中,我们都做了什么,首先,我们创建了一个CString变量strBmpPath,用它指向我们的图片文件,然后我们创建了一个CImage变量img,这个变量可以方便的加载各种格式的图像文件,所以我们使用它的目的是为了方便加载png格式的文件,MoveWindow的目的是为了调整我们的对话框客户区的大小,使客户区的大小与图片的大小一致,然后我们创建了一个CBitmap类型变量bmpTmp,使用它是因为CBrush的成员函数CreatePatternBrush的参数要求输入这种类型的参数,所以必须将img转换成CBitmap,转换的方法是bmpTmp.Attach(img.Detach()),img.Detach会释放图像的句柄,并且返回这个句柄,bmpTmp使用Attach绑定img返回的图像句柄,从而完成了对象类型的转换,最后调用CreatePatternBrush,这个函数的功能是使用传递给它的图像创建一个图像画刷,然后在OnCtlColor中,使用它填充对话框的背景,程序运行效果如下:
现在虽然程序的客户区已经变成了对话框的背景,但是对话框原来的标题栏和背景图片的标题栏重复,看起来很别扭,通过设置对话框的Border属性可以消除原来的标题栏,设置如下:
Border:None
再次编译,运行程序,效果如下:
现在的对话框背景已经和我们设想的基本一致,还有一点小瑕疵,大家仔细观察对话框的底边,左下角和右下角有多于的像素,下面我们通过代码消除它。
在OnInitDialog尾部追加如下代码:
-
CRgn rgnTmp;
-
RECT rc;
-
GetClientRect(&rc);
-
rgnTmp.CreateRoundRectRgn(rc.left + 3, rc.top + 3, rc.right - rc.left - 3, rc.bottom-rc.top -3, 6, 6);
-
SetWindowRgn(rgnTmp, TRUE);
通过以上的代码可以让对话框变成一个圆角矩形,这样就可以去掉边角的点,程序最终运行效果如下:
现在这个对话框的背景已经完全符合我们的要求,但是它现在不能拖动,因为它的标题栏是假的,所以,我们最后一个目标就是让这个窗口可以拖动,如何才能让它移动呢?
Windows只允许我们拖动对话框的标题栏,当我们的鼠标在对话框上拖动的时候,对话框会收到一个WM_NCHITTEST消息,默认的消息处理函数会判断当前的鼠标是否在对话框的标题栏,如果在就返回HTCAPTION标志,否则就返回其它标志,当返回HTCAPTION标志的情况下,系统就会允许对话框拖动,所以我们可以欺骗windows系统,让WM_NCHITTEST的响应函数永远返回HTCAPTION标志就可以了,为对话框添加WM_NCHITTEST响应函数,代码如下:
-
LRESULT CMFCDialogUIDlg::OnNcHitTest(CPoint point)
-
{
-
// TODO: 在此添加消息处理程序代码和/或调用默认值
-
LRESULT ret = CDialogEx::OnNcHitTest(point);
-
return (ret == HTCLIENT) ? HTCAPTION : ret;
-
}
重新编译代码,现在的对话框背景已经美化完成,并且这个对话框可以拖动。
-
-
完整版图片、文本文件对话框模块.e.rar
2020-04-02 12:04:58完整版图片、文本文件对话框模块.e.rar -
如何给MFC对话框添加背景图片
2012-10-11 19:00:21文档提供了一种如何给MFC对话框添加背景图片的方法,希望对大家有帮助 -
QT 对话框添加背景图片的方法.pdf
2021-11-24 09:34:16QT 对话框添加背景图片的方法.pdf -
jquery带对话框提示图片相册.zip
2019-07-11 11:15:13jquery带对话框提示图片相册,这样的效果有点像qq空间的那种,鼠标放在图片上会有向左或者向右的按钮,点击鼠标,如果是第一张图片,给出提示,最后一张就不能往后面看了,点击也会有提示!php中文网推荐下载! -
结合基于对话框的MFC+opencv+OpenGL绘制球体或者读取图片
2018-12-03 15:44:07本工具主要是利用基于对话框的MFC工程结合OpenCV和OpenGL读取图片或者绘制球体三角形等形状。主要通过点击MFC对话框的button按钮,弹出两个非模态对话框,一个用于OpenGL显示图像,另一个设置滑动条控件控制图像的... -
实现微信对话框的图片样式
2021-06-07 02:23:16不知道大家有没有注意到,微信里面,我们聊天的时候,发文字和发图片的时候,气泡对话框样式是有所不同的。有啥不同呢?且看下图。Paste_Image.png可以看到,发图片的时候,气泡对话框箭头的背景也是图片的一部分。...不知道大家有没有注意到,微信里面,我们聊天的时候,发文字和发图片的时候,气泡对话框样式是有所不同的。有啥不同呢?且看下图。
Paste_Image.png
可以看到,发图片的时候,气泡对话框箭头的背景也是图片的一部分。出于好奇和需求,我试着尝试实现这一样式。实现是在移动端下进行的。
用到的css属性
background: inherit: 表示继承父级的背景属性,其中包括背景图片。
background-origin: 规定 background-position 属性相对于什么位置来定位。
background-clip: 设置元素的背景(背景图片或颜色)是否延伸到边框下面。
方法一
原理是,定义一个块级元素,把图片设置为块级元素的背景图片,图片位置左移20px,然后使用伪元素,把三角形实现出来,同时继承父级的背景图片,border的宽度是20px,和上面的左移尺寸一样,这样图片拼接才顺畅。代码如下:
.dialog {
position: relative;
width: 200px;
height: 200px;
border-radius: 10px;
margin-left: 40px;
background: url("card.png") -20px 0 no-repeat;
background-size: 220px auto;
}
.dialog:after {
content: '';
position: absolute;
top: 30px;
left: -40px;
border: solid #ccc;
border-width: 20px;
border-right-color: transparent;
background: inherit;
background-size: auto;
background-clip: border-box;
background-origin: border-box;
background-position: 20px -30px;
}
实现的效果图是这样的:
Paste_Image.png
看起来还不错,达到了预期效果。但是,仔细看下代码,里面的宽度和高度都是固定的,也就是说,不同的图片,在这里显示尺寸都是一样的,这个展示不太友好。
方法二
为了做到自适应,我选择使用img来自动控制大小。对img指定宽度,然后高度自适应。原理跟方法一有点类似。这里大家可以先思考下,如何做。
实现的代码如下:
.dialog {
position: relative;
width: 200px;
border-radius: 10px;
margin-left: 40px;
background-size: 2px 2px;
background: url(test.png) -9999px 0 no-repeat;
img{
width: 100%;
position: relative;
left: -20px;
bottom: 0;
top: 0;
border-radius: 10px;
display: block;
}
.pic-wrap{
overflow: hidden;
border-radius: 10px;
}
}
.dialog:after {
content: '';
position: absolute;
top: 30px;
left: -38px;
border: solid #ccc;
border-width: 10px 20px;
background: inherit;
border-right-color: transparent;
background-clip: border-box;
background-origin: border-box;
background-position: 20px -30px;
}
简单说下原理,三角形的做法还是跟方法一一样,不同的是对话框内图片的处理。这次采用了img标签,并且在img外包了一层,以控制img的展示。首先,img先设置position:absolute,然后,设置left: -20px。然后外层设置宽度,高度由图片控制,设置overflow:hidden,裁剪掉多余的图片部分。
实现的效果如下图:
Paste_Image.png
ok ,这次可以自适应了,但是图片必须要固定宽度,这个展示也不是那么好。最好是可以根据图片的比例,来自动设置宽度和高度,于是就有了方法三。
方法三
在这个方法里面,我的想法是可以做到,图片的高宽可以按照图片的比例来进行展示,而不是固定宽度和高度。这个也是可以实现的,但是需要使用javascript来配合。
原理是这样的:等图片load完之后,拿到图片的大小,然后对图片的展示宽度按照一定的规则进行计算,我这里是采用 (图片的高度/屏幕的高度) * 图片的高度 * 0.5。然后动态设置dialog的width和background-size。
实现的代码如下:
.dialog {
position: relative;
border-radius: 10px;
margin-left: 40px;
background: url(test.png) -9999px 0 no-repeat;
img{
width: 100%;
position: relative;
left: -20px;
bottom: 0;
top: 0;
border-radius: 10px;
display: block;
}
.pic-wrap{
overflow: hidden;
border-radius: 10px;
}
}
.dialog:after {
content: '';
position: absolute;
top: 30px;
left: -38px;
border: solid #ccc;
border-width: 10px 20px;
background: inherit;
background-size: inherit;
border-right-color: transparent;
background-clip: border-box;
background-origin: border-box;
}
/** javascript **/
var dialog = (function(){
$('img').load(function(){
var img_real_height = parseInt($(this).height());
var win_height = parseInt(window.innerHeight);
var img_width = img_real_height / win_height * (img_real_height) * 0.5;
$(this).parents('.dialog').css(
{
'width': img_width,
backgroundSize: img_width+'px auto'
}
);
})
})()
但是这个方式也有缺点,就是图片的展示宽度很难用一个比较合理的公式去计算,如果你的图片规格都是差不多的,那可以用这种方法,但是如果你的图片规格多种,就不建议用这种方式了。
方法四
在经过一番思考之后,我决定再去仔细看看微信的处理方法。发现了一个规则:微信里面,如果图片的高度大于宽度,则固定高度,如果图片的高度小于宽度,则固定宽度。
ok,那我就来实现一番。
.dialog {
position: relative;
border-radius: 10px;
background-position: -9999px 0;
background-repeat: no-repeat;
margin-left: 10px;
img{
position: relative;
left: -20px;
border-radius: 10px;
display: block;
}
// 横向
&.landscape {
height: auto;
background-size: px2rem(180px) auto;
img{
width: px2rem(180px);
}
}
// 竖向
&.vertical{
height: px2rem(180px);
background-size: auto px2rem(180px);
img{
height: px2rem(180px);
}
}
.pic-wrap{
overflow: hidden;
border-radius: 10px;
}
}
.dialog:after {
z-index: -2;
content: '';
position: absolute;
top: 10px;
left: -12px;
border: solid $bgGrey;
border-right-color: transparent;
border-width: 8px 6px;
background-image: inherit;
background-size: inherit;
background-repeat: no-repeat;
background-clip: border-box;
background-origin: border-box;
background-position: 0px -6px;
}
/** javascript **/
var dialog = (function(){
function loadImg() {
$('img').load(function(){
var img_real_height = parseInt($(this).height());
var img_real_width = parseInt($(this).width());
var max_width = '180px';
var max_height = '180px';
if(img_real_width / img_real_height > 1) {
// 横向处理
$(this).parents('.dialog').addClass('landscape');
}else{
// 竖向处理
$(this).parents('.dialog').addClass('vertical');
}
})
}
loadImg();
})()
实现的效果如下:
Paste_Image.png
补充
在上述获取图片大小的时候,我使用了load()方法,但是我发现这个方法不太靠谱,会偶尔出现获取不到图片尺寸的情况。要解决这个情况,最好是通过后台接口来取得图片的尺寸,这样会靠谱点。
-
Android悬浮对话框(即点即关对话框)实现代码
2020-09-02 14:28:56本文给大家介绍android悬浮对话框和即点即关闭对话框,本文介绍非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧 -
对话框图片控件
2014-05-21 22:31:17对话框图片控件 -
vb带图片预览的对话框,vb支持图片预显示的对话框
2009-06-28 15:10:19vb带图片预览的对话框,vb支持图片预显示的对话框 取自于ibmp,图片有缩放功能,比较强大。 -
MFC基于对话框 添加背景图片
2012-09-01 10:15:54代码添加背景图片 空间添加位图、图标 对话框添加菜单 MFC对话框加载皮肤 -
在matlab中使用对话框读取图片函数
2016-10-11 17:03:06输入可以是大部分的图片格式,输出为UINT8的rgb三通道图,通过对话框读取,自由度十分的高,希望能帮到matlab的初学者们! -
VC++ mfc对话框加载图片并显示
2021-03-15 15:52:54摘要:VC/C++源码,界面编程,对话框,Mfc mfc 对话框加载图片文件显示,传入图片文件路径,或者读取文件内容到缓冲区。 -
利用OpenCV在MFC对话框显示图片的类
2019-05-30 20:49:29利用OpenCV在MFC中显示图片的转换类,可以将IplImage类型的数据转换成MFC对话框可现实的数据,很实用。 -
易语言打开图片文件对话框应用详解
2020-08-26 11:57:15在本篇内容里小编给各位分享了关于易语言打开图片文件对话框应用的相关知识点内容,有需要的朋友们可以学习下。 -
对话框上显示图片
2013-04-16 20:52:15本程序能够实现在对话框图片控件上打开图片,并能实现图片的漫游,放大,缩小功能