DLL中创建具有属性页的对话框解决方法
DLL中创建具有属性页的对话框
int StartPageDia(CDialog ** pDialog,BOOL bIsModal,HWND hWndParent,UINT msgToParent,PBYTE buf )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
static CProperDia * pDia = NULL;
if ( pDia == NULL)
{
pDia = new CProperDia;
pDia-> Create( CProperDia::IDD,CWnd::FromHandle(hWndParent) );
*pDialog =pDia;
}
return 0;
}
DLL中引出此函数,创建具有属性页的对话框,当点击属性页中的对话框子控件,然后点击其他窗口,属性页丢失焦点,导致对话框总是在不断的发出接收WM_GETDLGCODE消息,出现死循环,那位大侠能伸出援手,百分求助,急等!
static CDiaSheet * m_dlgPropertySheet =NULL;
void CProperDia::InitSheet()
{
CRect rcsheet;
GetDlgItem(IDC_FRAME)-> GetWindowRect(&rcsheet);
ScreenToClient(&rcsheet);
if ( NULL == m_dlgPropertySheet)
{
m_dlgPropertySheet
= new CDiaSheet( "Simple PropertySheet ");
ASSERT(m_dlgPropertySheet);
// Add two pages to the CPropertySheet object. Both m_stylePage and
CPropertyPage *m_stylePage = new CPage1;
m_stylePage-> Create( CPage1::IDD,m_dlgPropertySheet);
m_dlgPropertySheet-> AddPage(m_stylePage);
m_dlgPropertySheet-> Create(this, WS_CHILD |WS_VISIBLE , 0); //NULL !=m_hParentWnd ? CWnd::FromHandle(m_hParentWnd) :
m_dlgPropertySheet-> MoveWindow( &rcsheet);
}
}
------解决方案--------------------
OnSetActive, OnKillFocus 直接返回
------解决方案--------------------
这是MFC的一个已知的bug,
http://support.microsoft.com/kb/149501/en-us
int StartPageDia(CDialog ** pDialog,BOOL bIsModal,HWND hWndParent,UINT msgToParent,PBYTE buf )
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
static CProperDia * pDia = NULL;
if ( pDia == NULL)
{
pDia = new CProperDia;
pDia-> Create( CProperDia::IDD,CWnd::FromHandle(hWndParent) );
*pDialog =pDia;
}
return 0;
}
DLL中引出此函数,创建具有属性页的对话框,当点击属性页中的对话框子控件,然后点击其他窗口,属性页丢失焦点,导致对话框总是在不断的发出接收WM_GETDLGCODE消息,出现死循环,那位大侠能伸出援手,百分求助,急等!
static CDiaSheet * m_dlgPropertySheet =NULL;
void CProperDia::InitSheet()
{
CRect rcsheet;
GetDlgItem(IDC_FRAME)-> GetWindowRect(&rcsheet);
ScreenToClient(&rcsheet);
if ( NULL == m_dlgPropertySheet)
{
m_dlgPropertySheet
= new CDiaSheet( "Simple PropertySheet ");
ASSERT(m_dlgPropertySheet);
// Add two pages to the CPropertySheet object. Both m_stylePage and
CPropertyPage *m_stylePage = new CPage1;
m_stylePage-> Create( CPage1::IDD,m_dlgPropertySheet);
m_dlgPropertySheet-> AddPage(m_stylePage);
m_dlgPropertySheet-> Create(this, WS_CHILD |WS_VISIBLE , 0); //NULL !=m_hParentWnd ? CWnd::FromHandle(m_hParentWnd) :
m_dlgPropertySheet-> MoveWindow( &rcsheet);
}
}
------解决方案--------------------
OnSetActive, OnKillFocus 直接返回
------解决方案--------------------
这是MFC的一个已知的bug,
http://support.microsoft.com/kb/149501/en-us