我在完成the standard c++ tutorial后尝试做一些你好世界的事情。我尝试做的第一件事是直接在没有窗口的屏幕上绘图。我发现this并且它有效。
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
HDC screenDC = ::GetDC(0);
::Rectangle(screenDC, 200, 200, 300, 300);
int exit; cin >> exit;
return 0;
}
但是在标准c ++教程中没有任何内容涵盖这样的内容
HDC screenDC = ::GetDC(0);
::Rectangle(screenDC, 800, 200, 300, 300);
什么是Rectangle成员?
如果你不介意我还有其他一些可能很简单的问题。如果不是不担心。
只要我的矩形有一个窗口移过它,它就会消失。有没有回电让我知道这个,所以我可以重新粉刷?
如何更改矩形的颜色?
我在哪里可以了解这一点?我发现的每个教程都很少,而且大多数都已经过时了。如果那是我需要做的,我可以得到一本书。尝试了以下(有时成功,有时不成功):
http://msdn.microsoft.com/en-us/library/vstudio/bb384843.aspx
http://msdn.microsoft.com/en-us/library/ms533895(v=vs.85).aspx
答案 0 :(得分:9)
::
是范围解析运算符。
scope::name
表示使用名为scope
的类或命名空间中声明的名称。
::name
表示使用全局命名空间中声明的名称。通常,它是可选的;但有时你需要它,如果在当前范围内有其他同名的东西。
答案 1 :(得分:7)
::
访问全局命名空间。它是命名空间解析。如果你愿意,你可以放弃那些::
,它们是非常粗暴的。
答案 2 :(得分:2)
::
是范围解析运算符。 ::Identifier
将引用全局命名空间中的任何内容。然而,并非总是必要的。只有当不使用它时才真正需要它会导致歧义:
int i = 0;
void func() {
int i = 0;
::i = 1; // This will set the global i
i = 1; // This will set the local i
}
(注意:我不支持任何形式的全局变量)
答案 3 :(得分:1)
::用于访问类或命名空间中的内容。 (或者在这种情况下,那不是。)
因此,如果你有一个带有静态方法栏的Foo类,你可以像这样调用它
Foo::Bar();
另外,如果你有一个带有函数PrintPrettyThings的命名空间MyLibrary,你可以像这样调用它:
MyLibrary::PrintPrettyThings();
如果你在某个地方有另一个功能Bar,你可以使用Foo的方法
::Bar();
调用Foo之外的Bar,否则你只需要调用Foo :: Bar。