VC实现鼠标移动对话框窗口
VC实现鼠标移动对话框窗口

计算机系列教学文档------VC实现鼠标移动对话框窗口
VC实现鼠标移动对话框窗口
本实例主要实现了通过鼠标的移动,来实现窗口的同步移动。
即鼠标左键按下后并对鼠标进行移动,从而窗口跟随鼠标移动,直到鼠标左键抬起,其具体思路是重载“WM_NCHITTEST”消息,在生成的“OnNcHitTest”函数中添加鼠标移动时窗口随之移动的代码,具体实现步骤如下:
在所要移动的窗口类上面,点击鼠标右键,选择“Add Windows Message Handler…”如图所示:
在弹出的窗口中选择“WM_NCHITTEST”消息,如下图所示:
此时双击“WM_NCHITTEST”消息,或点击“AddHandler”接钮,添加到已经存在的消息列表中,如下图所示:
如果“WM_NCHITTEST”消息已经成功加入列已经存在的消息列表中,则点击“Add and Edit”按钮,如下图所示:
此时系统会自动生成对“WM_NCHITTEST”消息的映射函数(函数名为:OnNcHitTest),如下图所示:
最后,在刚刚生成的OnNcHitTest函数中添加窗口的移动代码,代码如下所示:
至此,窗口的移动已经实现。
VC 模拟鼠标和键盘输入

