窗口回调函数的参数为何还有hwnd句柄呢 这个句柄不是肯定是自己吗

窗口回调函数的参数为啥还有hwnd句柄呢 这个句柄不是肯定是自己吗
WNDCLASS wndclass; 
wndclass.lpfnWndProc = ::DefWindowProc; 



// 窗口函数的函数原形
LRESULT CALLBACK DefWindowProc(HWND, UINT, WPARAM, LPARAM)
{
...
}

为啥上面的窗口回调函数还会有HWND这个参数呢,这个参数不是肯定是自己了吗,不是多余吗,::DispachMessage的时候不是就是根据这个参数给调用各个窗口自己的DefWindowProc吗  为啥还要HWND

------解决方案--------------------
为了能让内部的其他api使用句柄,比如通常在 WM_CREATE 里创建子窗口
LRESULT wnd_proc(HWND hwnd, MSG msg, ...) {
switch(msg) {
case WM_CREATE:
CreateWindow("button", ..., hwnd, ...); //hwnd作为parent句柄
...
}
}

------解决方案--------------------
hwnd用于识别这个窗口过程函数是哪个窗口正在被调用的