Мне интересно узнать лучший/общий способ хранения указателя this
для использования в WndProc
. Я знаю несколько подходов, но каждый, как я понимаю, имеет свои недостатки. Мои вопросы:
Какие разные способы создания такого кода:
CWindow::WndProc(UINT msg, WPARAM wParam, LPARAM)
{
this->DoSomething();
}
Я могу думать о Thunks, HashMaps, локальном хранилище потоков и структуре данных User Window.
Каковы преимущества/недостатки каждого из этих подходов?
Баллы, присуждаемые за примеры кода и рекомендации.
Это просто ради радикости. После использования MFC я просто задавался вопросом, как это работает, а затем задумался о ATL и т.д.
Изменить:. Какое раннее место я могу использовать HWND
в окне proc? Он документируется как WM_NCCREATE
- но если вы на самом деле экспериментируете, это не первое сообщение, которое нужно отправить в окно.
Изменить: ATL использует thunk для доступа к этому указателю. MFC использует хэш-таблицу для поиска HWND
s.