Visual studio (WM_nclu Buttondown)做什么?

Visual studio (WM_nclu Buttondown)做什么?,visual-studio,api,vb6,Visual Studio,Api,Vb6,我正在学习如何在Visual Basic 6中生成圆形表单的示例,我在代码处停了下来: Public Const WM\u nclu buttondown=&HA1 我只知道这是一条以Const传递给windows的消息 我想知道的是: 什么是&HA1 康斯特·沃姆·巴顿敦做什么?它向Windows发送什么消息 还有别的事吗 请,谢谢 这是一个十六进制整数文本 它声明了一个常数;它实际上什么都不做。 当光标位于窗口的非客户端区域内时,当用户按下鼠标左键时,将发布。此消息将发布到包含光标的窗口

我正在学习如何在Visual Basic 6中生成圆形表单的示例,我在代码处停了下来:
Public Const WM\u nclu buttondown=&HA1
我只知道这是一条以Const传递给windows的消息

我想知道的是:

  • 什么是&HA1

  • 康斯特·沃姆·巴顿敦做什么?它向Windows发送什么消息

  • 还有别的事吗

请,谢谢
  • 这是一个十六进制整数文本

  • 它声明了一个常数;它实际上什么都不做。
    当光标位于窗口的非客户端区域内时,当用户按下鼠标左键时,将发布。此消息将发布到包含光标的窗口

      • &HA1
        表示数字A1,即161(尽管您通常会看到以十六进制表示的Windows消息常量)。更常见的是,您将看到这是代码> 0xA1(或<代码> 0x00 A1 < /COD>),因为这是十六进制数将如何表示在C或C++中(Windows API最初是为C编写的)。
      • 您不会将
        WM\u nclubuttondown
        发送到Windows;反过来说。Windows将向您发送
        WM\u nclubuttondown

      如果您想知道
      WM\u nclubuttondown
      的用途,只需通过Web搜索即可。

      您正在处理Windows发送到窗口的消息,以告诉您的代码发生了有趣的事情。您将在窗体的WndProc()方法中找到此常量,该方法在Windows发送消息时运行

      WM_nclubuttondown消息就是这些消息之一。WM=窗口消息。NC=非客户端,窗口中非客户端区域、边框和标题栏的部分。L=左键,你可以算出BUTTONDOWN

      这些消息在Windows SDK文件中声明。您将在计算机上安装它,该文件的VS2008版本位于C:\Program Files\Microsoft SDK\Windows\v6.0A\Include\WinUser.h中。用文本编辑器或VS打开它,看看里面有什么。搜索邮件标识符以查找此行:

       #define WM_NCLBUTTONDOWN                0x00A1
      
      Windows SDK是为使用C程序而编写的#define相当于VB.NET中的Const。
      0x
      前缀在C语言中表示“十六进制”,就像VB.NET中的&H一样。Windows计算器有助于将十六进制值转换为十进制值并返回,请使用View+Programmer。您将看到在VB.NET程序中使用&H的原因,这些常量在核心声明中以十六进制开始。但是
      Private Const WM_nclubuttondown=161
      也同样有效(10 x 16+1)


      因此,在WndProc()中,可以使用Select Case或If语句来检测消息。当用户单击窗口标题栏上的鼠标左键时,您可以执行一些特殊操作。如果忽略它,则运行
      MyBase.WndProc(m)
      ,正常情况会发生:Windows启动一个模式循环,允许用户移动窗口。实际上,很少有人想要停止或改变这种行为,用户非常喜欢这种默认行为,因为windows中的所有窗口都是这样。您通常希望自定义其行为的唯一消息是WM_NCHITTEST。对于提供无边框的窗口类边框行为非常有用。但这是另一回事。

      公平地说,也可以通过编程方式发送WM_nclubuttondown消息;)@当然,JoshSanders,虽然希望不是在生产代码中。好吧,你会感到惊讶。在处理某些消息时,Windows在DefWindowProc中做了一些令人讨厌的事情。对于处理WM_nCluButtonDown的情况,在非启用aero的机器上,Windows将强制为自定义绘制框架的非客户端区域重新绘制默认系统框架。这是什么意思?这意味着,如果您运行的是windows XP,而您自己没有处理该消息,那么您的自定义标题栏将突然变成windows系统默认的标题栏。Windows在一些消息中存在此问题。不幸的是,WM_SETICON、WM_SETCURSOR等,但我的观点是,有时您可能需要自己发送消息来调用您可能拥有的某种自定义处理程序。CEF的hwnd_message_handler.cc就是一个很好的例子,在那里他们发送显式的WM_sysmcomand消息以防止我上面提到的Windows bug:)@JoshSanders:不过,你仍然希望永远不必发送这个特定的消息。