为什么在对话框procs中使指针静态?

时间:2012-08-21 16:25:48

标签: winapi visual-c++

我将介绍基本的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)
  • 这是分享吗?

1 个答案:

答案 0 :(得分:1)

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

确保:

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

这是为了提高效率吗?

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

  

这是分享吗?

没有。
请注意,static变量的范围仅限于此情况下的函数,因此无法共享。