对话框指针的有关问题
对话框指针的问题
由于程序的功能的需要,我在对话框类中定义了一个友元函数 Bfun()
Bfun()涉及对对话框的操作,需要取得对话框的指针。
方法是如下:
CStreamGetDlg *pdlg = (CStreamGetDlg * )AfxGetApp()->m_pMainWnd;
这样做没有问题,对话框程序是可以单独正确运行的。
后来,我把对话框,整合到多文档程序框架中,作为一个菜单响应弹出的对话框。
显然,Bfun()取得对话框的指针。不能采用
CStreamGetDlg *pdlg = (CStreamGetDlg * )AfxGetApp()->m_pMainWnd;
这种方法了,因为,这样得到的是框架主窗口的指针。
所以,我采用了另外一种办法:
HWND hWnd=::FindWindow(NULL,"识别与自动控制程序");
CWnd *pWnd=CWnd::FromHandle(hWnd);
CStreamGetDlg *pdlg=(CStreamGetDlg * )pWnd;
显然,编译可以正确通过,hWnd确实也可以正确的得到,我用Spy++抓取了同样的窗口句柄,进行过验证。
但是,最后得到的pdlg指针,发现pdlg指向的对话框中的变量的初始值都没有了,这最终导致了程序的访问错误。
我想问的是,我的第二种方法,错误在哪里?
为什么对话框对象的初始值会丢失?
有没有更好的替代方法,在友元函数中,能正确的取得对话框的指针?
------解决方案--------------------
没啥错误吧, 可以全局变量咯
------解决方案--------------------
用postmessage发消息
由于程序的功能的需要,我在对话框类中定义了一个友元函数 Bfun()
Bfun()涉及对对话框的操作,需要取得对话框的指针。
方法是如下:
CStreamGetDlg *pdlg = (CStreamGetDlg * )AfxGetApp()->m_pMainWnd;
这样做没有问题,对话框程序是可以单独正确运行的。
后来,我把对话框,整合到多文档程序框架中,作为一个菜单响应弹出的对话框。
显然,Bfun()取得对话框的指针。不能采用
CStreamGetDlg *pdlg = (CStreamGetDlg * )AfxGetApp()->m_pMainWnd;
这种方法了,因为,这样得到的是框架主窗口的指针。
所以,我采用了另外一种办法:
HWND hWnd=::FindWindow(NULL,"识别与自动控制程序");
CWnd *pWnd=CWnd::FromHandle(hWnd);
CStreamGetDlg *pdlg=(CStreamGetDlg * )pWnd;
显然,编译可以正确通过,hWnd确实也可以正确的得到,我用Spy++抓取了同样的窗口句柄,进行过验证。
但是,最后得到的pdlg指针,发现pdlg指向的对话框中的变量的初始值都没有了,这最终导致了程序的访问错误。
我想问的是,我的第二种方法,错误在哪里?
为什么对话框对象的初始值会丢失?
有没有更好的替代方法,在友元函数中,能正确的取得对话框的指针?
------解决方案--------------------
没啥错误吧, 可以全局变量咯
------解决方案--------------------
用postmessage发消息