问个MFC在显示窗体中无法操作窗体的问题

yxlovemoney 2018-02-12 02:17:21

首先我在窗口登录时,在A.CPP中,就对这个子窗口进行生成

m_conditionDlg.Create(IDD_DIALOG2, this);
m_conditionDlg.ShowWindow(SW_HIDE);

m_conditionDlg--是生成的子窗口的关联类


然后通过图片,左边的树结构,点击“条件单”去显示这个窗口,通过ShowWindow(SW_SHOW);去显示出来
图1


if (strItem == "条件单")
{
m_nCurMenu = 10;
CRect rt, rr;



GetClientRect(&rt);
int h = rt.Height();


GetDlgItem(IDC_STATIC_gg)->GetWindowRect(rr);
ScreenToClient(&rr);

p_rt = rt;
p_rr = rr;

rt.top = rt.top + 5; rt.bottom = h - 3; rt.left = rr.right + 10;
m_conditionDlg.MoveWindow(rt);
m_conditionDlg.ShowWindow(SW_SHOW);
//MessageBox("条件单测试");
}


这样生成的窗口是可以操作的,没问题的。


但是我通过下图的“条件”按钮 B.CPP生成上面的那个 “下单”窗口,在点击“下单”按钮,去生成刚刚的条件单窗口,
(其实还是通过A.CPP中
m_conditionDlg.Create(IDD_DIALOG2, this);
m_conditionDlg.ShowWindow(SW_HIDE);
的两句代码生成的窗口 将其显示出来)

图2


通过下面那样的代码显示

CfClientApp *app = (CfClientApp*)AfxGetApp(); // 这个函数可以得到当前应用进程的指针
m_mainDlg = (CMainDlg*)app->m_pMainWnd;
m_mainDlg->OpenConditionWindow(); // 显示条件单窗口


/*********************************************
* 函数名:OpenConditionWindow
* 功 能:显示条件单窗口
* 参 数:无
* 时 间:2018年2月8日15:00:11
* 编 写:YX
*********************************************/

void CMainDlg::OpenConditionWindow()
{

//p_rt.top = p_rt.top + 5; //p_rt.bottom = h - 3; //rt.left = rr.right + 10;
//m_conditionDlg.MoveWindow(p_rt);
//m_conditionDlg.Create(IDD_DIALOG2, this);
CRect rt;

GetClientRect(&rt);
rt.left += 530;
m_conditionDlg.MoveWindow(rt);
m_conditionDlg.ShowWindow(SW_SHOW);
}


但是这样显示出来的“条件单”窗口就出现了 图2 中的情况,这窗口跟另一个窗口出现的重叠的情况,而且“条件单”窗口还不能进行任何操作,鼠标在上面拖拽过,还会把“条件单”窗口给刷没了。

所以请问这是什么问题? 我该怎么写,才能在点击“下单”按钮后,显示出能操作的“条件单”窗口呢?
...全文
1061 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxlovemoney 2018-02-12
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
估计是父窗口制作this作怪吧, 前面的 m_conditionDlg.Create(IDD_DIALOG2, this);不要

if (strItem == "条件单")
{
  ……
  //显示之前创建
  if(m_conditionDlg.m_hWnd == NULL)
    m_conditionDlg.Create(IDD_DIALOG2, this);
  m_conditionDlg.MoveWindow(rt);
  m_conditionDlg.ShowWindow(SW_SHOW);
  ……  
}
不是哦,这个只是在A.CPP文件里面,对树形点击后显示出 “条件单”窗口 的, 并不影响 B.CPP 下单窗口对 “条件单”窗口的显示啊。因为 m_conditionDlg.Create(IDD_DIALOG2, this); 是在A.CPP初始化的方法里面做好的, 后面的按钮只是改变他的显示属性, 现在我是在B.CPP通过 “下单”按钮把这个 “条件单”窗口显示出来,所以通过下面的代码


	CfClientApp *app = (CfClientApp*)AfxGetApp(); // 这个函数可以得到当前应用进程的指针
	m_mainDlg = (CMainDlg*)app->m_pMainWnd;
	m_mainDlg->OpenConditionWindow();             // 显示条件单窗口


/*********************************************
* 函数名:OpenConditionWindow
* 功  能:显示条件单窗口
* 参  数:无
* 时  间:2018年2月8日15:00:11
* 编  写:YX
*********************************************/

void CMainDlg::OpenConditionWindow()
{

	//p_rt.top = p_rt.top + 5; //p_rt.bottom = h - 3; //rt.left = rr.right + 10;
	//m_conditionDlg.MoveWindow(p_rt);
	//m_conditionDlg.Create(IDD_DIALOG2, this);
	CRect rt;

	GetClientRect(&rt);
	rt.left += 530;
	m_conditionDlg.MoveWindow(rt);
	m_conditionDlg.ShowWindow(SW_SHOW);
}

所以这里加上这句,不影响的啊 if (strItem == "条件单") { …… //显示之前创建 if(m_conditionDlg.m_hWnd == NULL) m_conditionDlg.Create(IDD_DIALOG2, this); 。。。。。。 }
zgl7903 2018-02-12
  • 打赏
  • 举报
回复
估计是父窗口制作this作怪吧, 前面的 m_conditionDlg.Create(IDD_DIALOG2, this);不要

if (strItem == "条件单")
{
  ……
  //显示之前创建
  if(m_conditionDlg.m_hWnd == NULL)
    m_conditionDlg.Create(IDD_DIALOG2, this);
  m_conditionDlg.MoveWindow(rt);
  m_conditionDlg.ShowWindow(SW_SHOW);
  ……  
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