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

WINDOWS核心编程--Windows程序内部运行机制

一个消息一般都与某个窗口相关联,比如鼠标移动到某个窗口中按下鼠标左键,该窗口就会收到一个“WM_LBUTTONDOWND”的消息,而应用程序就是利用消息中的hwnd值来 确定该消息到底是属于众多窗口中的哪一个窗口的...(WM是windows message的缩写),例如 WM_LBUTTONDOWN 消息 按下鼠标左键的消息是 WM_KEYDOWN 消息 表示按下键盘上的某个键等等。...第三个参数:wParam WPARAM类型 根据不同的消息 代表不同的意思:例如 当收到 WM_LBUTTONDOWN 消息时,wParam 鼠标按钮、Shift和Ctrl键的状态。...Instead, use code like this: 在 hWnd 是无效参数的情况下返回值为 -1的可能性(例如引用已经被销毁的窗口)意味着这样的代码可能导致致命的应用程序错误。...字符消息被投递到调用线程的消息队列 调用getMessage的时候被取出 敲击键盘,产生 这两个消息附加参数-----虚拟键代码和扫描码 我们程序中只要得到某个字符的ASCII码 BOOL TranslateMessage

1.5K50

游戏编程之二 windows编程基础

例如,如果将鼠标指针放在边框上并按下鼠标的左键,用户就可以改变窗口的大小。 标题条 应用程序的名字显示在窗口顶部的标题条中。标题条总是在相关窗口顶部的中央。...它很适合用来引起用户的注意,比如在发出错误警告或者是向用户提供选择时。 光标   光标是Windows用来跟踪指点设备的运动的图形符号。这种图形符号可以改变形状以指明特定的Windows操作。...编辑光标与其他屏幕符号显然不同,因为它是闪烁的。多数时候,鼠标输入与光标相连,而键盘输入与编辑光标相连。但是,可以用鼠标来改变编辑光标的输入点。...例如,如果将鼠标指针放在边框上并按下鼠标的左键,用户就可以改变窗口的大小。 标题条 应用程序的名字显示在窗口顶部的标题条中。标题条总是在相关窗口顶部的中央。...编辑光标与其他屏幕符号显然不同,因为它是闪烁的。多数时候,鼠标输入与光标相连,而键盘输入与编辑光标相连。但是,可以用鼠标来改变编辑光标的输入点。

