小编Bob*_*Bob的帖子

这个嵌套的命名空间语法在C++中是标准的吗?

这是C++的标准吗?在C#中,我喜欢声明嵌套的命名空间,如下所示:

namespace A.B 
{
    class X
    {
    };
}
Run Code Online (Sandbox Code Playgroud)

替代方案就是这个,这有点丑陋:

namespace A
{
    namespace B
    {
        class X
        {
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

在C++中,我想看看它是否有类似的功能.我最终找到了这个作品:

namespace A::B
{
    class Vector2D
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意::.

我很好奇这是标准的C++还是这是一个MS功能.我找不到任何文件.我的古老的C++ 98参考书没有提到它,所以我想知道它是微软的扩展还是新功能.

c++ nested namespaces

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

如何检测悬停在静态 Win32 控件上?

我在检测悬停在静态 Win32 控件上时遇到问题。

这不是重复的问题,因为这会查找多个静态控件,而不是在编译时只查找静态控件的单个已知句柄。

虽然这可以用另一种语言在几秒钟内完成,但在尝试了几个小时后,我越来越感到沮丧。我希望在这里得到答案。

首先,我创建了一个名为 Label 的类。我在其中创建了一个静态控制窗口。我现在将静态称为标签。

// Create the label's handle.
m_handle = CreateWindowEx(NULL, "static", m_text.c_str(),
    WS_CHILD | SS_LEFT | SS_NOTIFY, m_x, m_y, m_width, m_height,
    m_parentWindow, (HMENU)(UINT_PTR)m_id, m_hInstance, NULL);
if (m_handle == NULL)
    return false;
Run Code Online (Sandbox Code Playgroud)

当鼠标悬停在此标签上时,应调用以下方法:

void Label::invokeOnMouseHover()
{
    if (m_onMouseOver)
        m_onMouseOver();
}
Run Code Online (Sandbox Code Playgroud)

这将调用我的方法:

void lblName_onMouseOver()
{
    MessageBox::show("Hovering!", "My Console",
        MessageBoxButtons::Ok, MessageBoxIcon::Information);
}
Run Code Online (Sandbox Code Playgroud)

这是我从顶层创建它的方式:

Label lblName("This is a label.", 0, 0);
lblName.setVisible(true);
lblName.OnMouseOver(lblName_onMouseOver); 
frm.add(lblName);
Run Code Online (Sandbox Code Playgroud)

承认吧,这薄薄的一层很美。

虽然我的回调对于我的 Button 和 Checkbox 控件工作正常,但我注意到静态有点不同。

所以,让我们下降几个层次:

这是在主窗口的程序中:

case WM_MOUSEMOVE:
{  
    int xPos = …
Run Code Online (Sandbox Code Playgroud)

c++ winapi

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

标签 统计

c++ ×2

namespaces ×1

nested ×1

winapi ×1