打开atldlgs.hINT_PTR DoModal(HWND hWndParent = ::GetActiveWindow())
{
ATLASSERT((m_ofn.Flags & OFN_ENABLEHOOK) != 0);
ATLASSERT(m_ofn.lpfnHook != NULL); // can still be a user hook ATLASSERT((m_ofn.Flags & OFN_EXPLORER) != 0); if(m_ofn.hwndOwner == NULL) // set only if not specified before
m_ofn.hwndOwner = hWndParent; ATLASSERT(m_hWnd == NULL); //此处为何是NULL???
ModuleHelper::AddCreateWndData(&m_thunk.cd, (ATL::CDialogImplBase*)this); BOOL bRet;
if(m_bOpenFileDialog)
#if defined(__AYGSHELL_H__) && (_WIN32_WCE >= 0x0501)
bRet = ::GetOpenFileNameEx(&m_ofn);
else
bRet = ::GetSaveFileName((LPOPENFILENAME)&m_ofn);
#else
bRet = ::GetOpenFileName(&m_ofn);
else
bRet = ::GetSaveFileName(&m_ofn);
#endif m_hWnd = NULL;//此处为何设置为NULL???
//太坑了,好多Get开头的函数都有断言ATLASSERT(::IsWindow(m_hWnd)); return bRet ? IDOK : IDCANCEL;
}DoModal()调用之后可以显示,但是调用GetFilePath()时断言错误int GetFilePath(LPTSTR lpstrFilePath, int nLength) const
{
ATLASSERT(::IsWindow(m_hWnd)); //断言m_hWnd = 0
ATLASSERT((m_ofn.Flags & OFN_EXPLORER) != 0); return (int)GetFileDialogWindow().SendMessage(CDM_GETFILEPATH, nLength, (LPARAM)lpstrFilePath);
}但是断点进去GetFilePath函数,查看ofn结构,里面的lpstrFile是正确的。
运行环境:vs2010+wtl8.1+debug+dialog
请求解答???
{
ATLASSERT((m_ofn.Flags & OFN_ENABLEHOOK) != 0);
ATLASSERT(m_ofn.lpfnHook != NULL); // can still be a user hook ATLASSERT((m_ofn.Flags & OFN_EXPLORER) != 0); if(m_ofn.hwndOwner == NULL) // set only if not specified before
m_ofn.hwndOwner = hWndParent; ATLASSERT(m_hWnd == NULL); //此处为何是NULL???
ModuleHelper::AddCreateWndData(&m_thunk.cd, (ATL::CDialogImplBase*)this); BOOL bRet;
if(m_bOpenFileDialog)
#if defined(__AYGSHELL_H__) && (_WIN32_WCE >= 0x0501)
bRet = ::GetOpenFileNameEx(&m_ofn);
else
bRet = ::GetSaveFileName((LPOPENFILENAME)&m_ofn);
#else
bRet = ::GetOpenFileName(&m_ofn);
else
bRet = ::GetSaveFileName(&m_ofn);
#endif m_hWnd = NULL;//此处为何设置为NULL???
//太坑了,好多Get开头的函数都有断言ATLASSERT(::IsWindow(m_hWnd)); return bRet ? IDOK : IDCANCEL;
}DoModal()调用之后可以显示,但是调用GetFilePath()时断言错误int GetFilePath(LPTSTR lpstrFilePath, int nLength) const
{
ATLASSERT(::IsWindow(m_hWnd)); //断言m_hWnd = 0
ATLASSERT((m_ofn.Flags & OFN_EXPLORER) != 0); return (int)GetFileDialogWindow().SendMessage(CDM_GETFILEPATH, nLength, (LPARAM)lpstrFilePath);
}但是断点进去GetFilePath函数,查看ofn结构,里面的lpstrFile是正确的。
运行环境:vs2010+wtl8.1+debug+dialog
请求解答???
if(dlg.DoModal() == IDOK)
{
m_strGSMFilePath= dlg.GetPathName();
SetDlgItemText(IDC_EDIT_GSMFILE,m_strGSMFilePath);
}没问题
如果说窗口已经销毁,那么GetFilePath这个函数不就没用了??那么为什么要提供这个函数??
是在DoModal()之前还是之后??
之前肯定不行,因为还未选择。
之后,m_hWnd已经为NULL,再调用就断言。
so 怎么在派生类中调用??
dlg.m_szFileName那种Get函数是要窗口有效才行的,窗口销毁就取不到了
如果是MFC的话,那个Get函数还是可以用的。