对话框工程中,有一个主窗口A,我又加入一个对话框B,
在A的类的头文件中声明B类,在A的InitDialog中,创建并显示B窗口,而且B是A的一个子窗口(在属性中有选择child)在A上有按钮G,其OnClick中,想使B销毁后重新创建并显示,但总是不成功:
调用B的Destroy不行,调用SendMessage(WM_CLOSE)也一样不行,以前的窗口可以销失,但是新创建的窗口还是原来的最后状态
解决方案 »
- VC2010 CMFCTasksPane 问题
- 文件夹无权访问,而文件夹对访问权限未修改,技术上怎么实现,仅限技术讨论
- 一个最基本的问题: socket的io操作为什么有的时候会阻塞?
- 透明打印
- 用MFC如何获得局域网中服务器的时间?
- 我的一个窗口中有多个view, 如何在不同的view切换时,能调用view的初始化函数OnInitialUpdate
- 怎样使自定义控件的Caption属性自动生效??
- VC中对*.dbf自由表文件操作,只能用VFP或FOXPRO的ODBC驱动吗?
- 请教在ICMP协议中怎样使用“路由器通告”和“路由器请求”
- 想在combo box控件中,指定成员变量为int类型,该怎么办?
- 为什么我输出的字大小随坐标范围的不同会改变?
- 如何在程序中禁用DirectDraw?
可以用OnOK()来关闭。
b->DestroyWindow();
但是新创建的窗口还是原来的最后状态是指什么??是否调了b的ShowWindow
void CDirect1523Dlg::OnToolsRemittance()
{
//*
if( g_PubFun.m_DlgRemittance.m_hWnd != NULL )
{
//这里用SendMessage或者DestroyWindow都是一样的效果,可以把窗口隐藏但不能销毁,即它的m_hWnd不是空。我这里手动设置成NULL,是没有作用的
g_PubFun.m_DlgRemittance.SendMessage( WM_CLOSE );
g_PubFun.m_DlgRemittance.m_hWnd = NULL;
}
//*/ //if ( g_PubFun.m_DlgRemittance.m_hWnd == NULL )
//{
g_PubFun.m_DlgRemittance.Create( IDD_DLG_MONEY_REMITTANCE );
g_PubFun.m_DlgRemittance.CenterWindow();
//} g_PubFun.m_DlgRemittance.ShowWindow( SW_SHOW );
g_PubFun.m_DlgRemittance.ShowWindow( SW_RESTORE );
g_PubFun.m_DlgRemittance.BringWindowToTop();
}
{
HWND hWnd = g_PubFun.m_DlgRemittance.m_hWnd;
if( hWnd != NULL && ::IsWindow(hWnd) )
{
g_PubFun.m_DlgRemittance.SendMessage( WM_CLOSE );
g_PubFun.m_DlgRemittance.m_hWnd = NULL;
} hWnd = g_PubFun.m_DlgRemittance.m_hWnd;
if( hWnd == NULL || !(::IsWindow(hWnd)) )
{
g_PubFun.m_DlgRemittance.Create( IDD_DLG_MONEY_REMITTANCE );
g_PubFun.m_DlgRemittance.CenterWindow();
} g_PubFun.m_DlgRemittance.ShowWindow( SW_SHOW );
g_PubFun.m_DlgRemittance.ShowWindow( SW_RESTORE );
g_PubFun.m_DlgRemittance.BringWindowToTop();
}
{
if( g_PubFun.m_pDlgRemittance != NULL )
{
g_PubFun.m_pDlgRemittance->DestroyWindow();
delete g_PubFun.m_pDlgRemittance;
g_PubFun.m_pDlgRemittance = NULL;
} g_PubFun.m_pDlgRemittance = new CDlgRemittance();
g_PubFun.m_pDlgRemittance->Create( IDD_DLG_MONEY_REMITTANCE );
g_PubFun.m_pDlgRemittance->CenterWindow(); g_PubFun.m_pDlgRemittance->GetRate();
g_PubFun.m_pDlgRemittance->ShowWindow( SW_SHOW );
g_PubFun.m_pDlgRemittance->ShowWindow( SW_RESTORE );
g_PubFun.m_pDlgRemittance->BringWindowToTop();
}
void CDddDlg::OnButton1()
{
//
HWND hWnd = aaadlg.GetSafeHwnd();
if (hWnd != NULL)
{
aaadlg.DestroyWindow();//消毁以前的对话框
aaa tempdlg;//建立一个新的对象
tempdlg.Create(IDD_DIALOG1,this);
aaadlg.Attach(tempdlg.Detach());//这里应该没有内存泄漏,要查一查才知道。
aaadlg.ShowWindow(SW_SHOW);
}
}
你说的有道理。