无模式对话框无法响应消息

yaopeijiang7 2014-01-11 12:00:42
	MsgHead msg;
msg.dwcmd = CMD_SHELL;
msg.dwSize = sizeof(MSG_CMDLINKE)-1;
POSITION pos = m_list.GetFirstSelectedItemPosition(); //CListCtrl迭代器
while(pos) //循环
{
int nItem = m_list.GetNextSelectedItem(pos);
Per_Io_Data* Lp_Io_Datat = (Per_Io_Data*)m_list.GetItemData(nItem);
miocp.PostTcpSend(Lp_Io_Datat,&msg,MSG_CMDLINKE);
/////////////////////////////////////////
//主控端循环发送请求

//
}



case CMD_SHELLRUN:
// m_cmd = new CshellDlg(this,Lp_Io_Data);
/* CshellDlg* pShellDlg = new CshellDlg;
//m_cmd->Create(IDD_CCMDSHELL, this);
// 设置父窗口为卓面
pShellDlg->Create(IDD_CCMDSHELL,GetDesktopWindow());
pShellDlg->ShowWindow(SW_SHOW);*/
//PostMessage(WM_SHELLDLGSHOW,(DWORD)Lp_Io_Data, 0);


pShellDlg->Create(IDD_CCMDSHELL, GetDesktopWindow());
pShellDlg->ShowWindow(SW_SHOW);
pShellDlg->UpdateWindow();


主控端发送请求 - 客户端通过 - 主控端收到消息 - 创建无模式对话框

这样创建无模式对话框会出现无法响应的情况vc6.0下是完全没问题,但是vs2010就有问题了,请问是什么原因呢
...全文
315 点赞 收藏 6
写回复
6 条回复
向立天 2014年02月19日
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
回复 点赞
Eleven 2014年01月11日
没发一个消息就Create一次,那么你的对话框Create了太多次了吧,只能Create一次。 Create调用之前先判断一下if(NULL == pShellDlg->GetSafeHwnd())如果为NULL,再Create
回复 点赞
Eleven 2014年01月11日
额,你两次贴的代码怎么不一样啊
回复 点赞
yaopeijiang7 2014年01月11日
	case CMD_SHELLRUN:

				PostMessage(WM_SHELLDLGSHOW,(DWORD)Lp_Io_Data, 0);/*一定要用PostMessage
																  去创建窗口!*/
				break;
LRESULT CAVClientDlg::OnShellDlgShow(WPARAM wParam, LPARAM lParam)
{
	// pInput = (LPSocketInput)wParam;
	Per_Io_Data *Lp_Io_Data =(Per_Io_Data*)wParam;
	CshellDlg *pShellDlg = new CshellDlg(this,Lp_Io_Data);
	pShellDlg->Create(IDD_CCMDSHELL, GetDesktopWindow());
	pShellDlg->ShowWindow(SW_SHOW);
	//pShellDlg.UpdateWindow();

	//delete pInput;
	return 0;
}
最后这个问题我还是解决了,对于我这种情况得用PostMessage去创建窗口,对mfc的消息机制不熟,具体原因我也不明白
回复 点赞
yaopeijiang7 2014年01月11日
没人吗....
回复 点赞
yaopeijiang7 2014年01月11日
版主你理解错我的意思了,窗口是Create出来了,但是无法响应
引用 1 楼 VisualEleven 的回复:
没发一个消息就Create一次,那么你的对话框Create了太多次了吧,只能Create一次。
Create调用之前先判断一下if(NULL == pShellDlg->GetSafeHwnd())如果为NULL,再Create
回复 点赞
发动态
发帖子
界面
创建于2007-09-28

7976

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告