VC 模拟鼠标和键盘输入 - 天下 - 博客频道 -模拟鼠标点击:1、这里是鼠标左键按下和松开两个事件的组合即一次单击:mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )2、模拟鼠标右键单击事件:mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )3、两次连续的鼠标左键单击事件构成一次鼠标双击事件:mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )4、使用绝对坐标MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点--直接设定绝对坐标并单击mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0);mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0);其中X,Y分别是你要点击的点的横坐标和纵坐标模拟键盘输入:[cpp]void EnterString(const char* text) { bool bShift = false; size_t length = strlen(text);for(size_t index = 0;index < length;index++) { int val = text[index];if(val >= 97 && val <= 122) //小写a-z {val -= 32; bShift = false; } else if(val>= 65 && val <= 90) //大写A-Z { bShift = true;} else if(val >= 48 && val <= 57) //数字0-9 { bShift = false; } else //特殊符号{ switch(val) { case '`':val = 192; bShift = false;break; case '~': val = 192;bShift = true; break; case '!':val = '1'; //!和1在同一个键盘,使用同一个键盘码,以下相同bShift = true; break; case '@': val = '2'; //@和2在同一个键盘,使用同一个键盘码,以下相同bShift = true; break; case '#': val = '3'; bShift = true;break; case '$': val = '4';bShift = true; break; case '%':val = '5'; bShift = true;break; case '^': val = '6';bShift = true; break; case '&':val = '7'; bShift = true;break; case '*': val = '8';bShift = true; break; case '(':val = '9'; bShift = true;break; case ')': val = '0';bShift = true; break; case '-':val = 189; bShift = false;break; case '=': val = 187;bShift = false; break; case '_':val = 189; bShift = true;break; case '+': val = 187;bShift = true; break; case '[':val = 219; bShift = false;break; case '{': val = 219;bShift = true; break; case ']':val = 221; bShift = false;break; case '}': val = 221;bShift = true; break; case '\\':val = 220; bShift = false;break; case '|': val = 220;bShift = true; break; case ';':val = 186; bShift = false;break; case ':': val = 186;bShift = true; case '\'': val = 222; bShift = false; break; case'\"': val = 222; bShift = true;break; case ',': val = 188;bShift = false; break; case '<': val = 188; bShift = true;break; case '.': val = 190;bShift = false; break; case '>':val = 190; bShift = true;break; case '/': val = 191;bShift = false; break; case '?':val = 191; bShift = true;break; default: break;} } if(bShift)keybd_event(VK_SHIFT,0,0,0); keybd_event(val,0,0,0);keybd_event(val,0,KEYEVENTF_KEYUP,0); if(bShift)keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); } }但是要注意,如果用户默认是中文输入法,那我们得先想办法切换到英文输入法才行。
(MFC)无标题栏窗口移动方法

移动标准窗口是通过用鼠标单击窗口标题条来实现的,但对于没有标题条的窗口,就需要用鼠标单击窗口标题条以外区域来移动窗口。
有两种方法可以达到这一目标。
方法一:当窗口确定鼠标位置时,Windows向窗口发送WM_NCHITTEST消息,可以处理该消息,使得只要鼠标在窗口内,Windows便认为鼠标在标题条上。
这需要重载CWnd类处理WM_NCHITTEST消息的OnNcHitTest函数,在函数中调用父类的该函数,如果返回HTCLIENT,说明鼠标在窗口客户区内,使重载函数返回HTCAPTION,使Windows误认为鼠标处于标题条上。
下例是使用该方法的实际代码:UINT CEllipseWndDlg::OnNcHitTest(CPoint point){// 取得鼠标所在的窗口区域UINT nHitTest = CDialog::OnNcHitTest(point);// 如果鼠标在窗口客户区,则返回标题条代号给Windows// 使Windows按鼠标在标题条上类进行处理,即可单击移动窗口return (nHitTest==HTCLIENT) ? HTCAPTION : nHitTest;}方法二:当用户在窗口客户区按下鼠标左键时,使Windows认为鼠标是在标题条上,即在处理WM_LBUTTONDOWN消息的处理函数OnLButtonDown中发送一个wParam参数为HTCAPTION,lParam为当前坐标的WM_NCLBUTTONDOWN消息。
下面是使用该方法的实际代码:void CEllipseWndDlg::OnLButtonDown(UINT nFlags, CPoint point){// 调用父类处理函数完成基本操作CDialog::OnLButtonDown(nFlags, point);// 发送WM_NCLBUTTONDOWN消息// 使Windows认为鼠标在标题条上PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y)); //或SendMessage(WM_SYSCOMMAND,0xF012,0); //0xF012 = SC_MOVE | HTCAPTION}首先,看看在正常情况下系统是怎样来移动程序窗口的。
wincc中实现弹窗跟随鼠标功能的具体方法

WinCC鼠标事件实现弹窗跟随鼠标的功能的具体方法在WinCC(Windows Control Center)中实现弹窗跟随鼠标的功能,你需要结合WinCC的脚本功能和C++编程知识。
下面是一个基本的步骤和示例代码,但请注意,实际的操作可能需要根据WinCC的版本和配置进行调整。
1.定义弹窗的位置变量:首先,你需要定义一个变量来存储弹窗的位置。
这个变量应该是一个结构,包含x和y坐标。
2.使用鼠标事件更新位置:当鼠标移动时,触发一个事件或过程,这个事件或过程将更新上述位置变量的值。
3.动态显示弹窗:使用WinCC的脚本功能,根据位置变量的值动态地显示和隐藏弹窗。
以下是一个简化的C++示例代码,演示了如何根据鼠标位置显示一个弹窗:#include "windows.h"#include "mmsystem.h"#include "WinCC.h"// 定义弹窗的位置结构struct PopupPosition {double x;double y;};// 获取当前鼠标位置并更新弹窗位置void UpdatePopupPosition(PopupPosition& popupPos) {POINT cursorPos;GetCursorPos(&cursorPos);popupPos.x = cursorPos.x;popupPos.y = cursorPos.y;}// 显示弹窗函数void ShowPopup() {// 此处应该有显示弹窗的代码,例如使用WinCC的API函数}// 隐藏弹窗函数void HidePopup() {// 此处应该有隐藏弹窗的代码,例如使用WinCC的API函数}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {// 初始化WinCC和相关资源...PopupPosition popupPos;while (true) { // 主循环UpdatePopupPosition(popupPos); // 获取并更新鼠标位置ShowPopup(); // 根据位置显示弹窗Sleep(100); // 休眠一段时间,例如100毫秒,控制更新频率HidePopup(); // 隐藏弹窗}return 0;}这个示例是非常基础的,并且可能需要根据你的具体需求进行调整。
VC++玩转炫酷悬浮窗1---悬浮窗的实现

目标实现像迅雷那样炫酷的悬浮窗。
计划&方案首先第一步要实现一个悬浮窗,窗体无边框,能够随意拖动。
对于一个窗体来说,只有我们把鼠标放到标题栏中才进入到拖拽模式。
由于是无边框的窗体,默认是不能够移动的。
我们尝试用两种办法使其跟随鼠标移动。
一个是用OnNcHitTest函数,另一个是在OnLButtonDown时发消息。
实践一、 OnNcHitTest方案这个CWnd类的一个方法,我们可以捕捉鼠标点击的坐标,然后将其HTCLIENT结果偷换成HTCAPTION,这样就可以让系统误以为鼠标左键点击的是标题栏,就进入了拖拽模式了。
官网参考点这里。
代码十分简单,只需要重载OnNcHitTest就可以。
代码填加三处:1. 头文件afx_msg LRESULT OnNcHitTest(CPoint pt);2. 注册消息BEGIN_MESSAGE_MAP(CAfloatWindowDlg, CDialogEx)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_NCHITTEST()END_MESSAGE_MAP()3. 函数编写LRESULT CAfloatWindowDlg::OnNcHitTest(CPoint pt){LRESULT nHitTest = CDialog::OnNcHitTest(pt);if(nHitTest == HTCLIENT){nHitTest = HTCAPTION;}return nHitTest;}二、 OnLButtonDown方案在程序获得左键按下的状态时,发送以下任一系统消息都可以实现悬浮窗的拖拽。
1.SendMessage(WM_SYSCOMMAND, SC_MOVE | HTCAPTION, 0);2.PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));三、无边框窗体Dialog属性中,将Border的属性设为None。
C语言鼠标操作方法及源码

C语言鼠标操作方法及源码C语言不是直接支持鼠标操作的,因为C语言是一种面向过程的编程语言,主要用于系统级编程和应用程序开发。
而鼠标操作通常是通过操作系统提供的图形界面库来实现的,如Windows中的WinAPI或Linux中的X窗口系统等。
在C语言中,可以使用图形界面库或API来实现鼠标操作。
以下是一个使用WinAPI实现鼠标操作的例子:```c#include <windows.h>LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)switch (uMsg)case WM_MOUSEMOVE:int xPos = LOWORD(lParam);int yPos = HIWORD(lParam);//处理鼠标移动事件printf("鼠标移动到坐标 (%d, %d)\n", xPos, yPos);break;}case WM_LBUTTONDOWN:int xPos = LOWORD(lParam);int yPos = HIWORD(lParam);//处理鼠标左键按下事件printf("鼠标左键按下,坐标 (%d, %d)\n", xPos, yPos); break;}case WM_LBUTTONUP:int xPos = LOWORD(lParam);int yPos = HIWORD(lParam);//处理鼠标左键松开事件printf("鼠标左键松开,坐标 (%d, %d)\n", xPos, yPos); break;}//其他鼠标事件的处理...}return DefWindowProc(hwnd, uMsg, wParam, lParam);int main//创建窗口HWND hwnd;WNDCLASS wc = {0};wc.lpfnWndProc = WindowProc;wc.hInstance = GetModuleHandle(NULL);wc.lpszClassName = TEXT("MyWindowClass");RegisterClass(&wc);hwnd = CreateWindowEx(0, TEXT("MyWindowClass"), TEXT("C语言鼠标操作示例"), WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL,wc.hInstance, NULL);ShowWindow(hwnd, SW_SHOWDEFAULT);}//消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0))TranslateMessage(&msg);DispatchMessage(&msg);}return 0;```以上代码演示了一个简单的C语言程序,通过使用WinAPI,实现了基本的鼠标操作。
VC获取鼠标所在位置窗口

BOOL CTestDlg::PreTranslateMessage(MSG* pMsg) {
if (pMsg->message==WM_MOUSEMOVE) {
CPoint point(LOWORD(pMsg->lParam),HIWORD(pMsg->lParam)); ::ClientToScreen(pMsg->hwnd,&amoint);
} return CDialog::PreTranslateMessage(pMsg); }
vc获取鼠标坐标vc获取鼠标位置vc获取子窗口句柄vc获取窗口大小vc获取窗口宽度vc获取窗口句柄vc获取窗口位置取鼠标所在窗口句柄vc获取系统时间vc获取当前时间
VC获取鼠标所在位置窗口
api
文档
2010
2011-05-06 13:25 1607人阅读 评论(0) 收藏 举报
编 号 : A3GS_TV20100122003
描述: 本文以实例代码的形式讲述了在VC中下实现鼠标所在位置窗口的获取。 例子代码: 请下载本文附带例子代码。 技术实现: 头文件:
#include < winuser.h> 技术说明:
实现本功能主要就是一个WindowFromPoint系统API的调用,本API的详细信息请参见MSDN相关文档。本文 以对话框窗口为例子一说明如果获取当前鼠标所在位置下的窗口信息。实现步骤如下:
1. 编写WM_MOUSEMOVE消息响应函数:
void CTestDlg::OnMouseMove(UINT nFlags, CPoint point) { CWnd * pWnd = WindowFromPoint(point); if (AfxIsValidAddress(pWnd,sizeof(CWnd))) if (::IsChild(m_hWnd,pWnd->m_hWnd)) { CString str; pWnd->GetWindowText(str); SetWindowText(str); } CDialog::OnMouseMove(nFlags, point); }
C#鼠标移动Winform窗体内或者panel容器内的控件显示虚线实现虚线框来确定位置

C#⿏标移动Winform窗体内或者panel容器内的控件显⽰虚线实现虚线框来确定位置C# ⿏标移动WinForm窗体或者panel容器内的控件移动虚线/实现虚线框来确定位置1.⽤到的⽅法介绍今天,根据领导指⽰指导移动容器内的控件,⽣成虚线框,使⽤ControlPaint.DrawReversibleFrame1//2// 摘要:3// 在屏幕上的指定边界内,按指定背景⾊绘制处于指定状态的可逆框架。
4//5// 参数:6// rectangle:7// 代表要绘制矩形的尺⼨的 System.Drawing.Rectangle(采⽤屏幕坐标)。
8//9// backColor:10// 框架的背景的 System.Drawing.Color。
11//12// style:13// System.Windows.Forms.FrameStyle 值之⼀,它指定框架的样式。
14public static void DrawReversibleFrame(Rectangle rectangle, Color backColor, FrameStyle style);2.程序运⾏效果3.代码实现1public Form1()2 {3 InitializeComponent();4 }56private Point downPoint;7private Rectangle downRectangle;8private Rectangle lastRectangle;910private void pictureBox1_MouseDown(object sender, MouseEventArgs e)11 {12if (e.Button != MouseButtons.Left) return;1314 downPoint = e.Location;15 downRectangle =new Rectangle(0, 0, ((Control)sender).Width, pictureBox1.Height);16 downRectangle.Offset(((Control)sender).PointToScreen(new Point(0, 0)));17 ControlPaint.DrawReversibleFrame(downRectangle, Color.White, FrameStyle.Thick);1819 lastRectangle = downRectangle;20 }21private void pictureBox1_MouseMove(object sender, MouseEventArgs e)22 {23if (e.Button != MouseButtons.Left) return;2425 ControlPaint.DrawReversibleFrame(lastRectangle, Color.White, FrameStyle.Thick);2627 Rectangle rectangle = downRectangle;28 rectangle.Offset(e.X - downPoint.X, e.Y - downPoint.Y);29 ControlPaint.DrawReversibleFrame(rectangle, Color.White, FrameStyle.Thick);3031 lastRectangle = rectangle;32 }33private void pictureBox1_MouseUp(object sender, MouseEventArgs e)34 {35if (e.Button != MouseButtons.Left) return;3637 ControlPaint.DrawReversibleFrame(lastRectangle, Color.White, FrameStyle.Thick);3839 pictureBox1.Location = new Point(40 ((Control)sender).Location.X + e.X - downPoint.X,41 ((Control)sender).Location.Y + e.Y - downPoint.Y);42 }4.程序源代码⼯程⽂件下载。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机系列教学文档------VC实现鼠标移动对话框窗口
VC实现鼠标移动对话框窗口
本实例主要实现了通过鼠标的移动,来实现窗口的同步移动。
即鼠标左键按下后并对鼠标进行移动,从而窗口跟随鼠标移动,直到鼠标左键抬起,其具体思路是重载“WM_NCHITTEST”消息,在生成的“OnNcHitTest”函数中添加鼠标移动时窗口随之移动的代码,具体实现步骤如下:
在所要移动的窗口类上面,点击鼠标右键,选择“Add Windows Message Handler…”如图所示:
在弹出的窗口中选择“WM_NCHITTEST”消息,如下图所示:
此时双击“WM_NCHITTEST”消息,或点击“AddHandler”接钮,添加到已经存在的消息列表中,如下图所示:
如果“WM_NCHITTEST”消息已经成功加入列已经存在的消息列表中,则点击“Add and Edit”按钮,如下图所示:
此时系统会自动生成对“WM_NCHITTEST”消息的映射函数(函数名为:OnNcHitTest),如下图所示:
最后,在刚刚生成的OnNcHitTest函数中添加窗口的移动代码,代码如下所示:
至此,窗口的移动已经实现。