精华内容
下载资源
问答
  • MFC无边框的窗体实现用鼠标拖动窗体边缘实现窗体大小变化

    无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢?下面介绍一种方法,通过以下几个步骤即可实现:

    1.实现WM_NCHITTEST消息,实现四条边框的模拟

    2.实现WM_NCLBUTTONDOWN,发送窗体拖曳变化的消息

     

    具体阐述如下:

    1.实现WM_NCHITTEST消息,实现四条边框的模拟

    参考代码如下:

    2.实现WM_NCLBUTTONDOWN,发送窗体拖曳变化的消息

    通常,使用上述的代码即可实现要求。

     

    我们进行一下扩展。在窗体大小发生变化时,有两种表现形式:一种是出现虚线框,一种没有。这个选择依赖于操作系统,你可以右击桌面/属性/外观/效果中通过选择或取消“拖动时显示窗口内容”来表现这两种形式。那么如何在程序中实现而不依赖于当前机器的设置呢(这里的意思是不依赖手动选择“拖动时显示窗口内容”项),我们可以在OnNcLButtonDown函数中通过加入如下的代码实现:

     

    这段代码意思是在拖动上边缘动作之前,设置“拖动时显示窗口内容”,当该动作结束后,恢复原来的设置。当然,更好的做法是你首先获取机器当前的选项是什么,函数依旧是SystemParametersInfo,只是选项变化,具体查看MSDN即可。

    (文章中的有些代码参考了网上的代码,整理的匆忙,忘记出处了,再找时候有很多地方都有该代码,也不知道源头是哪里,请原作者见谅)

    展开全文
  • 无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢?下面介绍一种方法,通过以下几个步骤即可实现: 1.实现WM_NCHITTEST消息,实现四条边框的模拟 2.实现WM_NCLBUTTONDOWN,发送窗体拖曳变化的消息 具体...

    无边框窗体如何实现用鼠标拖动窗体边缘实现窗体大小变动呢?下面介绍一种方法,通过以下几个步骤即可实现:

    1.实现WM_NCHITTEST消息,实现四条边框的模拟

    2.实现WM_NCLBUTTONDOWN,发送窗体拖曳变化的消息

    具体阐述如下:

    1.实现WM_NCHITTEST消息,实现四条边框的模拟

    参考代码如下:

    LRESULT CUserForm::OnNcHitTest(CPoint point)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值    
        CRect rect;
        GetWindowRect(&rect);
        CRect rect1 = rect;
        rect1.DeflateRect(10, 10, -10, -10);//缩小矩形
        rect1.NormalizeRect();//规范化矩形确保非0或负
        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,发送窗体拖曳变化的消息

    void CUserForm::OnNcLButtonDown(UINT nHitTest, CPoint point)
    {
        // TODO: 在此添加消息处理程序代码和/或调用默认值
        if (nHitTest == HTTOP)
        {        
            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));
    }

    通常,使用上述的代码即可实现要求。

    我们进行一下扩展。在窗体大小发生变化时,有两种表现形式:一种是出现虚线框,一种没有。这个选择依赖于操作系统,你可以右击桌面/属性/外观/效果中通过选择或取消“拖动时显示窗口内容”来表现这两种形式。那么如何在程序中实现而不依赖于当前机器的设置呢

    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);
    }

     

    WM_SYSCOMMAND
     
    当用户从窗口菜单选择一个命令或当用户选择最大化按钮,最小化按钮,复原按钮或关闭按钮时,一个窗口将会接收该消息
    Syntax
    WM_SYSCOMMAND
    WPARAM wParam
    LPARAM lParam;
     
    参数
    wParam
    指定系统命令的类型。该参数可以是下列值之一:
    SC_CLOSE
    关闭窗口
    SC_CONTEXTHELP
    将光标改为一个问题标识样式。如果用户之后点击了对话框中的一个控件,该控件会收到一个WM_HELP消息。
    SC_DEFAULT
    当用户双击窗口菜单时,选择默认的条目。
    SC_HOTKEY
    以应用程序指定的热键激活窗口。lParam参数标识了所要激活的窗口。
    SC_HSCROLL
    水平滚动。
    SC_KEYMENU
    键盘的敲击返回窗口菜单
    SC_MAXIMIZE
    最大化窗口
    SC_MINIMIZE
    最小化窗口
    SC_MONITORPOWER
    设置显示状态。该命令支持具有节电特性的设备,如电池供电的个人电脑。
    lParam参数可以具有下列值:
    -1 - 显示设备打开
    1 - 显示设备将要进入节电模式。
    2 - 显示设备将要被关闭
    SC_MOUSEMENU
    鼠标单击返回窗口菜单
    SC_MOVE
    移动窗口
    SC_NEXTWINDOW
    移到下一个窗口
    SC_PREVWINDOW
    移到前一个窗口
    SC_RESTORE
    将窗口复原到原始的位置和大小。
    SC_SCREENSAVE
    执行System.ini文件里[boot]部分指定的屏幕保护程序。
    SC_SIZE
    改变窗口大小。
    SC_TASKLIST
    激活【开始】菜单。
    SC_VSCROLL
    垂直滚动。
    lParam
    如果一个窗口命令被鼠标选中,低位字指定光标的水平位置。否则该参数不被使用。
    如果一个窗口命令被鼠标选中,高位字指定光标的垂直位置。如果使用系统加速键选择的命令,则该参数为-1,如果使用助记符的话,则该参数为0.
    返回值
    如果成功处理该消息,则返回值为0.
    备注
    获得屏幕坐标系下的位置坐标,可以使用下面的代码:
    xPos = GET_X_LPARAM(lParam); // horizontal position
    yPos = GET_Y_LPARAM(lParam); // vertical position

     

    参考文章:http://blog.csdn.net/zjtchow/article/details/6122320

    参考文章:http://baike.baidu.com/link?url=mwSXzuAO5-zjQ7Oyhgr8WfVNGsEkIdLCNJtdlHxd32JXRj_JydBjcIEq3vy-kUw3mZ8aa9c6W6ESwk-xmgX0t_

    展开全文
  • C#210鼠标拖动窗体,源代码
  • 鼠标拖动窗体

    2014-09-17 23:37:00
    1.鼠标在客户区拖动窗口 重载消息函数 procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST; procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest); begin inherited; //不可缺少 if (=...

    1.鼠标在客户区拖动窗口
    重载消息函数 procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
    procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
    begin
    inherited; //不可缺少
    if (=Message.Result = HTCLIENT) then
    Message.Result := HTCAPTION;
    end;

    2.鼠标在 Panel 上拖动窗口
    在 Panel 的 OnMouseMove 事件中写入下代码:
    procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    begin
    ReleaseCapture;
    SendMessage(Self.Handle, WM_SYSCOMMAND, SC_MOVE + 1, 0);
    end;

    转载于:https://www.cnblogs.com/spiritofcloud/p/3978330.html

    展开全文
  • 简单方法实现用鼠标拖动无标题栏HTML类对话框
  • MS office 用鼠标拖动窗口时卡顿的问题 这个问题一直有人反馈,可是微软并没有承认这个问题。而网上的解决方法有如下: 独显启动office,提高渲染效率。治标不治本。 降低鼠标的回报率。买了一个好鼠标,为了一...

    MS office 用鼠标拖动窗口时卡顿的问题

    这个问题一直有人反馈,可是微软并没有承认这个问题。而网上的解决方法有如下:

    1. 用独显启动office,提高渲染效率。治标不治本。
    2. 降低鼠标的回报率。买了一个好鼠标,为了一个office,降低鼠标的性能,得不偿失。
    3. windows设置拖动窗口时不显示内容。同样,为了一个应用降低整体使用体验。

    我的解决办法在我自己身上有用。
    在设置里找到office,点修改。
    在这里插入图片描述
    然后点快速修复。
    在这里插入图片描述
    一两分钟就能修复好。然后有明显改善。
    个人觉得如果没用的话,可以尝试一下联机修复。

    展开全文
  • C#鼠标拖动窗体代码

    2011-04-16 09:05:00
    C#鼠标拖动窗体代码
  • C# 程序启动后 鼠标拖动窗体控件源码 可用来实现动态布局窗体等。
  • 首先,在程序.Designer.cs中添加以下两句:   this.MouseDown += new System.Windows.Forms.MouseEventHandler(Form1_MouseDown); this.MouseMove += new System.Windows.Forms.MouseEventHandler(Form1_...
  • 其实只需用鼠标拖动窗体的客户区就可以了。方法一 以下是完成上述功能最普通的方法:在窗体的private声明部分加入以下过程声明: procedure WMNCHitTest(var Msg:TWMNCHitTest);message WM_NCHITTEST; 然后在...
  • 可以使用鼠标拖动窗口内组件的位置,也可以使用键盘的上、下、左、右键移动窗口内组件的位置.
  • 我是想做QQ登录界面,去了边框加了splitContainer分成了上下两部分,要做到鼠标拖动窗口
  • 1、无标题栏,自定义边框,可以根据需要修改,做的简单; 2、像QQ面板一样,需要时...3、可以拖动修改大小,拖动移动位置; 4、2种效果比较,demo_02是最终效果,有点小问题,就是左、上拉伸时,右、下有点小小的抖动;
  • 摘要:VC/C++源码,数据库应用,窗体拖动 WindowKiller:鼠标拖动指定窗体,并向其PostMessage发送WM_CLOSE消息将其关闭。运行于VC++.net环境的源代码。
  • 用鼠标拖动一个窗口,鼠标已经显示到一个位置了,但是窗口还没到那个位置,会缓慢的飘过去,请问解决方法
  • c++应用程序,实现用鼠标拖动方式在窗口中画自由曲线,在鼠标拖动画线过程中,当光标设置为十字形。
  • QT 鼠标拖动窗口的实现

    千次阅读 2018-11-13 20:26:35
    /* 鼠标拖动窗口 */ void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); /* 记录窗口当前的位置 */ QPoint StartPos;  .cpp 文件内: voi...
  • 主要介绍了C#实现Winform鼠标拖动窗口大小时设定窗口最小尺寸的方法,涉及WinForm改变窗口大小时动态判断当前窗口尺寸的相关技巧,非常简单实用,需要的朋友可以参考下
  • labview程序,通过使用winAPI函数GetMessagePos,在无标题栏的情况下使用鼠标拖动,移动窗口位置。
  • Winform 鼠标拖动窗体

    2011-02-28 09:56:00
    窗体移动 privatePointmouseOffset;privateboolisMouseDown=false;privatevoidForm1_MouseDown(objectsender,MouseEventArgse){intyOffset,xOffset;if...
  • QT自定义Widget实现鼠标拖动窗口移动位置及鼠标拖拽窗口边缘窗口大小改变 通过setWindowFlags(Qt::FramelessWindowHint);可以隐藏掉Qt自带的窗口...如果我既想自定义窗体,也想要让自定义的窗体,兼具鼠标拖动窗口移动
  • C# 鼠标拖动任意控件 或拖动窗体

    千次阅读 2019-05-31 07:58:07
    //// 利用Windows 的 API 函数:SendMessage 和 ReleaseCapture //const uint WM_SYSCOMMAND = 0x0112; //const uint SC_MOVE = 0xF010; //const uint HTCAPTION = 0x0002; //[Dl...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,630
精华内容 24,652
关键字:

怎样用鼠标拖动窗口