首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在MFC中响应WM_MOUSEWHEEL消息和滚动窗口?(Vs2012)

在MFC中响应WM_MOUSEWHEEL消息和滚动窗口,可以按照以下步骤进行操作:

  1. 创建一个MFC应用程序项目,并在资源视图中添加一个滚动条控件。afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);ON_WM_MOUSEWHEEL()然后在CMyDialog类的实现文件中添加以下代码:BOOL CMyDialog::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { // 获取滚动条控件的当前位置 int nPos = GetScrollPos(SB_VERT); // 根据滚轮滚动的距离,调整滚动条位置 nPos -= zDelta / WHEEL_DELTA; // 设置滚动条控件的新位置 SetScrollPos(SB_VERT, nPos); // 更新窗口显示 UpdateWindow(); return TRUE; }BOOL CMyDialog::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置滚动条控件的范围和页面大小 SCROLLINFO si; si.cbSize = sizeof(SCROLLINFO); si.fMask = SIF_ALL; si.nMin = 0; si.nMax = 100; // 设置滚动条的最大值 si.nPage = 10; // 设置滚动条的页面大小 SetScrollInfo(SB_VERT, &si); return TRUE; }这样,在MFC应用程序中就可以响应WM_MOUSEWHEEL消息并实现滚动窗口的功能了。
  2. 在对话框类的头文件中添加消息映射函数声明,以响应WM_MOUSEWHEEL消息。例如,在CMyDialog类中添加以下声明:
  3. 在对话框类的源文件中添加消息映射函数的实现。在CMyDialog类的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加以下代码:
  4. 在OnInitDialog函数中,为滚动条控件设置范围和页面大小。例如:

关于MFC中响应WM_MOUSEWHEEL消息和滚动窗口的更详细的信息,您可以参考腾讯云的文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

问题探讨01: 如何使用鼠标滚轮使单元格的数值增减?

图1 我想要的是,当鼠标滚轮向前滚动时,单元格的数值增加0.01,向后滚动时,减少0.01。...于是,继续上网搜索资料,终于查到一段: 我们知道VB应用程序响应的Windows传来的消息,需要通过VB解释。...可是很不幸,虽然VB解释所有的消息,却只让用户程序在事件处理部分消息,VB自己处理其他的消息,或者忽略这些消息。...这样我们就可以在VB应用程序编写自己的窗口处理函数,通过AddressOf 运算符将在VB定义的窗口地址传递给窗口处理函数,从而绕过VB的解释器,自己处理消息。...事实上,该方法可用于在VB处理任何消息。 实现应用程序支持鼠标滚轮的关键是,捕获鼠标滚轮的消息 MSH_MOUSEWHEEL、WM_MOUSEWHEEL

1.8K10

VC2008如何为MFC应用程序添加删除消息响应函数

VC2008下添加删除常见的消息响应函数有两种方法:自动手动。     ...一、VC2008自动添加消息响应函数       举一个《MFC Windows应用程序设计》的MFC单文档应用程序的例子,如下:        例4-9  设计一个利用CClientDC绘图,在窗口单击鼠标左键之后...二、VC2008手动添加或删除消息响应函数             可以参照CSDN博主kivcare这篇博客:Vc2008如何为视图类添加消息响应,他的方法是手动添加消息响应函数,删除的话就是逆过程了...手动删除消息响应函数需要删掉三个地方,以删除菜单响应函数为例时包括以下三个部分:             1、头文件的定义,afx_msg void OnDialogModel();            ...2、源文件消息响应:ON_COMMAND(ID_DIALOG_MODEL, &CMyboleView::OnDialogModel)             3、源文件具体的函数体,例如void

1.8K20

什么是WPF_windows程序设计教程

windows的消息具有以下两个参数: (1)字参数(wParam) (2)长参数(lParam)   字参数长参数都是32位整数,用于提供消息的附带消息,是消息传递过程参数的载体。...2 滚动条WM_VSCROLL或WM_HSCROLL消息,LOWORD(wParam)指出了鼠标对滚动条的操作。比如上、下、左、右、翻页、移动等。...7 鼠标轮滚动消息WM_MOUSEWHEEL消息,lParam将获得鼠标的屏幕位置(坐标),wParam参数的低位表明鼠标键Shift与Ctrl键的状态。...比如,对按键消息来说,鼠标的XY的坐标被压缩进lParamMFC来说,消息可以用多样的类型参数来传递,对用户自定义消息 来说,只能用wParamlParam来传递。...lParam 通常是一个指向内存数据的指针。 由于wParam,lParam指针都是32位的,需要时可以强制类型转换。具体表示什么,与message相关,他们是事先定义好的。

59320

2022.6.9日报:正确处理webbrowser控件的键盘消息

); 照做了以后,发现某些网页的textarea,例如Javascript在线解压缩 - 在线工具​​​​​​ 按向下键,光标会下移动两行… 于是我用SetWindowLongPtr,hook了ie的窗口消息响应函数...这样做了以后,光标确实不会移动两行,但向下键也不会让页面滚动了。 这块把我卡住很久,甚至还翻了IE源码看了看。最后,我发现mfc里的chtmlview,居然是能正确处理这个问题的。...最后,无意中,我发现MFC里这句话:  没错,这里也是把先把消息派发给TranslateAccelerator。但原来这里是要判断返回值的。...也就是说,我刚才没判断返回值,所以TranslateAccelerator处理完后又给IE窗口消息函数了。导致光标被移动了两次。...翻了下ie6源码,我发现TranslateAccelerator里面会处理光标移动,但也会处理页面滚动。我猜测是IE高版本的TranslateAcceleratorie6的逻辑不一样。

