说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何拖动窗体??我知道各位老大都会

编辑:说三道四文库 发布时间:2017-11-20 12:28
HTML文档下载 WORD文档下载 PDF文档下载
做一个控件,模拟窗口标题栏。
其它的基本上都实现了,但现在遇到一个问题:如何使拖动该控件动作-->变成拖动窗口位置动作?

可用记录MouseDown位置及拖动位置的方法,当MouseMove时,动态改变Form的Left及Top,但这样每次MouseMove时窗口都将重画,系统效率低下,且不象真正的窗口标题栏拖动(仅画一个虚框)。

也可以在桌面上画一个虚框,(用::GetDC(0)来获得桌面句柄,之后::FrameRect(dc,&aRect,aBrush);),但之后怎么察除呢?

也可映射消息WM_NCHITTEST,但我是从TControl下继承而来的,不知怎的它不响应该消息,唉!


请高手指点一二,有思路也可!
The framework calls this member function for the CWnd object that contains the cursor (or the CWnd object that used the SetCapture member function to capture the mouse input) every time the mouse is moved.

afx_msg UINT OnNcHitTest(
   CPoint point 
);


HTCAPTION   In a title-bar area.
void __fastcall TfrmAbout::FormMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    if(Button==mbLeft)
    {
        ReleaseCapture();
        SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION,NULL);
    }    
}

void __fastcall TForm1::FormMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    //无标题窗口的拖动
    if(Button==mbLeft)
    {
        ReleaseCapture();
        SendMessage(this->Handle,WM_SYSCOMMAND,SC_MOVE+HTCAPTION,0);
        SetWindowPos(this->Handle,HWND_TOPMOST,0,0,0,0,SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOSIZE);        
    }       
}
给你我的程序中的在桌面上的画框的函数,这是我用VC中sdk写的,调用部份没有给全,你自己写吧!
//这个函数画虚框
void DrawUIBorder( LPRECT lprc )
{
    HDC hDC;
    int sbx, sby;

    hDC = CreateDC( "DISPLAY", NULL, NULL, NULL );
    SelectObject( hDC, GetStockObject( GRAY_BRUSH ) );//这里可以自己定义是实线还是虚框
    sbx = GetSystemMetrics( SM_CXBORDER );
    sby = GetSystemMetrics( SM_CYBORDER );
    PatBlt( hDC, lprc->left, 
lprc->top, 
lprc->right - lprc->left-sbx, 
sby, PATINVERT );
    PatBlt( hDC, lprc->right - sbx, 
lprc->top, 
sbx, 
lprc->bottom - lprc->top-sby, PATINVERT );
    PatBlt( hDC, lprc->right, 
lprc->bottom-sby, 
-(lprc->right - lprc->left-sbx), 
sby, PATINVERT );
    PatBlt( hDC, lprc->left, 
lprc->bottom, 
sbx, 
-(lprc->bottom - lprc->top-sby), PATINVERT );
    DeleteDC( hDC );
}
static RECT rect;//记录画虚线框的矩形位置
在mousemove事件中:

  int w,h;
  RECT re;
                              POINT p;
                              DrawUIBorder(&rect);//清除上一次的虚线
                               GetCursorPos(&p);
                              ...根据p来设定你要画的新的虚线框的矩形位置rect
           DrawUIBorder(&rect);//画这一次的虚线框
在mouseup事件中:
                DrawUIBorder(&rect);//清除上一次的虚线
                movewindow(....);//移动窗体
             
