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

合集下载

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 模拟鼠标和键盘输入

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)无标题栏窗口移动方法

(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鼠标事件实现弹窗跟随鼠标的功能的具体方法在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---悬浮窗的实现

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语言不是直接支持鼠标操作的,因为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获取鼠标所在位置窗口

VC获取鼠标所在位置窗口
2. 重定PreTranslateMessage函数 在此函数里当我们发现是WM_MOUSEMOVE消息时调用我们上面写的OnMouseMove函数。本函数代 码如下:
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容器内的控件显⽰虚线实现虚线框来确定位置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.程序源代码⼯程⽂件下载。

C#WinForm设置窗口无边框、窗口可移动、窗口显示在屏幕中央、控件去边框

C#WinForm设置窗口无边框、窗口可移动、窗口显示在屏幕中央、控件去边框

C#WinForm设置窗⼝⽆边框、窗⼝可移动、窗⼝显⽰在屏幕中央、控件去边框1)窗⼝去除边框在组件属性中FormBorderStyle设为None2)窗⼝随着⿏标移动⽽动添加引⽤using System.Runtime.InteropServices;在初始化控件{InitializeComponent();}代码后添加1 [DllImport("user32.dll")]2public static extern bool ReleaseCapture();3 [DllImport("user32.dll")]4public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);5bool beginMove = false;//初始化⿏标位置6int currentXPosition;7int currentYPosition;8 //获取⿏标按下时的位置9 private void QRCode_MouseDown(object sender, MouseEventArgs e)10 {11if (e.Button == MouseButtons.Left)12 {13 beginMove = true;14 currentXPosition = MousePosition.X;//⿏标的x坐标为当前窗体左上⾓x坐标15 currentYPosition = MousePosition.Y;//⿏标的y坐标为当前窗体左上⾓y坐标16 }17 }18 //获取⿏标移动到的位置19private void QRCode_MouseMove(object sender, MouseEventArgs e)20 {21if (beginMove)22 {23this.Left += MousePosition.X - currentXPosition;//根据⿏标x坐标确定窗体的左边坐标x24this.Top += MousePosition.Y - currentYPosition;//根据⿏标的y坐标窗体的顶部,即Y坐标25 currentXPosition = MousePosition.X;26 currentYPosition = MousePosition.Y;27 }28 }29 //释放⿏标时的位置30private void QRCode_MouseUp(object sender, MouseEventArgs e)31 {32if (e.Button == MouseButtons.Left)33 {34 currentXPosition = 0; //设置初始状态35 currentYPosition = 0;36 beginMove = false;37 }38 }3)窗⼝居中显⽰利⽤C# Form中的StartPosition属性CenterScreen将界⾯显⽰在屏幕中央若是⽤代码实现,显⽰窗体前,应设置此属性,可在调⽤Show()或是ShowDialog()⽅法之前或在窗体构造函数中设置此属性,不要在load()事件中改变此属性,不起作⽤。

大白话C#--使用C#实现点击窗体任意位置进行拖动的功能

大白话C#--使用C#实现点击窗体任意位置进行拖动的功能

大白话C#—使用C#实现点击窗体任意位置进行拖动的功能大白话系列宗旨:打破自身基础高低的壁垒,用最简单白话的语言,让最低基础的童鞋也能轻松编程。

项目描述:对于一个软件来说,可以随意进行窗口拖动是一个很符合操作感同时也很实用的功能,本项目旨在通过在C#中进行代码添加,从而实现点击窗体任意位置都可以进行窗口拖动的功能。

环境:VS2010详细步骤(完整代码附在文档最后):【完整代码附在文档最后】一、新建C #项目1、找到并打开VS2010软件,新建项目。

2、在弹出的窗口中左侧选择Visual C#下的Windows,然后在右侧选择“Windows窗体应用程序”,然后在下侧修改项目名称。

点击确定,即创建了一个窗体。

二、进入代码编写【完整代码附在文档最后】1、选中窗体,在右侧属性界面处点击下图中“事件”按钮(标志为),里面是窗体的所有可操作事件。

2、在其中找到MouseDown事件,并双击,则跳转到该事件的响应函数代码部分。

如图,此时,代码部分为空。

【完整代码附在文档最后】3、在上述响应函数外新建一个坐标类型(Point类型)的变量offset,之后在响应函数内添加代码,添加完成后如下图:4、同样的方法,找到窗体的MouseMove事件。

在其响应函数内添加代码,添加完成后如下图:【完整代码附在文档最后】5、上述仅实现了窗体的非控件区域自由拖动,下面介绍点击控件区域的自由拖动功能。

(以DataGridView控件为例)首先给窗体添加DataGridView控件,并选中它。

6、按之前的方法,在界面的右侧分别选择控件的MouseDown和MouseMove事件,并添加代码如下:六、代码编写完成,启动调试。

【完整代码附在文档最后】附完整代码:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace Freedom{public partial class Form1 : Form{public Form1(){InitializeComponent();}#region除控件部分的窗体自由拖动代码private Point offset;//定义坐标类型的变量private void Form1_MouseDown(object sender, MouseEventArgs e){if (MouseButtons.Left != e.Button)return;Point cur = this.PointToScreen(e.Location);offset = new Point(cur.X - this.Left, cur.Y - this.Top);}private void Form1_MouseMove(object sender, MouseEventArgs e){if (MouseButtons.Left != e.Button)return;Point cur = MousePosition;this.Location = new Point(cur.X - offset.X, cur.Y - offset.Y);}#endregion#region控件区域的自由拖动代码private Point offset1;//定义坐标类型的变量private void dataGridView1_MouseDown(object sender, MouseEventArgs e) {if (MouseButtons.Left != e.Button)return;Point cur = this.PointToScreen(e.Location);offset1 = new Point(cur.X - this.Left, cur.Y - this.Top);}private void dataGridView1_MouseMove(object sender, MouseEventArgs e) {if (MouseButtons.Left != e.Button)return;Point cur = MousePosition;this.Location = new Point(cur.X - offset1.X, cur.Y - offset1.Y); }#endregion}}。

C#winform自定义控件模拟设计时界面鼠标移动和调节大小、选中效果

C#winform自定义控件模拟设计时界面鼠标移动和调节大小、选中效果

C#winform⾃定义控件模拟设计时界⾯⿏标移动和调节⼤⼩、选中效果要想玩转Winform⾃定义控件需要对GDI+⾮常熟悉,对常⽤的控件有⼀些了解,好选择合适的基类控件来简化。

要点说明及代码1)定义接⼝:using System;using System.Windows.Forms;namespace GDIPrinterDriver{///<summary>///模板元素接⼝///</summary>public interface ILabelDesignElement{///<summary>/// PrintData/codeContext⾥的字段,{} []///</summary>string动态内容 { get; set; }///<summary>///是否被选中///</summary>bool DesignSelected { get; set; }///<summary>///选择状态发⽣改变///</summary>event Action<object, bool> SelectedStatusChange;///<summary>///本控件被选中时键盘⽅向键被按下///</summary>///<param name="keyData"></param>void KeysChangedLocation(Keys keyData);}}2)控件基类实现:using GDIPrinterDriver;using System;using ponentModel;using System.Drawing;using System.Drawing.Drawing2D;using System.Drawing.Imaging;using System.Windows.Forms;namespace GDILabelDesigner{///<summary>///设计时控件基类///</summary>public abstract class DesignCellControl : PictureBox, ILabelDesignElement{#region⿏标移动和缩放private enum EnumMousePointPosition{MouseSizeNone = 0, //'⽆MouseSizeRight = 1, //'拉伸右边框MouseSizeLeft = 2, //'拉伸左边框MouseSizeBottom = 3, //'拉伸下边框MouseSizeTop = 4, //'拉伸上边框MouseSizeTopLeft = 5, //'拉伸左上⾓MouseSizeTopRight = 6, //'拉伸右上⾓MouseSizeBottomLeft = 7, //'拉伸左下⾓MouseSizeBottomRight = 8, //'拉伸右下⾓MouseDrag = 9// '⿏标拖动}const int Band = 5;const int MinWidth = 10;const int MinHeight = 10;private EnumMousePointPosition m_MousePointPosition;private Point p, p1;private EnumMousePointPosition MousePointPosition(Size size, System.Windows.Forms.MouseEventArgs e) {if ((e.X >= -1 * Band) | (e.X <= size.Width) | (e.Y >= -1 * Band) | (e.Y <= size.Height)){if (e.X < Band){if (e.Y < Band) { return EnumMousePointPosition.MouseSizeTopLeft; }else{if (e.Y > -1 * Band + size.Height){ return EnumMousePointPosition.MouseSizeBottomLeft; }else{ return EnumMousePointPosition.MouseSizeLeft; }}}else{if (e.X > -1 * Band + size.Width){if (e.Y < Band){ return EnumMousePointPosition.MouseSizeTopRight; }else{if (e.Y > -1 * Band + size.Height){ return EnumMousePointPosition.MouseSizeBottomRight; }else{ return EnumMousePointPosition.MouseSizeRight; }}}else{if (e.Y < Band){ return EnumMousePointPosition.MouseSizeTop; }else{if (e.Y > -1 * Band + size.Height){ return EnumMousePointPosition.MouseSizeBottom; }else{ return EnumMousePointPosition.MouseDrag; }}}}}else{ return EnumMousePointPosition.MouseSizeNone; }}#endregionpublic bool DesignSelected{get{return designSelected;}set{designSelected = value;Invalidate();}}private bool designSelected = false;public DynamicMapProperty DynamicMapProperty { get; set; }public StaticMapProperty StaticMapProperty { get; set; }public string动态内容 { get; set; }public RoteDescription RoteDescription { get; set; }///<summary>///被选中,获取到焦点的事件///</summary>public event Action<object, bool> SelectedStatusChange;protected override void OnClick(EventArgs e){DesignSelected = true;SelectedStatusChange?.Invoke(this, DesignSelected);}protected override void OnMouseWheel(MouseEventArgs e){base.OnMouseWheel(e);double d = 1.068D;if (e.Delta > 0 && DesignSelected){this.Size = new Size((int)(this.Size.Width * d), (int)(this.Size.Height * d)); }else{this.Size = new Size((int)(this.Size.Width / d), (int)(this.Size.Height / d)); }}protected override void OnMouseDown(MouseEventArgs e){p.X = e.X;p.Y = e.Y;p1.X = e.X;p1.Y = e.Y;}protected override void OnMouseUp(MouseEventArgs e){m_MousePointPosition = EnumMousePointPosition.MouseSizeNone;this.Cursor = Cursors.Arrow;}protected override void OnMouseMove(MouseEventArgs e){if (e.Button == MouseButtons.Left){switch (m_MousePointPosition){#region位置计算case EnumMousePointPosition.MouseDrag:Left = Left + e.X - p.X;Top = Top + e.Y - p.Y;break;case EnumMousePointPosition.MouseSizeBottom:Height = Height + e.Y - p1.Y;p1.X = e.X;p1.Y = e.Y; //'记录光标拖动的当前点break;case EnumMousePointPosition.MouseSizeBottomRight:Width = Width + e.X - p1.X;Height = Height + e.Y - p1.Y;p1.X = e.X;p1.Y = e.Y; //'记录光标拖动的当前点break;case EnumMousePointPosition.MouseSizeRight:Width = Width + e.X - p1.X;Height = Height + e.Y - p1.Y;p1.X = e.X;p1.Y = e.Y; //'记录光标拖动的当前点break;case EnumMousePointPosition.MouseSizeTop:Top = Top + (e.Y - p.Y);Height = Height - (e.Y - p.Y);Left = Left + e.X - p.X;Width = Width - (e.X - p.X);break;case EnumMousePointPosition.MouseSizeBottomLeft: Left = Left + e.X - p.X;Width = Width - (e.X - p.X);Height = Height + e.Y - p1.Y;p1.X = e.X;p1.Y = e.Y; //'记录光标拖动的当前点break;case EnumMousePointPosition.MouseSizeTopRight:Top = Top + (e.Y - p.Y);Width = Width + (e.X - p1.X);Height = Height - (e.Y - p.Y);p1.X = e.X;p1.Y = e.Y; //'记录光标拖动的当前点break;case EnumMousePointPosition.MouseSizeTopLeft:Left = Left + e.X - p.X;Top = Top + (e.Y - p.Y);Width = Width - (e.X - p.X);Height = Height - (e.Y - p.Y);break;default:break;#endregion}if (Width < MinWidth) Width = MinWidth;if (Height < MinHeight) Height = MinHeight;if (Tag != null){if (Tag is ImageElementNode){var tag = Tag as ImageElementNode;tag.Location = Location;}else if (Tag is BarcodeElementNode){var tag = Tag as BarcodeElementNode;tag.Location = Location;}else if (Tag is TextBoxElementNode){var tag = Tag as TextBoxElementNode;tag.Location = Location;}}}else{m_MousePointPosition = MousePointPosition(Size, e);switch (m_MousePointPosition){#region改变光标case EnumMousePointPosition.MouseSizeNone:this.Cursor = Cursors.Arrow; //'箭头break;case EnumMousePointPosition.MouseDrag:this.Cursor = Cursors.SizeAll; //'四⽅向break;case EnumMousePointPosition.MouseSizeBottom:this.Cursor = Cursors.SizeNS; //'南北break;case EnumMousePointPosition.MouseSizeTop:this.Cursor = Cursors.SizeNS; //'南北break;case EnumMousePointPosition.MouseSizeLeft:this.Cursor = Cursors.SizeWE; //'东西break;case EnumMousePointPosition.MouseSizeRight:this.Cursor = Cursors.SizeWE; //'东西break;case EnumMousePointPosition.MouseSizeBottomLeft:this.Cursor = Cursors.SizeNESW; //'东北到南西break;case EnumMousePointPosition.MouseSizeBottomRight:this.Cursor = Cursors.SizeNWSE; //'东南到西北this.Cursor = Cursors.SizeNWSE; //'东南到西北break;case EnumMousePointPosition.MouseSizeTopRight:this.Cursor = Cursors.SizeNESW; //'东北到南西break;default:break;#endregion}}}///<summary>///绘制⽅框///</summary>///<param name="g"></param>protected void DrawSelectedStatus(Graphics g){Rectangle rect = ClientRectangle;rect.Inflate(-6, -6);using (Pen p = new Pen(Brushes.Black, 1)){p.DashStyle = DashStyle.Dot;p.DashStyle = DashStyle.Solid;//8个⽅块g.FillRectangle(Brushes.White, new Rectangle(rect.Left - 4, rect.Top - 4, 4, 4));g.FillRectangle(Brushes.White, new Rectangle(rect.Left + rect.Width / 2 - 3, rect.Top - 4, 4, 4));g.FillRectangle(Brushes.White, new Rectangle(rect.Left + rect.Width, rect.Top - 4, 4, 4));g.FillRectangle(Brushes.White, new Rectangle(rect.Left - 4, rect.Top + rect.Height / 2 - 3, 4, 4));g.FillRectangle(Brushes.White, new Rectangle(rect.Left - 4, rect.Top + rect.Height, 4, 4));g.FillRectangle(Brushes.White, new Rectangle(rect.Left + rect.Width, rect.Top + rect.Height / 2 - 3, 4, 4));g.FillRectangle(Brushes.White, new Rectangle(rect.Left + rect.Width / 2 - 3, rect.Top + rect.Height, 4, 4));g.FillRectangle(Brushes.White, new Rectangle(rect.Left + rect.Width, rect.Top + rect.Height, 4, 4));g.DrawRectangle(p, new Rectangle(rect.Left - 4, rect.Top - 4, 4, 4));g.DrawRectangle(p, new Rectangle(rect.Left + rect.Width / 2 - 3, rect.Top - 4, 4, 4));g.DrawRectangle(p, new Rectangle(rect.Left + rect.Width, rect.Top - 4, 4, 4));g.DrawRectangle(p, new Rectangle(rect.Left - 4, rect.Top + rect.Height / 2 - 3, 4, 4));g.DrawRectangle(p, new Rectangle(rect.Left - 4, rect.Top + rect.Height, 4, 4));g.DrawRectangle(p, new Rectangle(rect.Left + rect.Width, rect.Top + rect.Height / 2 - 3, 4, 4));g.DrawRectangle(p, new Rectangle(rect.Left + rect.Width / 2 - 3, rect.Top + rect.Height, 4, 4));g.DrawRectangle(p, new Rectangle(rect.Left + rect.Width, rect.Top + rect.Height, 4, 4));}}///<summary>///旋转图⽚///</summary>///<param name="bmp">源图</param>///<param name="angle">⾓度</param>///<param name="bkColor">背景⾊</param>///<returns></returns>protected Bitmap ImageRotate(Bitmap bmp, float angle, Color bkColor){int w = bmp.Width + 2;int h = bmp.Height + 2;PixelFormat pf;if (bkColor == Color.Transparent){pf = PixelFormat.Format32bppArgb;}else{pf = bmp.PixelFormat;}Bitmap tmp = new Bitmap(w, h, pf);Graphics g = Graphics.FromImage(tmp);g.Clear(bkColor);g.DrawImageUnscaled(bmp, 1, 1);g.Dispose();GraphicsPath path = new GraphicsPath();path.AddRectangle(new RectangleF(0f, 0f, w, h));Matrix mtrx = new Matrix();mtrx.Rotate(angle);RectangleF rct = path.GetBounds(mtrx);Bitmap dst = new Bitmap((int)rct.Width, (int)rct.Height, pf);g = Graphics.FromImage(dst);g.Clear(bkColor);g.TranslateTransform(-rct.X, -rct.Y);g.RotateTransform(angle);g.InterpolationMode = InterpolationMode.HighQualityBilinear;g.DrawImageUnscaled(tmp, 0, 0);g.Dispose();tmp.Dispose();return dst;}///<summary>///响应键盘光标键///</summary>///<param name="keyData"></param>public virtual void KeysChangedLocation(Keys keyData){if (keyData == Keys.Up){Top -= 1;}if (keyData == Keys.Down){Top += 1;}if (keyData == Keys.Left){Left -= 1;}if (keyData == Keys.Right){Left += 1;}if (Tag != null){if (Tag is ImageElementNode){var tag = Tag as ImageElementNode;tag.Location = Location;}else if (Tag is BarcodeElementNode){var tag = Tag as BarcodeElementNode;tag.Location = Location;}else if (Tag is TextBoxElementNode){var tag = Tag as TextBoxElementNode;tag.Location = Location;}}}}}。

C技巧:VC中对话框上显示信息的方法

C技巧:VC中对话框上显示信息的方法

VC实现对话框上信息的显⽰ 利⽤ VC的AppWizard,可以很容易地实现⼯具条和菜单项的ToolTip,或在状态条上显⽰帮助信息,但要在对话框的控件上显⽰ToolTip和在状态条上显⽰控件信息并不容易实现。

现在,我们⽤VC中的WM_SETCURSOR 与TTN_NEEDTEXT消息就可达到⽬的。

具体操作如下: ⼀、利⽤ VC的 MFC AppWizard ⽣成⼀个 SDI 或 MDI 的应⽤程序 ⼆、编辑对话框控件的字符串资源 例如:IDC_dbBUTTON1 = “This is 肖天鹏的第⼀⾃制按钮天鹏\", 其中字符串“This is肖天鹏的第⼀⾃制按钮“将在⿏标移到控件上时显⽰在状态条上,字符串“天鹏\"将作为 ToolTip 显⽰。

三、建⽴消息映射 在对话框的头⽂件 (*.H) 中 加⼊以下代码: protected: void SetStatusText(UINT nID=0); //{{AFX_MSG(CFileOp1) afx_msg void OnDestroy(); afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); //}}AFX_MSG afx_msg BOOL OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult ); DECLARE_MESSAGE_MAP() 在对话框的实现⽂件 (*.CPP) 中加⼊以下代码: BEGIN_MESSAGE_MAP(CFileOp1, CDialog) //{{AFX_MSG_MAP(CFileOp1) ON_WM_DESTROY() ON_WM_SETCURSOR() //}}AFX_MSG_MAP ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnTipNotvify) END_MESSAGE_MAP() 四、编辑消息处理函数 BOOL CFileOp1::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) {// TODO: Add your message handler code here and/or call default if(pWnd==this) SetStatusText(); else {TOOLTIPTEXT m_psttt; m_psttt.hdr.hwndFrom=m_hWnd; m_psttt.hdr.idFrom=pWnd->GetDlgCtrlID(); m_psttt.hdr.code=TTN_NEEDTEXT; m_psttt.uFlags= TTF_IDISHWND; SetStatusText(pWnd->GetDlgCtrlID()); this->SendMessage(WM_NOTIFY,m_psttt.hdr.idFrom,(LPARAM)&m_psttt); } return CDialog::OnSetCursor(pWnd, nHitTest, message);} void CFileOp1::OnDestroy() {SetStatusText(); CDialog::OnDestroy();} void CFileOp1::SetStatusText(UINT nID) {if(nID==0) nID=AFX_IDS_IDLEMESSAGE; CWnd *pWnd=AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR); if(pWnd) {AfxGetMainWnd()->SendMessage(WM_SETMESS AGESTRING ,nID); pWnd->SendMessage(WM_IDLEUPDATECMDUI); pWnd->UpdateWindow();}} BOOL CFileOp1::OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult ) { TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; UINT nID =pNMHDR->idFrom; if (pTTT->uFlags & TTF_IDISHWND) { nID = ::GetDlgCtrlID((HWND)nID); if (nID) { TCHAR szFullText[256]; CString StrTipText; AfxLoadString(nID,szFullText); AfxExtractSubString(StrTipText,szFullText,1,′′); if(!StrTipText.IsEmpty()) strcpy(pTTT->lpszText,StrTipText); pTTT->hinst = AfxGetResourceHandle(); return(TRUE); } } return(FALSE);} 五、将该对话框作为⼀个 SDI 或 MDI应⽤程序的主框架的⼦窗⼝,⽣成这样⼀个对话框后,当你把⿏标移到某个控件 (必须有相应的字符串资源 )上时,就会出现该控件的 ToolTip和状态条信息。

VC++对话框的应用程序的菜单操作

VC++对话框的应用程序的菜单操作

VC++对话框的应用程序的菜单操作对话框的应用程序的菜单操作一、课程设计的功能:在一个基于对话框的应用程序中增加一个菜单资源,并把它连接到对话框窗口中,运行时显示出来。

完成以后的程序其运行界面如图1所示。

应用程序的标题为Application of Dialog based。

其主窗口中有三个按钮,它们分别为“时间”、“显示”和“退出”,以及两个“文件”和“帮助”的菜单栏。

单击“文件”菜单,出现一个下拉菜单,选择“时间”菜单,可以看到显示当前系统时间的消息框;单击菜单中的“显示”选项,则弹出一个显示基本信息的消息框;选择“退出”菜单,退出本应用程序。

单击相应的按钮完成同样的效果。

若单击“帮助”菜单,出现一个“关于应用程序”菜单项。

图1 Ex4_2程序主窗口二、课程的设计步骤1使用AppWizard创建一个对话框MFC应用程序(2)在Visual C++主菜单栏中选择File菜单中的New选项,打开New对话框。

(3)选择Project标签页,并在该标签页中选择MFC AppWizard应用程序向导,在Project name编辑框中输入工程文件名为Ex4_2,单击“OK”按钮。

(4)在MFC AppWizard-Step1对话框中,选择Dialog based选项,在MFCAppWizard-Step 2 of 4对话框中,在Please enter a title for your dialog 编辑框中给应用程序主窗口标题命名为“Application of Dialog based”。

单击“Finish”完成应用程序框架文件的创建。

2编辑对话框(1)选择项目工作区的ResourceView面板,(2) 切换到资源视图。

展开Dialog对话框资源类型。

双击IDD_EX4_2_DIALOG菜单资(3) 将弹出对话框编辑窗口和一个控件工具栏面板如下图所示。

图2 初始对话框编辑窗口控件工具栏面板列出了VC中所可以建立的控件类型,用户只要把鼠标停在某个控件标识上,可显示该控件的类型提示。

C#模拟鼠标键盘控制其他窗口

C#模拟鼠标键盘控制其他窗口
首先,引入如下三个API接口:
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("User32.dll", EntryPoint = "SendMessage")]
SendMessage(htextbox, WM_SETTEXT, IntPtr.Zero, name);//填写文本框。
SendMessage(hbutton, WM_LBUTTONDOWN, IntPtr.Zero, null);//鼠标按下按钮。
OK,介绍完毕,收工。
SendMessage(hbutton, WM_LBUTTONUP, IntPtr.Zero, null);
这三句是获得了窗口的一个button,然后发送按下,弹起消息给它,模拟了点击鼠标的动作。
SendMessage函数的第一个参数是窗口句柄,或者窗口中控件的句柄,第二个参数是消息的类型Flag,这些值是在API的一些头文件中定义好的。你要是在C#中用,就自己去定义他们,比如
IntPtr htextbox = FindWindowEx(hwnd, IntPtr.Zero, "EDIT", null);
IntPtr htextbox2 = FindWindowEx(hwnd, htextbox, "EDIT", null);//填上次获得的句柄,可以得到下一个的句柄。
第一个与第三个是用于查找窗口句柄的,凡运行于Windows上的窗口,都具有句柄。窗口上的文本框,按钮之类的,也有其句柄(可看作子窗口句柄)。这些句柄的类型可以通过Spy++进行查询。比如C语言编写的程序中,文本框的句柄类型一般为“EDIT”,C#写的程序则不是,可以具体去查。第二个接口则是用于向窗口发送各种消息,比如向文本框发送字符串,或者向按钮发送按下与弹起的消息等。详细解释如下:

vc对话框按位置显示

vc对话框按位置显示

vc 对话框按位置显示vc对话框按位置显示2010-07-11 10:35我在MFC单文档中的菜单上弄了个按钮,目的是按下的时候弹出对话框,已新建了对话框资源(IDD_TextDlg),我用DoModal()显示的时候好象老是居中显示,怎样才能把对话框靠右上角或者其他的位置显示出来呢?方法1.在设计对话框时调出属性窗口去掉里面的居中显示属性把X和Y值设为你想要的坐标方法2.在OnInitDialog事件中调用SetWindowPos函数来设置当前对话框的位置方法3.在OnInitDialog事件中调用MoveWindow函数来设置当前对话框的位置SetWindowPos函数功能:该函数改变一个子窗口,弹出式窗口式顶层窗口的尺寸,位置和Z序。

子窗口,弹出式窗口,及顶层窗口根据它们在屏幕上出现的顺序排序、顶层窗口设置的级别最高,并且被设置为Z序的第一个窗口。

函数原型:BOOL SetWindowPosHWND hWnd,HWND hWndlnsertAfter,int X,int Y,int cx,int cy,UNIT.Flags);hWnd:窗口句柄。

hWndlnsertAfter:在z序中的位于被置位的窗口前的窗口句柄。

该参数必须为一个窗口句柄,或下列值之一:HWND_BOTTOM:将窗口置于Z序的底部。

如果参数hWnd标识了一个顶层窗口,则窗口失去顶级位置,并且被置在其他窗口的底部。

HWND_NOTOPMOST:将窗口置于所有非顶层窗口之上(即在所有顶层窗口之后)。

如果窗口已经是非顶层窗口则该标志不起作用。

HWND_TOP:将窗口置于Z序的顶部。

HWND_TOPMOST:将窗口置于所有非顶层窗口之上。

即使窗口未被激活窗口也将保持顶级位置。

x:以客户坐标指定窗口新位置的左边界。

Y:以客户坐标指定窗口新位置的顶边界。

cx:以像素指定窗口的新的宽度。

cy:以像素指定窗口的新的高度。

uFlags:窗口尺寸和定位的标志。

VC中自动改变控件位置和大小的对话框类

VC中自动改变控件位置和大小的对话框类

VC中自动改变控件位置和大小的对话框类在用VC开发应用程序时,经常会要做一些可以改变大小的对话框,而这个时候就要求对话框上的控件会随着对话框大小的改变而改变自己的位置和大小。

如果控件比较少,那可以在对话框的O nSize()事件里面添加代码,通过计算来调整各个控件的位置和大小;但是,如果对话框上的控件比较多的话,那这将是一件非常痛苦的事情!要是程序中又有很多可以改变大小的对话框,那一个一个的OnSize()写下来,那会使程序员崩溃的!为了解决这个问题,我写了一个自动改变控件位置和大小的对话框类ClxDialog。

从这个类继承的对话框类,只要在OnInitDialog()里对控件做一些简单的设置,对话框上的控件就会随着对话框大小的改变而改变自己的位置和大小(当然,别忘了把对话框的Border属性改为Resizing)。

为了保存控件信息,我定义了一个结构:typedef struct _dlgControlTag{int iId; // 控件IDint iFlag; // 标志,表示怎样改变控件的位置或者大小int iPercent; // 改变值占对话框改变值的百分比} DLGCTLINFO, *PDLGCTLINFO;这里要对结构中的iFlag和iPercent进行一些解释。

其中iFlag是下面的枚举值:enum{MOVEX = 0, // 控件在X方向(左右)移动MOVEY, // 控件在Y方向(上下)移动MOVEXY, // 控件在X方向和Y方向同时移动ELASTICX, // 控件在X方向(宽度)改变大小ELASTICY, // 控件在Y方向改(高度)改变大小ELASTICXY // 控件在X方向和Y方向同时改变大小};iPercent表示改变值占对话框改变值的百分比。

例如,一个控件的iPercent值为100,i Flag值为MOVEX,那么当对话框的宽度改变100个单位的时候,这个控件就在X方向移动100个单位;又如,一个控件的iPercent值为100,iFlag值为ELASTICXY,那么当对话框的宽度和高度分别改变100个单位的时候,控件的高度和宽度也相应的改变100个单位。

VC语言程序设计第4次实验_菜单、工具栏和状态栏

VC语言程序设计第4次实验_菜单、工具栏和状态栏
(6)保留默认的ID号IDC_CURSORI,用图形编辑器绘制光标图形,指定光标热点位置为(15,15)设计的光标如图T12.4所示。
5.工具按钮的更新
工具按钮的更新有如下步骤。
(1)为CMainFrame类添加一个BOOL型的成员变量m_bIsTest,在CMainFrame类构造函数中将m_bIsTest的初值设为FALSE
return TRUE;
}
(5)编译运行,看看主框架窗口的大小是否为屏幕的1/4大小,且移动到屏幕的右上角。
3.添加并设计一个工具按钮
添加并设计一个工具按钮的具体步骤如下。
(1)将项目工作区窗口切换到ResourceView页面,双击“Toolbar”项中的IDR_MAINFRAME,打开工具栏资源。
(2)在字符串列表的最后一行的空项上双击鼠标左键,弹出一个对话框,在该对话框中,指定一个字符串标识符ID_TEST_PANE,设置字符串值为“你在(1024,1024)处双击鼠标”,注意该字符串的字符个数将决定添加的状态栏窗口的大小。添加一个字符串资源的结果如图T12.5所示。
(3)关闭字符串属性对话框。
BOOL CmainFrame::onSetCursor(CWnd*pWnd,UINT nHitTest,UINT message)
{
BOOL bRes=CframeWnd::OnSetCursor(pWnd,nHitTest,message);
if(nHitTest==HTCLENT)&&(m_bIsTest))
Str.Format(“你在(%b,%d)处双击鼠标,”point..x,point.y);//格式化文本
else
Str.EmptyO;//为空字符
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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函数中添加窗口的移动代码,代码如下所示:
至此,窗口的移动已经实现。

相关文档
最新文档