>Может, но только статическим, иначе ты всегда получишь первым параметром указатель на this.
Э-э-э... А каким таким образом статическая фнукция может получать доступ к нестатическим полям? По-моему все можно сделать двумя методами. Первый (дубовый, используктся в Borland VCL и по-моему в MFC) — это написать для каждого класса свою собственную функцию (не член класса), содержащая нечто вроде:
// за правильность констант не ручаюсь, пишу по памяти
if (uMsg == WM_CREATE) {
// присоединить к окну адрес его класса, который должен передаваться как параметр
SetWindowLong (hwndWindow, GWL_USER, lParam);
}
MyClass = (MYCLASS*) GetWindowLong (hwndWindow, GWL_USER);
MyClass->MyMethod (uMsg, wParam, lParam);
}
void MyClass::CreateWindow (...)
{
...
hwndWindow = ::CreateWindow (... ,
(LPARAM) this); // параметр созания — как раз указатель на класс
}
Второй способ — поизящнее (но я его по памяти уже не напишу, изложу только идею). Смысл прост: создается класс/структура/массив/да_неавжо_что, содержащее в себе инструкции запихивания в стек адрес класса (то есть this). После этого просто выполняется jump на метод данного класса. И тогда вместо указателя на процедуру передаем указатель на _класс_ — все остальное он сделает сам. Минус — придется повозиться с реализацией. Плюс — один объект на всю программу. Если кому сильно надо — поищу равлизацию (где-то в архивах валялась).
Вот вроде все. Если у кого винды свалятся в результате применения написнного — ногами только не бейте! :-)