精华内容
下载资源
问答
  • 如何用鼠标拖动对话框
    千次阅读
    2013-08-22 09:55:17

    原文出处忘了

    鼠标拖动对话框边缘改变大小。首先要设置对话框的Border设置为Resizing。

     

     

    1.响应 WM_NCHITTEST消息

     

    LRESULT CCVDeviceOnlineTblCompareDlg::OnNcHitTest(CPoint point)
    {
    	// TODO: Add your message handler code here and/or call default
    	CRect rect;
    	GetWindowRect(&rect);
    	CRect rect1 = rect;
    	rect1.DeflateRect(10, 10, -10, -10);
    	rect1.NormalizeRect();
    	if (point.x <= rect.left+3)
    		return HTLEFT;
    	else if (point.x >= rect.right-3)
    		return HTRIGHT;
    	else if (point.y <= rect.top+3)
    		return HTTOP;
    	else if (point.y >= rect.bottom-3)
    		return HTBOTTOM;
    	else if (point.x <= rect.left+10 && point.y <= rect.top+10)
    		return HTTOPLEFT;
    	else if (point.x >= rect.right-10 && point.y <= rect.top+10)
    		return HTTOPRIGHT;
    	else if (point.x <= rect.left+10 && point.y >= rect.bottom-10)
    		return HTBOTTOMLEFT;
    	else if (point.x >= rect.right-10 && point.y >= rect.bottom-10)
    		return HTBOTTOMRIGHT;
    	else if (!rect.IsRectEmpty())
    	{
    		LRESULT uRet = CWnd::OnNcHitTest(point);
    		uRet = (uRet == HTCLIENT) ? HTCAPTION : uRet;
    		return uRet;
    	}
    	else
    	{
    		return CWnd::OnNcHitTest(point);
    	}
    	return 0;
    }


     

    2.响应 WM_NCLBUTTONDOWN消息

     

    // TODO: Add your message handler code here and/or call default
    
    	if (nHitTest == HTTOP)
    	{	
    		//SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, TRUE, NULL, 0);
    		//SendMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
    		//SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, FALSE, NULL, 0);
    		SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOP, MAKELPARAM(point.x, point.y));
    	}
    	else if (nHitTest == HTBOTTOM)
    		SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOM, MAKELPARAM(point.x, point.y));
    	else if (nHitTest == HTLEFT)
    		SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_LEFT, MAKELPARAM(point.x, point.y));
    	else if (nHitTest == HTRIGHT)
    		SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_RIGHT, MAKELPARAM(point.x, point.y));
    	else if (nHitTest == HTTOPLEFT)
    		SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y));
    	else if (nHitTest == HTTOPRIGHT)
    		SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_TOPRIGHT, MAKELPARAM(point.x, point.y));
    	else if (nHitTest == HTBOTTOMLEFT)
    		SendMessage( WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMLEFT, MAKELPARAM(point.x, point.y));
    	else if (nHitTest == HTBOTTOMRIGHT)
    		SendMessage(WM_SYSCOMMAND, SC_SIZE | WMSZ_BOTTOMRIGHT, MAKELPARAM(point.x, point.y));
    	else if (nHitTest==HTCAPTION)
    		SendMessage(WM_SYSCOMMAND, SC_MOVE | 4, MAKELPARAM(point.x, point.y));
    	else if (nHitTest == HTREDUCE ||nHitTest == HTZOOM ||nHitTest == HTCLOSE)
    		DefWindowProc(WM_NCLBUTTONDOWN,nHitTest,MAKELPARAM(point.x, point.y));


                 其中第一个if语句注释的,为设置分割线的信息,即鼠标停止才添加,否则为拉动则添加。其中的每一个if语句为响应的处理向上、向下等方向拉动时,需要发送的消息,其中最后一个为处理最大化、最小化、关闭按钮的消息,全部交给系统处理。如果不处理此消息,当点击最小化等按钮时,不会执行响应的功能。

    更多相关内容
  • 主要介绍了JavaScript实现拖动对话框效果,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • dialog对话框插件鼠标点击弹出可拖动对话框代码 dialog对话框插件鼠标点击弹出可拖动对话框代码 dialog对话框插件鼠标点击弹出可拖动对话框代码
  • 简单方法实现用鼠标拖动无标题栏HTML类对话框
  • //当鼠标按下,且移动的时候,页面坐标 - 鼠标在登录框里的位置 = 登录框和页面边的距离 var fixX = e.pageX - login.offsetLeft; var fixY = e.pageY - login.offsetTop; //鼠标移动 document.addEventL

    效果

    核心代码

     <script>
            //获取元素
            var click = document.querySelector('.login-header a');
            var login = document.querySelector('.login');
            var box = document.querySelector('.box');
            var close = document.querySelector('.close-login');
            var title = document.querySelector('#title')
            var bg = document.querySelector('.login-bg');
    
            //(1)登录框的弹出与退出
            //点击上方文字弹出对话框,出现遮罩
            click.addEventListener('click', function () {
                login.style.display = 'block';
                bg.style.display = 'block';
            })
    
            //点击关闭的×号,关闭对话框,遮罩消失
            close.addEventListener('click', function () {
                login.style.display = 'none';
                bg.style.display = 'none';
            })
            //(2)登录框的拖动
            // 鼠标按下
            title.addEventListener('mousedown', function (e) {
                //当鼠标按下,且移动的时候,鼠标在整个页面的坐标e.pageX - 登录框和页面边的距离(offsetLeft/offsetTop) =鼠标在登录框里的位置
        //这个位置是固定的,无论之后怎么拖动登录框,鼠标在登录框里的位置是固定的,除非你松开后再点
                var fixX = e.pageX - login.offsetLeft;
                var fixY = e.pageY - login.offsetTop;
            //鼠标移动
                document.addEventListener('mousemove', move);
                function move(e) {
                    login.style.marginLeft = 0;
                    login.style.left = e.pageX - fixX + 'px';
                    login.style.top = e.pageY - fixY + 'px';
                    //这里的e.pageX是页面移动后的值,和上面的e.pageX不相等
                }
            //鼠标抬起
                document.addEventListener('mouseup', function () {
                    document.removeEventListener('mousemove', move)
                })
            })
        </script>

    结构层

      <div class="login-header">
            <a href="javascript:;">点击弹出登录框</a>
        </div>
        <div class="box">
    
            <!--登录框 -->
            <div id="login" class="login">
                <div id="title" class="login-title">登录会员
                    <span> <a href="javascript:void(0);" class="close-login">×</a></span>
                </div>
                <div class="login-input-content">
                    <div class="login-input">
                        <label>用户名:</label>
                        <input type="text" placeholder="请输入用户名" name="info[username]" id='username'>
                    </div>
    
                    <div class="login-input">
                        <label>登陆密码:</label>
                        <input type="text" placeholder="请输入密码" name='info[password]' id='password'>
                    </div>
                </div>
                <div class="loginBtn" id="login-button">
                    <a href="javascript:void(0);" id="login-button-submit">登录会员</a>
                </div>
            </div>
    
            <!-- 遮盖层 -->
            <div class="login-bg" id='bg'></div>
    
        </div>

    样式层

        <style>
            a {
                text-decoration: none;
                color: black;
            }
        
            input {
                outline:none;
            }
    
            .login,
            .login-bg {
                display: none;
            }
    
            .login {
                position: absolute;
                top: 100px;
                left: 50%;
                margin-left: -250px;
                width: 500px;
                height: 280px;
                background-color: white;
                border-radius: 15px;
                /* margin: 100px auto; */
            }
    
    
            /* 标题 */
    
    
            .login-header {
                text-align: center;
                font-weight: 600;
            }
    
    
            .login-title {
                position: relative;
                text-align: center;
                padding: 20px 0;
                font-weight: 600;
            }
    
    
            .login-title a {
                position: absolute;
                display: block;
                top: 0px;
                right: 5px;
                border-radius: 15px;
                width: 30px;
                height: 30px;
                background-color: #fff;
                font-size: 16px;
                text-align: center;
                line-height: 30px;
                font-weight: 400;
            }
    
    
            /* 登录主体 */
    
    
            .login-input {
                margin-bottom: 20px;
                float: left;
    
            }
    
            .login-input label {
                float: left;
                width: 90px;
                padding-right: 10px;
                font-size: 12px;
                text-align: right;
                height: 35px;
                line-height: 35px;
    
            }
    
            .login-input input {
                width: 300px;
                border: 1px solid #ccc;
                height: 30px;
                line-height: 30px;
            }
    
            /* 登录会员按钮 */
            .loginBtn a {
                position: absolute;
                float: left;
                top: 200px;
                left: 130px;
                width: 200px;
                height: 30px;
                line-height: 30px;
                text-decoration: none;
                text-align: center;
                color: black;
                font-size: 14px;
                font-weight: 600;
                border: 1px solid #ccc;
                padding: 5px 20px;
                /* background-color: purple; */
            }
    
            /* 背景 */
    
            .login-bg {
                position: absolute;
                top: 0;
                left: 0;
                background-color: #afb2af;
                width: 100%;
                height: 100%;
                z-index: -1;  
            }
        </style>
    展开全文
  • 前端拖动对话框案例

    2021-12-22 20:36:57
    前端拖动对话框案例

    实现的主要原理:(1)通过鼠标按下id="login_title"的区域,为页面注册鼠标移动事件        (2)通过鼠标事件的 .clientX, .clientY得到鼠标在屏幕中的距离屏幕左和上的偏移量        (3)用定位来实现单窗的位置改变从而实现弹窗的移动

     HTML结构:

    <!-- 弹窗按钮 -->

        <div id="login_herder">点击,弹出登录框</div>

        <!-- 整个窗口 -->

        <div id="login">

            <div id="login_title">

                登录会员

                <span>关闭</span>

            </div>

            <div class="login-input-content">

                <div class="login-input">

                    <label>用户名</label>

                    <input type="text" placeholder="请输入用户名" name="info[username]" id="username" class="list-input">

                </div>

                <div class="login-input">

                    <label>登录密码:</label>

                    <input type="text" placeholder="请输入登录密码" name="info[password]" id="password" class="list-input">

                </div>

            </div>

            <div id="login-btn">

                登录会员

            </div>

        </div>

    CSS的样式:

     

        <style>

            #login_herder {

                color: #000000;

                font-size: 24px;

                line-height: 30px;

                width: 192px;

                height: 31px;

                position: absolute;

                left: 50%;

                margin-left: -96px;

                cursor: pointer;

            }

           

            #login {

                position: absolute;

                width: 512px;

                height: 282px;

                left: 50%;

                margin-left: -256px;

                margin-top: 140px;

                border: #ebebeb solid 1px;

                box-shadow: 0 0 20px #ddd;

                display: none;

            }

           

            #login_title {

                width: 100%;

                height: 40px;

                text-align: center;

                font-size: 18px;

                height: 40px;

                margin-top: 10px;

                cursor: move;

            }

           

            #login_title>span {

                height: 42px;

                width: 42px;

                position: absolute;

                right: -20px;

                top: -20px;

                border: #ebebeb solid 1px;

                border-radius: 50%;

                font-size: 12px;

                line-height: 42px;

                background-color: #fff;

            }

           

            #login>.login-input-content>.login-input {

                margin-top: 20px;

                overflow: hidden;

                /* overflow作用子元素加了浮动导致高度坍陷 */

            }

           

            #login>.login-input-content>.login-input label {

                float: left;

                width: 90px;

                padding-right: 10px;

                text-align: right;

                line-height: 35px;

                height: 35px;

                font-size: 14px;

            }

           

            #login>.login-input-content>.login-input input {

                float: left;

                line-height: 35px;

                height: 35px;

                width: 350px;

                border: #ebebeb 1px solid;

                text-indent: 5px;

            }

           

            #login-btn {

                width: 258px;

                height: 42px;

                line-height: 42px;

                text-align: center;

                margin: 30px auto 0 auto;

                border: #ebebeb 1px solid;

                font-size: 14px;

            }

        </style>

    JS逻辑部分:

     

        <script>

            //弹出登录框按钮

            var login_herder = document.getElementById("login_herder");

            //整个登录框

            var login = document.getElementById("login");

            //登录框文字部分,手机按上去拖到区域

            var login_title = document.getElementById("login_title");

            login_herder.onclick = function() {

                login.style.display = "block"

            }

            login_title.onmousedown = function(e) {

                //spaceX鼠标在登录弹窗中,距离左边框的左偏移量

                var spaceX = e.clientX - login.offsetLeft;

                //spaceY鼠标在登录弹窗中,距离上边框的上偏移量

                var spaceY = e.clientY - login.offsetTop;

                //按下login_title区域,为整个网页文档注册鼠标移动事件

                document.onmousemove = function(e) {

                     //256和140分别是margin-left和margin-top。目的为了抵消掉margin

                    var x = e.clientX - spaceX + 256;

                    var y = e.clientY - spaceY - 140;

                    login.style.left = x + "px";

                    login.style.top = y + "px";

                }

            }

            //松开下login_title区域,为整个网页文档解绑鼠标移动事件

            login_title.onmouseup = function() {

                document.onmousemove = null;

            }

        </script>

    得到x和y的逻辑图:

    展开全文
  • 实现点击按住蓝色区域移动鼠标实现拖动整个区域,松开时固定在当前位置: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ...

    实现点击按住蓝色区域移动鼠标实现拖动整个区域,松开时固定在当前位置:

     

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>拖动模态框</title>
        <style>
            div.modal {
                background-color: hotpink;
                width: 300px;
                height: 300px;
                position: relative;
            }
            div.header{
                height: 50px;
                width: 100%;
                background-color: lightblue;
            }
        </style>
    
    </head>
    <body>
        <div class="modal">
            <div class="header"></div>
        </div>
    
        <script>
            var eleHeader = document.querySelector('.header');
            var eleModal = document.querySelector('.modal');
            //鼠标按下事件
            eleHeader.addEventListener('mousedown',function(e){
                //方法一
                //offsetLeft/Top可以得到元素的偏移位置返回的不带单位的数值
                //以带有定位的父亲为准,如果没有父亲或者父亲没有定位则以body为准
                var fixX = e.pageX - eleModal.offsetLeft;
                var fixY = e.pageY - eleModal.offsetTop;
                //方法二
                // offsetX/Y 规定了事件对象与目标节点的内填充边(padding edge)在 X/Y 轴方向上的偏移量。
                //新属性,老版本浏览器不兼容
                // var fixX = e.offsetX;
                // var fixY = e.offsetY;
                
                //鼠标移动事件
                document.addEventListener('mousemove', move)
    
                function move(e){
                    //  clientX/Y相对于视口
                    //  pageX/Y相对于整个页面
                    //  screenX/Y相对于电脑屏幕
                    eleModal.style.left = e.pageX - fixX +'px';
                    eleModal.style.top = e.pageY - fixY +'px';
                }
                //鼠标弹起事件
                document.addEventListener('mouseup',function(){
                    document.removeEventListener('mousemove',move)
                })
            })
        </script>
    </body>
    </html>

    展开全文
  • 解决无标题栏窗口的拖动问题有两种方案,一种方案是使用常规思路来处理鼠标拖拽事件,当窗口获得WM_LBUTTONDOWN(OnLButtonDown)时,通过设置标志并调用CWnd::SetCapture()函数来让当前窗口捕捉鼠标消息,应用...
  • 鼠标按下即可拖动对话框 点击关闭按钮即可关闭对话框 代码: CSS+HTML代码 <head> <style> * { margin: 0; padding: 0; font-family: sans-serif; } body { background-color: rg
  • 基于MFC框架,实现定点缩放功能。 图片格式为bmp
  • 按住对话框顶部并移动,实现拖动效果。 点击对话框右上角×,关闭对话框。 代码实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" ...
  • MFC填充对话框背景和设置鼠标拖动 1.打开对话框属性窗口 2.添加消息 WM_ERASEBKGND WM_LBUTTONDOWN 3.添加对应的代码 BOOL CMFCTestDlg::OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息处理程序代码和/或调用...
  • Qt实现用鼠标拖拽对话框

    千次阅读 2015-07-26 11:32:28
    Qt实现用鼠标拖拽对话框在QWidget类中定义了两个函数void mousePressEvent(QMouseEvent *); //鼠标点击时执行的槽函数 void mouseMoveEvent(QMouseEvent *); //鼠标移动时执行的槽函数 继承自QWidget的类中可以重...
  • 鼠标左键按下后并对鼠标进行移动,从而窗口跟随鼠标移动,直到鼠标左 键抬起。 其具体思路是重载“WM_NCHITTEST”消息,在生成的“OnNcHitTest”函数中添加鼠标移动时窗口随之移动的代码,具体实现步骤见附件。
  • vue实现可拖动智能聊天对话框

    千次阅读 2020-12-01 16:31:53
    鼠标放在红色头部区域可以拖动,不会超出当前可是区域。点击方块可以放大占满全屏,再次点击变回正常大小。点击x隐藏对话框。 把鼠标放在对话框的边上可以上下左右拖拽放大。我是参考的这个网址里的,写的很好,有...
  • 通过修改对话框Border属性 if (Border_Dialog_Frame == nBorder ) { ModifyStyle(WS_CAPTION| WS_POPUP | WS_SYSMENU | WS_CLIPSIBLINGS | DS_MODALFRAME, WS_CAPTION| WS_POPUP | WS_SYSMENU | WS_...
  • 主要介绍了jQuery实现的简单对话框拖动功能,涉及jQuery事件响应、数值运算及页面元素属性动态操作相关实现技巧,需要的朋友可以参考下
  • 如何使对话框拖动改变大小

    千次阅读 2011-01-26 14:00:00
    <br />鼠标放到对话框边缘或拐角时,可以拖动改变窗口的大小 m_pMotorCtrlDlg =new CMotorCtrlDlg; m_pMotorCtrlDlg->Create(IDD_DIALOG_MOTORCONTROL, this); //this->GetDesktopWindow()); //...
  • MFC无边框对话框鼠标拖动和缩放

    千次阅读 2019-02-22 10:04:41
    三步实现MFC对话框Boder为None对话框鼠标拖动缩放功能。 第一步,实现对话框的WM_NCHITTEST消息,代码如下: LRESULT CTestDlg::OnNcHitTest(CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 ...
  • 修改对话框模板属性 styles-->>Border 属性改为Resizing  还是以上面最简单的情况为例子: 1 首先要知道对话框大小是否改变,改变了多少,我们应该记录当前对话框的大小。 在对话框类中添加成员变量 CRect m_...
  • 内容索引:VC/C++源码,界面编程,拖动 VC++实现无标题栏对话框拖动,很多基于对话框的...众所周知,窗口的移动都是通过鼠标点住标题栏拖动窗口实现的,那么现在没有了标题栏,如何移动对话框呢?请参考这个源代码。
  • 由Js实现的网页WEB对话框鼠标可随意拖动改变位置,类似于有些软件初次运行时候弹出的每日提示,里面有文字在循环变化,时间到自动关闭,多么强大的一个web对话框啊,有兴趣的朋友可以参考下啊
  • 文章目录 效果 实现代码 实现原理 效果 实现代码 DOM对象的拖动效果 实现原理 上面pink老师的实现原理就是鼠标在div中的位置固定不变,但是鼠标位置改变,鼠标和div左上角相对位置不变,然后就可以实现这个效果。...
  • 定义头文件  QPoint move_point; //移动的距离 ... //按下鼠标左键 protected:  void mousePressEvent(QMouseEvent *event);  void mouseReleaseEvent(QMouseEvent *event);  void mouseMoveEve
  • MFC对话框拖动

    千次阅读 2017-09-09 11:51:12
    为了实现窗口可拖动化,在直接贴图的窗口中,即自绘背景图中需要自己实现客户区与非客户区的区分,之后实现非客户区的鼠标拖动功能。 LRESULT CfmudemoDlg::OnNcHitTest(CPoint point)//鼠标状态测试函数(一直循环...
  • VUE3实现对话框窗口拖动

    千次阅读 2021-11-24 00:03:17
    使用指令 前言 提示:在开发前端项目的时候 我们可能要用到可拖动的窗口 例如:下图中的效果。 一、创建一个指令文件 示例: /** *dragMove.js 当前文件名 *2021/11/24-18:54 创建时间 *PhpStorm IDE名称 *...
  • 在vs2005下编写的拖动鼠标画圆的程序(C++)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,251
精华内容 14,500
关键字:

如何用鼠标拖动对话框