Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi 为什么在对话框进程中使指针保持静态?_Winapi_Visual C++ - Fatal编程技术网

Winapi 为什么在对话框进程中使指针保持静态?

Winapi 为什么在对话框进程中使指针保持静态?,winapi,visual-c++,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:

我将介绍许多基本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)
  • 这是用来分享的吗
这是为了在调用函数
EditDlgProc()
之间保持指针
person
的状态

它确保:

  • 指针在程序的生命周期内只创建一次
  • 它在对函数和函数的连续调用中保持指针的状态
  • 仅在程序结束时销毁一次
这是为了提高效率吗?

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

这是用来分享的吗?

否。

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

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

它确保:

  • 指针在程序的生命周期内只创建一次
  • 它在对函数和函数的连续调用中保持指针的状态
  • 仅在程序结束时销毁一次
这是为了提高效率吗?

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

这是用来分享的吗?

否。

请注意,在这种情况下,
静态
变量的作用域仅限于函数,因此不能共享。

还请注意,使用静态表示一次只能有一个对话框副本。还请注意,使用静态表示一次只能有一个对话框副本。