38020

钩子原理及实例:实现键盘钩子截获密码

钩子的种类很多,每种钩子可以截获并处理相应的消息键盘钩子可以截获键盘消息,外壳钩子可以截取、启动关闭应用程序的消息等。...计算机的所有输入设备由 Windows 监控,当一个事件发生时,Windows 先将输入的消息放入系统消息队列,然后再将输入的消息拷贝到相应的应用程序队列,应用程序消息循环从它的消息队列检索每一个消息并发送给相应的窗口函数...这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息[传递到钩子链表的下一个钩子或应用程序目的窗口],还可以强制结束消息的传递。...使我们可以监视菜单,滚动条,消息框等 常见分类: 全局钩子进程钩子 由安装钩子的函数SetWindowsHookEx(int idHook,HOOKPROC lpfn,HINSTANCE hMod...VC6MFC DLL的分类及特点 在VC6有三种形式的MFC DLL(在该DLL可以使用继承已有的MFC类)可供选择,即Regular statically linked to MFC

1.8K20

图像处理程序框架—MFC相关知识点

MFCOnDraw与OnPaint的区别 : OnPaint是WM_PAINT消息消息处理函数,在OnPaint调用OnDraw,一般来说,用户自己的绘图代码应放在OnDraw。 ...MFC提供了CPaintDC类CWindwoDC类来实时的响应,而CPaintDC支持重画。当视图变得无效时(包括大小的改变,移动,被遮盖等等),Windows 将 WM_PAINT 消息发送给它。...类响应了WM_PAINT消息,不显式地调用OnDraw函数的话,是不会在窗口重绘的时候调用OnDraw函数的。 ...当没有添加WM_PAINT消息处理时,窗口重绘时,由OnDraw来进行消息响应...当添加WM_PAINT消息处理时,窗口重绘时,WM_PAINT消息被投递,由OnPaint来进行消息响应.这时就不能隐式调用...隐式调用:当由OnPaint来进行消息响应时,系统自动调用CView::OnDraw(&pDC).  想象一下,窗口显示的内容打印的内容是差不多的,所以,一般情况下,统一由OnDraw来画。

1.4K20

Windows SDK编程基本框架

这种编程具有更加灵活强大的控制,能实现一些MFC不易实现甚至难以实现的功能。...hbrBackground:窗口的背景画刷。Windows预定义了一些纯色画刷,COLOR_GRAYTEXT、COLOR_BACKGROUND、COLOR_ACTIVECAPTION等等。...dwStyle:窗口风格,比如是否有边框、标题框、子窗口、水平垂直滚动条、弹出、重叠性等,具体看MSDN,很多特殊效果都是用这个风格指定的,比如类似迅雷的悬浮窗等。...x,y, nWidth, nHeight:指定窗口相对于父窗口的位置宽高。 hWndParent:指定父窗口句柄,如果该窗口没有父窗口,则为NULL,比如应用程序主窗口。 hMenu:菜单句柄。...,然后翻译虚拟按键成字符消息,并派送到窗口消息队列,等待消息处理函数处理。

1.6K130

锁定屏幕相关知识「建议收藏」

钩子可以监视系统或进程的各种事件消息,截获发往目标窗口消息并进行处理。...( 4 ) 日志钩子可以记录从系统消息队列取出的各种事件消息。   ( 5 ) 窗口过程钩子监视所有从系统消息队列发往目标窗口消息。   ...滚动条,消息框,对话框消息并且发现用户使用 ALT+TAB or ALT+ESC 组合键切换窗口。...WH_MSGFILTER Hook 只能监视传递到菜单,滚动条,消息框的消息,以及传递到通过安装了 Hook 子程的应用程序建立的对话框的消息。...在 VC6 中有三种形式的 MFC DLL (在该 DLL 可以使用继承已有的 MFC 类 ) 可供选择,即 Regular statically linked to MFC DLL (标准静态链接

1.1K10

12.1 使用键盘鼠标监控钩子

本节将介绍如何使用Windows API的SetWindowsHookExRegisterHotKey函数来实现键盘鼠标的监控。...当热键被按下时,系统会自动将一个WM_HOTKEY消息发送给注册了该热键的窗口,应用程序需要重载该窗口消息处理函数来响应该事件,从而实现相应的响应操作。...当热键被注册后则就需要接收热键消息,通常可以使用GetMessage函数,该函数用于从消息队列获取一个消息并将其存储在一个结构体,通常用于在一个循环中不断地获取消息,从而实现对Windows消息的处理...hWnd:消息接收者的窗口句柄,通常设置为NULL,表示接收所有窗口消息wMsgFilterMin:指定获取消息的最小消息值,通常设置为0wMsgFilterMax:指定获取消息的最大消息值,通常设置为...) { info = "鼠标 [滚轮] 滚动"; } ZeroMemory(text, sizeof(text)); ZeroMemory(pData, sizeof(

30230

MFC编程入门之五(MFC消息映射机制概述)

MFC软件开发,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作。 比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口消息处理函数处理,对用户的操作做出响应。...MFC使用一种消息映射机制来处理消息,在应用程序框架的表现就是一个消息消息处理函数一一对应的消息映射 表,以及消息处理函数的声明实现等代码。...当窗口接收到消息时,会到消息映射表查找该消息对应的消息处理函数, 然后由消息处理函数进行相应的处理。 三、Windows消息分类    Windows消息分为系统消息用户自定义消息。...通知消息一般由列表框等子窗口发送给父窗口消息名称也是WM_COMMAND,其中附带了控件通知码 来区分控件。    CWnd的派生类都可以接收到标准Windows消息、通知消息命令消息。...,:#define WM_UPDATE_WND(WM_USER+1),再到消息映射表添加消息映射入口项:   ON_MESSAGE(WM_UPDATE_WND, &CMainFrame::OnUpdateWnd

1.7K10

win 消息

,通过响应这条 消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本背景颜色 /// WM_CTLCOLORMSGBOX...= 0x0132, /// /// 当一个编辑型控件将要被绘制时发送此消息给它的父窗口:通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本背景颜色..., /// /// 当一个按钮控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者 窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本背景颜色...0x0136, /// /// 当一个滚动条控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息, 所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色...;通过响应这条消息,所 有者窗口可以通过使用给定的相关显示设备的句柄来设置静态控件的文本背景颜色 /// WM_CTLCOLORSTATIC

1K10

win 消息

,通过响应这条 消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本背景颜色 /// WM_CTLCOLORMSGBOX...= 0x0132, /// /// 当一个编辑型控件将要被绘制时发送此消息给它的父窗口:通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本背景颜色..., /// /// 当一个按钮控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息,所有者 窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本背景颜色...0x0136, /// /// 当一个滚动条控件将要被绘制时发送此消息给它的父窗口;通过响应这条消息, 所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色...;通过响应这条消息,所 有者窗口可以通过使用给定的相关显示设备的句柄来设置静态控件的文本背景颜色 /// WM_CTLCOLORSTATIC

44800

(以MFC框架讲解)

二丶通过MFC但文档,理解其设计方式. 因为是第一讲,所以从头讲起. MFC单文档框架其底层是封装的SDK的消息循环 首先我们要实现自己的框架,就要封装类了.怎么封装,或者说哪里比较困难? 1....从最基础的框架看起,只有一个三个类 1.公共父类CObject   2.消息处理类,CcmdTarGet  响应消息   2.1 CWinThread    消息处理   2.2 CWinApp    ...MFC但文档的框架 1.封装WinMain 2.自己的WMain执行初始化代码.初始化用户的全局对象 因为我们显示窗口或者注册窗口的时候,需要调用用户的InitInstance进行初始化....现在我们的工程已经支持显示一个窗口了.但是并没有消息循环. 4.添加消息循环,响应消息 消息循环我们要添加到我们自己封装的Wmain,当执行用户的Inininstance成功创建窗口的时候....此时就该进行消息循环了. 4.1添加虚函数在消息.并实现 4,2 自己封装的wmain进行调用. 我们最基础的框架已经搭建完成.

1.5K110

C#_FindWindow

= 0x121; //在windows绘制消息框前发送此消息消息框的所有者窗口,通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置消息框的文本背景颜色...const int WM_CTLCOLORMSGBOX = 0x132; //当一个编辑型控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置编辑框的文本背景颜色...const int WM_CTLCOLOREDIT = 0x133; //当一个列表框控件将要被绘制前发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置列表框的文本背景颜色...const int WM_CTLCOLORLISTBOX = 0x134; //当一个按钮控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置按纽的文本背景颜色...const int WM_CTLCOLORDLG = 0x136; //当一个滚动条控件将要被绘制时发送此消息给它的父窗口通过响应这条消息,所有者窗口可以通过使用给定的相关显示设备的句柄来设置滚动条的背景颜色

77340

让页面滑动流畅得飞起的新特性:Passive Event Listeners

在Chrome,绘制分为两部分实现:绘制操作记录部分(main-thread side)绘制实现部分(impl-side)。...对于第2个问题,由于内核线程负责的工作太多,这将导致内核线程经常处于忙碌状态,无法快速处理外界的输入消息,表现为用户操作了页面,但是无法立即得到响应。...这种场景下,由于没有涉及到内核线程处理,用户的输入响应会非常及时。 在Chrome,用户的输入事件主要分为两大类:普通输入事件手势输入事件。...这种场景下,实际上是场景2场景3的组合,两个场景是并行处理的,因此用户的MouseWheel输入事件能会被立刻响应,也不会受到内核线程的事件监听器处理逻辑影响。...对于场景1场景3的滑动,在Chrome称为fast scroll模式,而场景2则称为slow scroll模式。

1.3K70

让页面滑动流畅得飞起的新特性:Passive Event Listeners

在Chrome,绘制分为两部分实现:绘制操作记录部分(main-thread side)绘制实现部分(impl-side)。...; 合成线程(Compositor Thread):负责图像合成的线程,绘制(impl-side),合成等逻辑在该线程执行。...对于第2个问题,由于内核线程负责的工作太多,这将导致内核线程经常处于忙碌状态,无法快速处理外界的输入消息,表现为用户操作了页面,但是无法立即得到响应。...这种场景下,实际上是场景2场景3的组合,两个场景是并行处理的,因此用户的MouseWheel输入事件能会被立刻响应,也不会受到内核线程的事件监听器处理逻辑影响。...对于场景1场景3的滑动,在Chrome称为fast scroll模式,而场景2则称为slow scroll模式。

9K00

12.1 使用键盘鼠标监控钩子

本节将介绍如何使用Windows API的SetWindowsHookExRegisterHotKey函数来实现键盘鼠标的监控。...首先我们来实现注册热键功能,注册热键可以使用RegisterHotKey()函数,该函数可以将一个热键与当前应用程序或线程绑定,使得当用户按下热键时,系统会自动将该热键的消息发送到该应用程序或线程,该函数原型如下...当热键被按下时,系统会自动将一个WM_HOTKEY消息发送给注册了该热键的窗口,应用程序需要重载该窗口消息处理函数来响应该事件,从而实现相应的响应操作。...当热键被注册后则就需要接收热键消息,通常可以使用GetMessage函数,该函数用于从消息队列获取一个消息并将其存储在一个结构体,通常用于在一个循环中不断地获取消息,从而实现对Windows消息的处理...hWnd:消息接收者的窗口句柄,通常设置为NULL,表示接收所有窗口消息 wMsgFilterMin:指定获取消息的最小消息值,通常设置为0 wMsgFilterMax:指定获取消息的最大消息值,通常设置为

27120

基于消息的事件驱动机制(Message Based, Event Driven)

模型在MFC程序的应用 MFC(Microsoft Foundation Classes)是微软的基础类库,对大部分的Windows API进行封装,同时也是桌面软件的UI开发框架,下图是一个用VS2019...不过现在MFC已经没落,除了历史项目,已经很少有新项目,采用MFC。下文会基于鼠标点击后完整的系统响应过程,说明该模型在MFC的体现。 ?...DispatchMessage 派发消息、找到消息对应的窗口、调用响应函数 2.6 消息队列 (1)系统消息队列:这是系统唯一队列,设备驱动把用户的操作输入转化成消息存放于系统队列,然后系统会把此消息放到目标窗口所在的线程消息队列中等待处理...常用的调试工具SPY++,就是利用HOOK机制截获窗口消息。 此处只做介绍,不做详细深入。 2.8 模态对话框非模态对话框的区别 模态对话框:在子界面活动期间,父窗口是无法进行消息响应。...独占用户输入 非模态对话框:各窗口之间不影响。 模态对话框通过在消息循环内再造消息循环。如果当前窗口内的消息循环不退出,父窗口消息循环将无法运转,也即无法响应。从而产生模态对话框独占响应的效果。

2.3K20
领券