1

我正在浏览许多基本 win32 对话程序的示例。他们似乎采用了这种基本模式。

class Person
{
     char Name[63];
     int Age;
};

BOOL CALLBACK EditDlgProc ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
     static Person* person;
     switch(uMsg)
     {
     case WM_INITDIALOG:
         person = (Person*)lParam;
         return FALSE;
     case WM_COMMAND:
           .....
     }
     return FALSE;
}

我想知道为什么要让人静态

  • 这是为了效率吗?(避免每次调用都将人员分配给 lParam)
  • 这是用来分享的吗?
4

1 回答 1

1

person它是在函数调用之间保持指针的状态EditDlgProc()

它确保:

  • 指针在程序的生命周期内只创建一次。
  • 它在对函数的连续调用和
  • 程序结束时只销毁一次。

这是为了效率吗?

是的,可能。在不了解设计考虑的情况下很难说。

这是用来分享的吗?

不可以。
请注意,static在这种情况下,变量的范围仅限于函数,因此不能这样共享。

于 2012-08-21T16:28:08.780 回答