1

我可以使用单个 SetSubclassWindow 过程对多个编辑控件进行子类化,如果可以,该怎么做?

我想用相同的子类过程对多个编辑控件进行子类化。

到目前为止,我是这样做的:

SetWindowSubclass( GetDlgItem( hwnd, IDC_EDIT1 ), SomeSubclassProcedure, 0, 0);

SetWindowSubclass( GetDlgItem( hwnd, IDC_EDIT2 ), SomeSubclassProcedure, 0, 0);

一切正常,但我只想咨询更有经验的开发人员,所以我可以肯定,因为我是初学者。

另外,我想知道在销毁包含编辑控件的对话框时是否应该使用 RemoveWindowSubclass。

我没有在我的代码中使用它,因为我没有将数据作为第四个参数传递给 SetWindowSubclass。

4

1 回答 1

3

是的,这本身并没有错。

唯一需要注意的是,如果您使用任何可能需要按控件维护的全局/共享数据。dwRefData当您对控件进行子类化时,您可以通过提供不同的值来处理此问题- 例如,您可以为每个控件分配不同的数据结构,但仍使用相同的子类过程。

您确实需要RemoveWindowSubclass您已子类化的每个控件调用 - 当您的对话框被销毁时,或者在控件被销毁时在子类本身中调用:

// subclass procedure
case WM_NCDESTROY:
    RemoveWindowSubclass(hWnd, SubclassProc, uIdSubclass);
于 2013-09-12T03:48:52.527 回答