这是我从 Microsoft Developer Network
http://msdn.microsoft.com/en-us/library/dd162487(v=VS.85).aspx复制的一些代码
LRESULT APIENTRY WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
**PAINTSTRUCT ps;
HDC hdc;**
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "Hello, Windows!", 15);
EndPaint(hwnd, &ps);
return 0L;
// Process other messages.
}
}
我可能错了,但我认为每次编译器运行如下任何一个语句时:
int var1
double var2
char var3[]
PAINTSTRUCT ps
HDC hdc
计算机将创建一个新变量。至少这是合乎逻辑的想法,因为当你想创建一个新变量时,这是你写的,对吧?
我也一直认为,如果你有这样的代码块:
for(int i = 0; i < 100; i++)
int sum = i;
计算机将创建 100 个不同的变量,它们都具有相同的名称sum
和一些包含在i
在上面的示例代码中,函数 WndProc 将在程序过程中被多次调用,但是函数创建的两个变量“ps”和“hdc”只会在函数执行的某些时候使用.
那么计算机会生成许多它永远不会使用的单独的、额外的 PAINTSTRUCT 和 HDC 变量吗?
像这样在 case WM_PAINT: 之后声明“ps”和“hdc”会不会更有效?
case WM_PAINT:
{
**PAINTSTRUCT ps;
HDC hdc;**
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 0, 0, "Hello, Windows!", 15);
EndPaint(hwnd, &ps);
}
return 0L;