小编Sha*_*Haw的帖子

MFC VC++ CStatic只接收WM_NCHITTEST

我用C++创建了一个小型的MFC文档视图应用程序,我在从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
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪,因为CStatic衍生物是我观点中唯一的子窗口.我这样创建它:

Create(pItem->Value->GetBuffer(), WS_CHILD | WS_VISIBLE | SS_CENTER, Rect, Parent);
ShowWindow(SW_SHOW);
Run Code Online (Sandbox Code Playgroud)

Parent指向的指针在哪里CView.

任何帮助将非常感激.

编辑:

foo.h中

class Foo: public CStatic
{
    DECLARE_DYNAMIC(Foo)
public: …
Run Code Online (Sandbox Code Playgroud)

mfc visual-c++

2
推荐指数
1
解决办法
703
查看次数

CStatic没有收到WM_CTLCOLOR

我想我在这里错过了一些小事.

我正在尝试使用透明背景创建一个继承自CStatic的类.我已经托管创建了一个类的实例,它显示在父级中CView.但是,当我添加一个OnCtlColor消息处理程序通过Visual Studio上的类视图来使背景透明时,它永远不会触发.

这是一段代码:

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 HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
};
Run Code Online (Sandbox Code Playgroud)

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 | SS_NOTIFY, Rect, Parent);
    ShowWindow(SW_SHOW);
}

BEGIN_MESSAGE_MAP(Foo, CStatic) 
    ON_WM_CTLCOLOR_REFLECT()
    ON_WM_ERASEBKGND()
END_MESSAGE_MAP()

HBRUSH Foo::CtlColor(CDC* pDC, UINT nCtlColor)
{
    pDC->SetBkMode(TRANSPARENT);
    return …
Run Code Online (Sandbox Code Playgroud)

mfc visual-c++

1
推荐指数
1
解决办法
2050
查看次数

标签 统计

mfc ×2

visual-c++ ×2