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()です。

これにより、次のことが保証されます。

  • ポインタは、プログラムの存続期間中に1回だけ作成されます。
  • 関数への連続した呼び出し全体でポインタの状態を維持し、
  • プログラムの終了時に一度だけ破棄されます。

これは効率のためですか?

はい、おそらく。設計上の考慮事項を知らずに言うのは難しい。

これは共有用ですか?

いいえ。この場合、変数
のスコープは関数に限定されるため、そのように共有することはできません。static

于 2012-08-21T16:28:08.780 に答える