在对话框上拖动按钮并移动该按钮(改写CXXButton::PreTranslateMessage,然后MoveWindow)

[cpp] view plain copy

  1. // 派生自CButton类,主要过滤WM_LBUTTONDOWN 、WM_LBUTTONUP和WM_MOUSEMOVE消息。
  2. BOOL m_bFlag = FALSE; // 成员变量,用来标示鼠标是否按下, 初始化为FALSE
  3. CPoint m_pt; // 成员变量,用来保存当前坐标值
  4. BOOL CXXButton::PreTranslateMessage(MSG* pMsg)
  5. {
  6. // TODO: Add your specialized code here and/or call the base class
  7. switch(pMsg->message)
  8. {
  9. case WM_LBUTTONDOWN:
  10. {
  11. m_pt = pMsg->pt;
  12. m_bFlag = TRUE;
  13. }
  14. break;
  15. case WM_LBUTTONUP:
  16. {
  17. m_bFlag = FALSE;
  18. }
  19. break;
  20. case WM_MOUSEMOVE:
  21. {
  22. if(m_bFlag)
  23. {
  24. int cx = pMsg->pt.x - m_pt.x;
  25. int cy = pMsg->pt.y - m_pt.y;
  26. CRect rc;
  27. GetWindowRect(&rc);
  28. GetParent()->ScreenToClient(&rc);
  29. int nWidth = rc.Width();
  30. int nHeight = rc.Height();
  31. rc.left += cx;
  32. rc.top += cy;
  33. rc.right = rc.left + nWidth;
  34. rc.bottom = rc.top + nHeight;
  35. MoveWindow(rc);
  36. m_pt = pMsg->pt;
  37. }
  38. }
  39. break;
  40. default:
  41. break;
  42. }
  43. return CButton::PreTranslateMessage(pMsg);
  44. }

http://blog.csdn.net/visualeleven/article/details/7177775

时间: 2024-08-07 04:29:04

在对话框上拖动按钮并移动该按钮(改写CXXButton::PreTranslateMessage,然后MoveWindow)的相关文章

Android——点击对话框上按钮不关闭对话框

有时候我没可能需要在点击按钮进行一些检测,但是并不想关闭次对话框(系统默认点击任何一个按钮则关闭对话框),处理方法如下:在点击事件下添加如下代码: Java代码   try { Field field = dialog.getClass() .getSuperclass().getDeclaredField( "mShowing"); field.setAccessible(true); // 将mShowing变量设为false,表示对话框已关闭 field.set(dialog, 

QGis、Qt对话框上的OK、Open、Cancel、Help等英文翻译

成功编译qgis,启动程序发现对话框上的OK.Open.Cancel.Help等依然是英文字段,然后查找源码看这些字段是否都添加到了语言翻译包中: 最后发现这些按钮都是qt的QTGui4库中的QDialogButtonBox类,而qgis_zh_CN.qm文件中也确实未搜索到这些英文(利用qt的linguist.exe翻译程序打开搜索) 为了解决这个问题,我最开始考虑,难道到编译qt项目解决,下载qt源码,查找后发现这些英文都已经添加到了翻译中,而且qgis本身也是依赖qt的,使用的都是统一种方

对话框上动态控件的创建、在Picture Control控件上显示图片

1  MFC对话框之上的动态控件的创建 对话框上的控件是MFC类的一个具体对象. 当在对话框之上使用静态控件时,可以根据类向导来为每个控件添加消息.响应函数以及变量. 当需要在对话框中动态的创建某个控件时,就需要手动来代替类向导为动态控件添加消息.响应函数及变量. 动态创建控件时,可按照以下步骤进行: (1) 明确控件所属于的类 每一个控件都对应着一个类(例如按钮Button所属于的类为CButton). 如,在程序中我们需要用CButton类创建一个具体的按钮对象,并用函数指示它在对话框之上的

Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭

AlertDialog.Builder builder = new Builder(this); builder.create().show(); 这样显示出来的对话框,当用户按返回键或搜索键时,这个对话框也能关闭. 怎样才能实现一个类似在windows系统上的对话框,必须点对话框上的按钮后,才能关闭这个对话框. 下面是具体代码: AlertDialog.Builder builder = new Builder(this);  builder.setMessage(msg);  builder

自己写的一个函数,用来自动连接对话框上的两个控件(画线)

void CGasBagCDlg::Linetwoctrl(CPaintDC *dc,int leftid,int rightid,CGasBagCDlg *phd) { //201506161749中北大学韩晓东编制 //功能:可在onpaint中调用,连接两个控件 //参数说明:参数1:onpaint画笔,参数二:控件1ID,参数三:控件2ID,参数四:当前窗口指针 //编写中的问题:参一是MFC的类对象指针,传递MFC类对象只能以指针或引用方式传递,参四可通过this指针获取上下文 //指

关于上一篇鼠标移到按钮时的“按下”效果的三种方法

上一篇博文中,关于按钮按下的效果回过头研究了下,总结了如下三种方法,只写出关键样式: 1.相对定位 1 input.button{ 2 3 position:relative; //用相对定位 4 } 5 6 input.button:hover{ 7 top:2px;//鼠标移动到此top增加2px 8 } 2.主要利用外边距这个属性,鼠标移动到按钮位置时,按钮上外边距增加2px,下外边距减少2px(相当于走出去2px又退回来2px),就可以达到按下效果,如果只是单独写margin-top:2

MFC对话框上添加PNG格式的图片的方法

使用CImage类 1.在stdafx.h中加入#include <atlimage.h> 2.在xxxdlg.h中添加CImage m_Img 3.在OnInitDialog中添加m_Img.Load(_T("res\\1.png")); 4.在OnPaint()添加显示png的代码: m_Img.Draw(GetDC()->m_hDC, 0,0); MFC对话框上添加PNG格式的图片的方法

VC++ MFC获取对话框上控件的位置

CRect rect; GetDlgItem(控件ID)->GetWindowRect(&rect);//获取控件的屏幕坐标 ScreenToClient(&rect);//转换为对话框上的客户坐标

VC对话框上添加状态栏

VC在对话框上添加状态栏,没有可视化的控件,要用类来创建. 1.在窗口.h文件中添加成员变量 CStatusCtrl  m_status; 2.在窗口的OnInitDialog函数中添加创建代码: RECT     m_Rect;      GetClientRect(&m_Rect);         //获取对话框的矩形区域   m_Rect.top = m_Rect.bottom-20;    //设置状态栏的矩形区域   m_Status.Create(WS_CHILD|WS_VISIB