gpt4 book ai didi

visual-c++ - MFC VC++ CStatic 只接收 WM_NCHITTEST

转载 作者:行者123 更新时间:2023-12-04 04:31:19 24 4
gpt4 key购买 nike

我用 C++ 创建了一个小型 MFC 文档 View 应用程序,但在从 CStatic 继承的类中接收消息时遇到了一些问题。我已经设法创建了 CStatic 派生,它在我的 View 中可见,但是我的消息处理程序没有被触发。

当使用 Spy++ 时,窗口似乎只接收 WM_NCHITTEST 并返回 HTTRANSPARENT,根据 MSDN 的意思是:

“在当前被同一线程中的另一个窗口覆盖的窗口中(消息将发送到同一线程中的底层窗口,直到其中一个返回非 HTTRANSPARENT 的代码)。”

这是 Spy++ 的一个例子:

<000001> 001D1350 S WM_NCHITTEST xPos:128 yPos:167
<000002> 001D1350 R WM_NCHITTEST nHittest:HTTRANSPARENT
<000003> 001D1350 S WM_NCHITTEST xPos:128 yPos:166
<000004> 001D1350 R WM_NCHITTEST nHittest:HTTRANSPARENT
<000005> 001D1350 S WM_NCHITTEST xPos:128 yPos:165
<000006> 001D1350 R WM_NCHITTEST nHittest:HTTRANSPARENT
<000007> 001D1350 S WM_NCHITTEST xPos:128 yPos:164
<000008> 001D1350 R WM_NCHITTEST nHittest:HTTRANSPARENT

这看起来很奇怪,因为 CStatic 导数是我 View 的唯一子窗口。我是这样创建的:

Create(pItem->Value->GetBuffer(), WS_CHILD | WS_VISIBLE | SS_CENTER, Rect, Parent);
ShowWindow(SW_SHOW);

其中 Parent 是指向 CView 的指针。

非常感谢任何帮助。

编辑:

Foo.h

class Foo: public CStatic
{
DECLARE_DYNAMIC(Foo)
public:
Foo();
virtual ~Foo();
virtual void CreateCtrl(CWnd * Parent, POINT TopLeft, SIZE sz);

protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
};

Foo.cpp

void Foo::CreateCtrl(CWnd * Parent, POINT TopLeft, SIZE sz)
{
CRect Rect(TopLeft, sz);
Create(pItem->Value->GetBuffer(), WS_CHILD | WS_VISIBLE | SS_CENTER, Rect, Parent);
ShowWindow(SW_SHOW);
}

BEGIN_MESSAGE_MAP(Foo, CStatic)
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()

void Foo::OnLButtonUp(UINT nFlags, CPoint point)
{
AfxMessageBox("Hello World!");
__super::OnLButtonUp(nFlags, point);
}

最佳答案

请参阅 Microsoft 的文章 "About Static Controls" ,特别是这部分:

WM_NCHITTEST: Returns HTCLIENT if the control style is SS_NOTIFY; otherwise, returns HTTRANSPARENT.

一旦窗口从 WM_NCHITTEST 返回 HTTRANSPARENT,所有进一步的鼠标消息将按 Z 顺序发送到它下面的窗口;在您的情况下,父 View 。就鼠标处理而言,窗口是“透明的”。

关于visual-c++ - MFC VC++ CStatic 只接收 WM_NCHITTEST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18189577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com