这是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参考书没有提到它,所以我想知道它是微软的扩展还是新功能.
我在检测悬停在静态 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)