7110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    游戏编程之三 DirectX SDK简介

    动态键接库包括一些预定义的函数,它们可以在一个应用程序被调入时与之键接(动态地),而不是在应用程序被创建时(静态地)。动态键接库使用DLL后缀。...例如,如果将鼠标指针放在边框上并按下鼠标的左键,用户就可以改变窗口的大小。 标题条 应用程序的名字显示在窗口顶部的标题条中。标题条总是在相关窗口顶部的中央。...在控制图标上单击鼠标键会使Windows显示系统菜单。 系统菜单 当用鼠标单击控制图标时就打开了控制菜单。...它很适合用来引起用户的注意,比如在发出错误警告或者是向用户提供选择时。 光标   光标是Windows用来跟踪指点设备的运动的图形符号。...编辑光标   应用程序在窗口中显示编辑光标以告诉用户在哪儿输入。编辑光标与其他屏幕符号显然不同,因为它是闪烁的。多数时候,鼠标输入与光标相连,而键盘输入与编辑光标相连。

    14800

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

    不用做任何开发工作,就可以得到一个自带菜单栏、工具栏、状态栏、属性展示框等丰富的界面框架。不过现在MFC已经没落,除了历史项目,已经很少有新项目,采用MFC。...下文会基于鼠标点击后完整的系统响应过程,说明该模型在MFC中的体现。 ?...2.1 从鼠标点击到响应处理的完整过程 1.用户点击鼠标; 2.鼠标驱动产生鼠标点击消息(通过中断实现),进行系统消息队列; 3.系统消息转换为应用程序消息,放入应用程序队列; 4.消息泵从应用程序消息队列中读取消息...如果当前消息的处理事件过长,会导致后续的消息无法得到及时响应,会导致界面卡顿等非常不佳的用户体验。...3.1 事件类型 1)用户在某个元素上点击鼠标或悬停光标。 2)用户在键盘中按下某个按键。 3)用户调整浏览器的大小或者关闭浏览器窗口。 4)提交表单。

    2.7K20

    CC++ HOOK 全局 API

    全局 Hook 不一定需要用到 Dll ,比如全局的鼠标钩子、键盘钩子都是不需要 Dll 的,但是要钩住 API,就需要 Dll 的协助了,下面直接放上 Dll 的代码,注意这里使用的是 MFC DLL...struct tagMOUSEHOOKSTRUCT { // 传递给 WH_MOUSE 的鼠标事件信息结构体 POINT pt; // 光标的 xy 坐标 HWND...nCode, wParam, lParam ); } // 安装钩子 BOOL WINAPI StartHook(HWND hWnd) { // 获取鼠标所在的主窗口句柄 g_hWnd...LIBRARY EXPORTS StartHook StopHook ; 此处可以是显式导出 然后开始写调用 Dll 的代码:(这里要用 MFC 项目,因为全局鼠标钩子需要用到 CWnd 中的...m_hWnd) 由于我认为大部分的全局 HOOK 需要在隐藏自己然后默默执行,这与 MFC 的窗口交互模式风格相冲突,所以我在这里隐藏了 MFC 的窗口, 具体方法可以参考:https://blog.csdn.net

    1K10

    VC++6.0入门——第九讲 定制应用功能程序外观

    同样,对于MF℃应用程序来说,为了改变MFC AppWizard自动生成的应用程序外观和大小,我们既可以在应用程序窗口创建之前进行,也可以在该窗口创建之后进行。...我们已经知道,在MFC SDI应用程序中,有一个表示应用程序本身的类,本例中就是 CStyleApp,它派生于CWinApp类。...该类有一个数据成员:m hInstance,标识了应用程序当前的实例,也就是说,如果我们能获取到应用程序的CWinApp对象,就可以利用这个对象来调用它的m_hInstance数据成员,从而得到应用程序当前的实例句柄...MFC提供了一个全局函数:AfxGetApp,可以获得当前应用程序对象的指针。因为这个函数是全局函数,所以在应用程序的任意地方都可以调用它。...,它提供了一组顺序排列的带有位图图标的按钮。

    9110

    任务管理器编码详解

    首先创建一个MFC的应用程序, 在主对话框类中添加一个TabContrl标签控件用于放置应用程序、进程和CPU信息三个页面, 子对话框的显示与切换,是通过标签控件完成的。...; //图表 接下来就创建子窗口: m_Tab.InsertItem(0, _T("应用程序"), 60);//向tab控件中添加每个参数选项卡的值 m_Tab.InsertItem(1, _T("进程信息...m].Format(_T("%d"), dwProcessID);       HD[m] = hWnd;    }    return true; } 结束应用程序    根据应用程序的生命周期,以及窗口的消息循环...首先,没有学过MFC,无从下手,就从图书馆里借了本书《深入简出MFC》这本书说实话真不错,它从整体上讲解了MFC,讲解了Windows编程,它们之间的联系,区别。...然后就是,在实现过程中,我们可以做个整体分析,将要实现的功能列出来,然后一个一个的实现。只有做了才能发现自己的不足之处。我们总是自我感觉良好,但是,现实却是残酷的。

    2K110

    VC++ MFC 常用技巧 (一)

    MFC时的痛苦还记忆犹新。...这两个月学习MFC可以说是一段坎坷的历程.在学校学习SDK时,我从来没有认真去听老师讲课。到了今天是多么后悔当初的行为,也不至于到今天是如此的狼狈不堪。...在这一段时间我总结了一些经常用到的技巧,和大家分享。让后学者,不至于为了解决某一个问题到处求救,还不一定得到满意的答案。 (-)....得到窗体的标题: 1.)AfxGetMainWnd()->GetWindowText(); 2.)先FindWindow()找到窗口的HWND,在GetWindowText(); (七)....在装进自定义的光标后,在移动的过程中,鼠标的形状总是在自定义和默认的光标之间晃动,可以这样解决,在视中的PreCreateWindow()中加入如下几句: BOOL CXXXXView::PreCreateWindow

    1.4K10

    MFC常用的类详细介绍

    功能如下: (1)消息发送:MFC应用程序为每个CCmdTarget派生类创建一个称为消息映射表的静态数据结构,可将消息映射到对象所对应的消息处理函数上。...(2)设置光标:程序正在进行某种操作:BeginWaitCursor()将光标改为沙漏形状;操作完成:EndWaitCursor()将光标改回到之前的形状;处于等待状态时由于某些操作改变了光标形状后,RestoreWaitCursor...在MFC应用程序中有且仅有一个CWinApp派生类的对象,代表程序运行的主线程,代表应用程序本身。 CWnd类 由CCmdTarget类直接派生,是MFC中最基本的GUI对象。...公共变量m_hWnd用于存放供API函数调用的窗口句柄。 CframeWnd类 从CWnd类派生而来,主要用来掌管一个窗口。...GetActiveView():得到当前视图的指针。 SetActiveView():激活一个视图。 GetTitle():得到框架窗口的标题。 SetTitle():设置框架窗口的标题。

    1.2K50

    win32中SetCapture 和 ReleaseCapture的使用

    我错误地认为鼠标的跟踪可以由Point进行传值处理,就能实现我想要的功能,但是我却疏忽了如果我的鼠标按下的时候把鼠标移除窗口外面的情况,这种情况的时候鼠标是在外面的,那么当我把鼠标弹起的时候鼠标的位置就不在扫雷窗口里面了...下面我引用百度百科里的关于SetCapture的介绍: ----  函数功能:该函数在属于当前线程的指定窗口里设置鼠标捕获。一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内。...同一时刻只能有一个窗口捕获鼠标。如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口。   ...函数原型:HWND SetCapture(HWND hwnd);   参数:   hWnd:当前线程里要捕获鼠标的窗口句柄。   返回值:返回值是上次捕获鼠标的窗口句柄。...Javascript 鼠标捕获   鼠标捕获(setCapture)作用是将鼠标事件捕获到当前文档的指定的对象。这个对象会为当前应用程序或整个系统接收所有鼠标事件。

    88430

    关于SetCapture() 和 ReleaseCapture()的使用方法

    一旦窗体捕获了鼠标,全部鼠标输入都针对该窗体,不管光标是否在窗体的边界内。同一时刻仅仅能有一个窗体捕获鼠标。...假设鼠标光标在还有一个线程创建的窗体上,仅仅有当鼠标键按下时系统才将鼠标输入指向指定的窗体。”...这种理解是错误的!!!...须要仅仅注意最后一句“假设鼠标光标在还有一个线程创建的窗体上,仅仅有当鼠标键按下时系统才将鼠标输入指向指定的窗体”的解释,就是即使你在一个窗体线程里对了了SetCapture(),但你在别的窗体的上点击了相同会把鼠标消息发个这个窗体而是我们通过调用...由于当鼠标在窗体外面点击的时候,被点击的窗体获得焦点,原来的SetCapture()也就失效了。

    57530

    TranslateMessage ,GetMessage, DispatchMessage分析

    由于Windows对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。...HOOK机制允许应用程序拦截并处理Windows消息或指定事件,当指定的消息发出后,HOOK程序就可以在消息到达目标窗口之前将其捕获,从而得到对消息的控制权,进而可以对该消息进行处理或修改,加入我们所需的功能...0;如果返回值为负表明发生了错误。...如果不想处理某些特殊的消息,你应该总是调用DefWindowProc()函数,系统将按按默认的方式处理这些消息(通常认为是不做任何操作)。...MSG结构的指针 函数功能描述: 将虚拟键消息转换为字符消息。

    81330

    Java事件处理,低级事件类型:键盘事件+焦点事件,你真的懂吗?

    由于需要知道点击次数,所以这个操作是在mouseClick方法中实现。 当鼠标在窗口上移动时,窗口将会收到一连串的鼠标移动事件。大多数应用程序忽略了这些事件。...如果用户在移动鼠标的同时按下鼠标,就会调用mouseMoved而不是调用mouseDragged。在测试应用程序中,用户可以用光标拖动小方块。在程序中,仅仅用拖动的矩形更新当前光标位置。...由于大部分应用程序仅对鼠标点击感兴趣,而对鼠标移动并不太感兴趣,但鼠标移动事件发生的频率又很高,因此将鼠标移动事件与拖动事件定义在一个称为MouseMotionListener的独立接口中。...在默认情况下,Swing组件按照放置在容器中的位置,从上到下,从左到右的顺序遍历。也可以改变焦点遍历的顺序,有关这个主题更加详细的内容请参阅下一章。...幸运的是,大多数应用程序程序员不必过分地为焦点处理而担忧。在JDK 1.4之前,对组件焦点事件的捕获主要用于核查错误与校验数据。假设在一个文本域中包含信用卡号。

    4K30

    VC++6.0入门——第7讲 对话框编程(一)

    引出VC++6.0入门——第7讲 对话框编程(一)第7讲 对话框编程(一)Windows应用程序工作的基本流程是从用户那里得到数据,经过相应的处理之后,再把处理结果输出到屏幕、打印机或者其他的输出设备上...那么,应用程序是如何从用户那里得到数据,并且再将修改后的数据显示给用户的呢?这就需要用到Windows应用程序中一个很重要的用户接口一对话框。...例如,在Wod中利用【文件打开】菜单命令显示一个“打开”对话框后,再用鼠标去选择其他菜单,或者进行该对话框以外的任何操作时,只会听到嘟嘟声,这是因为“打开”对话框是一个模态对话框。...顺序,布局下的Tab顺序可以进行改变,以上函数会按照序号循环查找现在,我们取消收缩按钮的默认设置,并删除OK按钮,再次运行Mybole程序,打开测试对话框,按下回车键,会发现焦点仍是在各控件间依次转移。...也就是说,当用户按下回车键时,Windows将查看对话框中是否存在指定的默认按钮,如果有,就调用该默认按钮单击消息的响应函数。如果没有,就会调用虚拟的OnOK函数,即使对话框没有包含默认的OK按钮。

    16110

    MFC消息_为什么发消息对方不回

    它使得程序可以检查程序的队列中的下一个消息,而不实际删除它。 GetMessage不将控制传回给程序,直到从程序的消息队列中取得消息,但是PeekMessage总是立刻传回,而不论一个消息是否出现。...返回值:如果消息可得到,返回非零值;如果没有消息可得到,返回值是零。   备注:和函数GetMessage不一样的是,函数PeekMesssge在返回前不等待消息被放到队列里。...PeekMesssge只得到那些与参数hWnd标识的窗口相联系的消息或被lsChild确定为其子窗口相联系的消息,并且该消息要在由参数wMsgFiterMin和wMsgFiherMax确定的范围内。...由于Windows对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得字符消息,需要键盘映射转换为字符的消息。 TranslateMessage函数用于将虚拟键消息转换为字符消息。...这两个消息的附加参数(wParam和lParam)包含的是虚拟键代码和扫描码等信息,而我们在程序中往往需要得到某个字符的ASCII码,TranslateMessage这个函数就可以将WM_KEYDOWN

    55020

    vim技巧:我的 .vimrc 配置文件,详解每一个配置项的作用

    .所以主动配置. set backspace=indent,eol,start " 1=启动显示状态行, 2=总是显示状态行. " 设置总是显示状态行,方便看到当前文件名. set laststatus...%v,%P]\ %{strftime(\"%H:%M\")} " 显示还没有输入完整的命令.例如yy命令,输入第一个y会在右下角显示y. set showcmd " 使用Tab键补全时,在状态栏显示匹配的列表..." 去掉输入错误时的提示声音 set noeb " 默认按下Esc后,需要等待1秒才生效, " 设置Esc超时时间为100ms,尽快生效 set ttimeout set ttimeoutlen=..." 指定tab字符和空格的颜色组为MyTabSpace,不同字符串 " 之间用|隔开,要使用\|转义. match MyTabSpace /\t\| / " 针对特定类型的代码文件,设置显示Tab...下面配置cscope查找 " 文件命令的快捷键为F6,由于需要手动输入文件名,不要加 nnoremap :cs find f " 如果要去掉高亮显示搜索到的内容,需要再次搜索一些不存在的字符串

    14.6K21

    为了分析WebRTC, 重学Windows开发

    就是告诉操作系统,我要创建个什么样子的窗口,是啥背景色,鼠标是啥样子的,程序叫啥名子等等。 有了这个窗口类,我们就可以创建很多这样子的窗口了,这样是不是觉得很方便呢?...我的应用程序", //窗口标题文字 WS_OVERLAPPEDWINDOW, //窗口外观样式 38, //窗口相对于父级的X坐标...了解了上在的知识,大家是不是觉得不用 MFC 自己写个 Windows 程序也不是很难了?...hPrevInstance:总是NULL,没啥用。 lpCmdLine: 用命令行启动时的命令,有兴趣的可以自己打印出来。...hInstance :窗口句柄,与WinMain中的一样。 hIcon :窗口图标。如果是NULL,使用默认图标。 hCursor :设置光标样式。

    1K10
    领券