我可以使用单个SetSubclassWindow过程来子类化多个编辑控件,如果可以的话,该怎么做?
我想使用相同的子类过程子类化多个编辑控件。
到目前为止,我这样做了:
SetWindowSubclass( GetDlgItem( hwnd, IDC_EDIT1 ), SomeSubclassProcedure, 0, 0);
SetWindowSubclass( GetDlgItem( hwnd, IDC_EDIT2 ), SomeSubclassProcedure, 0, 0);
一切正常,但我只想与更有经验的开发人员联系,所以我可以肯定,因为我是初学者。
此外,我想知道在销毁包含编辑控件的对话框时是否应该使用RemoveWindowSubclass。
我没有在我的代码中使用它,因为我没有将第4个参数的数据传递给SetWindowSubclass。
答案 0 :(得分:3)
是的,这本身没有任何问题。
唯一需要注意的是,如果您使用可能需要按控制维护的任何全局/共享数据。您可以通过在对控件进行子类化时为dwRefData
提供不同的值来处理此问题 - 例如您可以为每个控件分配不同的数据结构,但仍然使用相同的子类过程。
你肯定做需要为你已经细分的每个控件调用RemoveWindowSubclass
- 在对话框被销毁时,或者在控件被销毁时在子类本身中调用:
// subclass procedure
case WM_NCDESTROY:
RemoveWindowSubclass(hWnd, SubclassProc, uIdSubclass);