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

时间:2013-09-12 03:39:50

标签: c++ winapi

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

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

到目前为止,我这样做了:

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

是的,这本身没有任何问题。

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

你肯定需要为你已经细分的每个控件调用RemoveWindowSubclass - 在对话框被销毁时,或者在控件被销毁时在子类本身中调用:

// subclass procedure
case WM_NCDESTROY:
    RemoveWindowSubclass(hWnd, SubclassProc, uIdSubclass);