我不得不将自定义文件对话框(从MFC的CFileDialog派生)重写为WTL的CFileDialog。当我无法访问对话框对象本身时,我有一些问题需要检索数据。想象一下。
我在课堂上有一名成员
static WNDPROC m_wndProc;
我在以下静态成员fnct中初始化它。
void CMyFileDialog::OnInitDone(LPOFNOTIFY lpon)
{
m_wndProc = (WNDPROC)::SetWindowLong(thisHWND, GWL_WNDPROC, reinterpret_cast<long>
(&CMyFileDialog::WndProcSelect));
}
句柄进入回调方法没有问题,我可以用CWindow“连接”它
LRESULT CALLBACK CMyFileDialog::WndProcSelect(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// ...
CWindow callerWnd(hwnd);
}
在这里,我不知道将CWindow转换为我的CMyFileDialog的真正方法。我认为,这个CWindow类只是以某种方式连接到句柄本身,但与之前创建的对象不同。例如,如果我的CMyFileDialog中有CString或其他成员,它将无法访问其状态,因为它是在另一个对象中创建的。
答案 0 :(得分:2)
我认为你在这里做错了什么。您无需修改WndProc即可访问消息映射(这是CFileDialogImpl
已经完成的事情。)
BEGIN_MSG_MAP(CMyFileDialog)
CHAIN_MSG_MAP(CFileDialogImpl<CMyFileDialog>)
END_MSG_MAP()
答案 1 :(得分:1)
你可以随时使用SetWindowLongPtr
和你的#34;这个&#34;指针,然后提取指向CMyFileDialog的指针相当容易。