void __fastcall TForm1::Label1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
   //if the user is holding the left mouse button down -- move
   if( Shift.Contains( ssLeft ) )
   {
       ReleaseCapture();
       SendMessage(Handle,0xA1,2,0);
   }
   //if the user is holding the right mouse button down -- popup menu
   if( Shift.Contains( ssRight ) )
   {
       PopupMenu1->Popup(X+ Left,Y+ Top);
    }

}
学习
iPad如何在三年内改变世界 划时代的成果:新DNA存储技术 轻而易举装下世界 谷歌产品设计:Larry Page的魅力革命 开源移动统计工具Countly更新 支持Unity 3D DailyCost传奇设计师访谈,彰显HTML5移动应用优势 如何成为一名架构师? Apache Hadoop集群的安全性架构 Wood Camera开发者访谈:我们如何冲到榜首的 代码审查:程序员内炼之道 Twitter Q1推广告API 收入剑指10亿 Dell:在OpenStack成熟后才会推出服务 一个开源工作者对开源与赚钱的一些想法 宏碁:Windows8仍不成功 Chrome表现令人意外 雅虎发布Q4财报 净利润同比下滑8% 游戏机禁售令起风波,索尼任天堂股价大涨 国外开发者吐槽Facebook Android设计一例 Rovio转向发行业务 将发布新作Tiny Thief 上山下海 “硬汉”服务器无所不能 访金山云CTO杨刚:开源改进PK自主研发,技术驱动前行 苹果涉及色情问题,且进一步恶化 开源产品系列:面向组件的Web框架tapestry 360指责百度窃取用户信息 公布美杜莎插件技术分析 苹果正式发布iOS 6.1 最快本周日即可越狱 苹果高管:运行iOS 6的设备达3亿 Chrome OS 黑客大赛总奖金为314.159万美元 微软雷德蒙研究院副总裁:从计算研究到惊人发明 还驾驭不了4核? 别人已模拟出百万核心上的并行 RIM将网络直播BlackBerry 10发布会 解读TDD的五大误区 Amazon 2012财年Q4财报:电子书业务增长70% 从暴风影音CTO到创业者:画中画相机话中话 并非复古——关于微内核模式ASP开发框架的讨论,欢迎高手进入! 那有BOCHS的中文帮助 我愿送500分求解JAVA问题!!!!!! 关于frame里面的参数传递问题,火急 find函数的问题,请各位老兄帮忙 请问这个链接怎么写? 用xsl将xml转成html提示.... 为什么看不到邻近计算机? 关于浏览器的自定义工具栏! 无法打开web项目bbs 请告知可以下载Domino数据库安装文件和Lotus Notes的网址!在线等 我的ie6无法加载applet,请教解决方法! 如何用ASP写关闭当前窗体的代码? 用xsl将xml转成html提示.... sqlserver数据库怎么和应用程序一起打包? 一个困惑的问题,高手和有耐心的人请进! 实现要求是:对一个用来保存文件的richtext域如何创建一个代理,以实现每天固定一个时间从服务器/本地的一个固定目录下获取一个更新的文 关于数据库导入导出的问题 请问:提交表单后,把参数传到一个新弹出的页面,要求此页面没有“标准按钮”“工具栏”“地址栏”而且固定窗口大小,且不能最大化,如何 求助于高手:Tab Control控件如何使用? 组件通过鼠标移动 求助 sniffer 紧急!帮忙啊!如何获得使用<div class="test" id="mydiv"> ...</div>定义的对象 哪儿找ORACLE8i 9i for x86solaris? 在IIS中,url转发如何隐藏真实地址? 原来对应Access数据库的水晶报表现在如何转换成对应sql server 的?Access数据库已经转换成Sql server的 找到了工作,不过得告别DELPHI一段时间了本来想在非技术区发这个,但是我在这里得到的帮助最多所以...... 在web页面中如何使用脚本判断当前是否有键被按下? 哈希表 访问CLOB字段问题 下拉列表的查询 一台电脑安装的winxp系统,当我打开“任务管理器”时,只显示所调用的进程及结束进程的按钮,其它的应用程序及性能界面都不能出现,最上 Repeater模板列:如何在返回字段长度过长时,将其截短 谁能帮我做一个祝贺教师节日的卡通图片 intaweb 的session 超时错误捕捉问题 大家帮忙看一下C++primer上面的这个程序: 简单SQL命令问题。。。。 蓝天,ChangeCell事件在WIN2000下正常,在WIN98下出现非法操作错误??? 请问:使用database对象打开有密码的Access数据库问题? 各位高手,请进来看看吧!关于dbexpress的问题 请各位XDJM帮我想个书店的名字,是我弟弟要在我们县开个主要经营考试图书的书店,请大家想个名字,不胜感激 知道PHP的crypt()生成的密文,如果用JAVA校验明文是否正确? 如何分割图片? 关于一个窗体事件的小问题,分不多,100而已 无法备份数据库???事不是我做这个操作弄坏数据库了?? office xp只装frontpage,在打开frontpage 时有总有错误的问题? 有关图标文件的问题!急,在线等待 JTree用加减号来展开和收缩子节点,如何实现? 请问怎么把两个表中的数据连在一块输出 JTree用加减号来展开和收缩子节点,如何实现? 急!有关页面间保留值的问题 作文 春游前的喜悦跪求!求求哥哥姐姐,说下! 作文 春游前的喜悦复制的别来!复制的别回答! 这个第二题怎么裂项 解出来结果 用电子打火机里面的打电器可不可以使二极管或其他一些灯泡之类的!使他们发光或一闪一闪的也行?求专家回答!电压高可以在中间加电阻吗?没有回路接地可以吗?我只是想让它亮起来! 受人尊敬的有哲理的故事RT,需要一些故事,不能太长,像一些寓言啦什么的~ 哲理小故事 郗这个字在姓氏里读什么? 小功率开关三极管用什么?要求输出电压最大4V,我负载是带发光二极管的,灯不要串联要并联 世界上有不长眼睛的动物吗? 什么动物走路不长眼 走路不长眼的是什么动物 韩国附近海域沉船事故一名中国籍船员遗俄否认G20礼品中安窃听器 称报道意埃及穆兄会二把手被捕 穆尔西等高层将美媒:美国难以在国际舞台既当演员又做菲人质事件在港谈判分歧收窄 同意继续泰部署5000警察应对民主党发起反特韩国海域沉船事故一失踪中国籍船员遗体记者手记:罗汉松——日本苗木之乡的摇中国帮助我们圆了“公路梦”格外交部:俄未被列入总统就职典礼受邀泰部署5000警察应对民主党发起反特爱德华·蒙克失窃杰作追回 两名涉案嫌趣图:说多了都是泪……面向对象:我走了那么远的路,百转千回10倍效率的程序员的好习惯,你有几个第六期容艺大师班喊你来上课啦!30部电影、29部电视+网剧,从数据【干货】陶闯:我们已经没机会超过日本【姿势】周鸿祎:很多人创业,只是因为【大声】百度女CFO谈\"她\"时代久旱逢甘霖!一个字,干!两个字,进攻买房值还是租房值?你适合买房还是租房
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