می توانید از Subclass procedure توسط SetWindowLong یا SetWindowLongPtr استفاده کنید، مثلا در هر جایی از کدها که از dll استفاده می کند کد زیر را فراخوانی کنید: (فلگ DWL_DLGPROC برای دیالوگ ها و GWL_WNDPROC برای پنجره ها)
WNDPROC wndOldProc = (WNDPROC) SetWindowLong(hwndDlg,
GWL_WNDPROC, (LONG) NewDlgProc );
فقط برای کد فوق باید HWND برای دیالوگ را از داخل dll دریافت کنید (مثلا با فراخوانی تابعی)
به این شکل procedure قبلی را به جدید (در مثال NewDlgProc) تغییر می دهید(با حفظ پردازش های قبلی).
سپس این تابع را تعریف کنید:
LRESULT APIENTRY NewDlgProc( HWND hwnd, UINT uMsg,
WPARAM wParam, LPARAM lParam)
{
if (uMsg == WM_CREATE)
// Do something
return CallWindowProc(wndOldProc, hwnd,
uMsg, wParam, lParam);
}
داخل آن پیام های لازم را پردازش کنید و در پایان CallWindowProc را فراخوانی کنید تا بقیه پیام های تعریف شده کار قبلی خود را انجام دهند.