怎么设定父窗口 在主窗口中启动一个线程,线程中显示一个对话框(非模式的),怎么设定对话框的父窗口为主窗口。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 把主窗口的HWND作为参数传递到你的线程中创建的时候指定不就可以了吗? 在主窗口中创建线程,AfxBeginThread(ThreadFunction,this);UINT ThreadFunction(PVOID *pVoid){ CMyDlg *pDlg = (CMyDlg*)pVoid; pDlg->ShowModlessDlg();}CMyDlg::ShowModlessDlg(){//创建一个非模式对话框。这个应该会了吧?} unsigned CFileDlgMT::ThreadMain(void){ CDlg *pDial = NULL; try { pDial = new CDlg( m_strCaption , m_pParent ); pDial->Create(IDD_DLG); if ( m_pParent ) { pDial->CenterWindow(m_pParent); pDial->ShowWindow(SW_SHOW); } m_pDlg = pDial; SetEvent( ( HANDLE )m_cSmartHandle ); for( ; ; ) { if( m_bTerminate ) { break; } DoEvents(); Sleep( 50 ); } } catch( ... ) { } if( pDial ) { pDial->DestroyWindow(); } return 0;} 代码说明:在线程里创建非模式对话框。创建之后一直等待直到m_bTerminate 为真后对话框关闭。pDial->Create(IDD_DLG);变更成pDial->Create(IDD_DLG,m_pParent );后发生异常。 m_pParent是怎么来的?另外,你的代码中缺少消息循环。 m_pParent是 否空指针?它怎么得出来的?LZ调试一下。 这只是部分代码,m_pParent是mainframe的指针。我只是显示窗口,再关闭,不用消息循环。程序是没问题的,只是父窗口设置不上。其他都正确。 对话框模板设置了 WS_CHILD了吗? m_pParent有问题,你调试看看值对不对。如果没有消息循环,ShowWindow之后应该调用UpdateWindow。 如果没有消息循环,ShowWindow之后应该调用UpdateWindow看看m_pParent最终值 DoEvents()里有消息处理,会处理刷新。从理论上讲两个线程的窗口能设成父子关系的窗口吗?有谁做过,回答是还是不是就行。 m_pEdit->SetParent(&m_List);刚写的程序,函数参数应该为指针. pDial->Create(IDD_DLG);是基类的吗?是基类的Create的话缺省的是pParent = NULL; 交换机 vc编程? 基于对话框的程序如何添加记录到数据库 No such file or directory 高手指点:消息OnSize的用法 请问如何捕获软键盘的按键信息?? 我用mfc自动生成了一个oledb数据库操作程序,未作改动,可编译后提示数据库打开失败。 跪求<<COM原理与应用>>例子程序代码,谢谢! 请问全局对象为什么先赋值为NULL? 简单的问题:如何长整型或整型为字符串?在线等待 为什么? 如何用代码动态改变水晶报表的文本框内容? 有经验人士进,进行拖拽后,剪切板的数据格式怎么没变? 有关IRichEditOleCallback,的复制,粘贴的操作.
创建的时候指定不就可以了吗?
UINT ThreadFunction(PVOID *pVoid)
{
CMyDlg *pDlg = (CMyDlg*)pVoid;
pDlg->ShowModlessDlg();
}CMyDlg::ShowModlessDlg()
{
//创建一个非模式对话框。这个应该会了吧?
}
{
CDlg *pDial = NULL;
try
{
pDial = new CDlg( m_strCaption , m_pParent );
pDial->Create(IDD_DLG);
if ( m_pParent )
{
pDial->CenterWindow(m_pParent);
pDial->ShowWindow(SW_SHOW);
}
m_pDlg = pDial;
SetEvent( ( HANDLE )m_cSmartHandle );
for( ; ; )
{
if( m_bTerminate )
{
break;
}
DoEvents();
Sleep( 50 );
}
}
catch( ... )
{
}
if( pDial )
{
pDial->DestroyWindow();
}
return 0;
}
在线程里创建非模式对话框。创建之后一直等待直到m_bTerminate 为真后对话框关闭。pDial->Create(IDD_DLG);
变更成
pDial->Create(IDD_DLG,m_pParent );后发生异常。
另外,你的代码中缺少消息循环。
它怎么得出来的?
LZ调试一下。
我只是显示窗口,再关闭,不用消息循环。程序是没问题的,只是父窗口设置不上。其他都正确。
对话框模板设置了 WS_CHILD了吗?
如果没有消息循环,ShowWindow之后应该调用UpdateWindow。
看看m_pParent最终值
有谁做过,回答是还是不是就行。
刚写的程序,函数参数应该为指针.