程序里的一个子窗体需调用一回调函数,但当程序返回后该窗体类本来已经赋值的成员变量都清空或者由构造函数重新赋值,不知道是怎么回事情 。 如窗体类 CaDlg 中
oninitdialog 本来已经将 m_x 初始化,
在调用一回调后
LRESULT CALLBACK WndProc1( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
//CaDlg* dlg=new CaDlg();
switch( uMsg )
{
case WM_LBUTTONDOWN:
//((CaDlg* )AfxGetMainWnd())->ProcessLButtonDown( hwnd );
//AfxGetMainWnd()
//((CaDlg* )((CMainDlg*)(::AfxGetApp ()->GetMainWnd ()))->GetMyWnd())->OnInitDialog ();
((CaDlg* )((CMainDlg*)(::AfxGetApp ()->GetMainWnd ()))->GetMyWnd())->ProcessLButtonDown (hwnd);
//dlg->ProcessLButtonDown (hwnd);
//delete dlg;
return 0;
}本来我直接用AfxGetMainWnd() 但想了下这是主窗体句柄
就转了几个弯子取的该子窗体句柄,然后调用成员函数aDlg::ProcessLButtonDown(),这时候发现以前初始化的变量都清空或者由构造函数重新赋值 谢谢 帮忙看看,分还有 :)
oninitdialog 本来已经将 m_x 初始化,
在调用一回调后
LRESULT CALLBACK WndProc1( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
//CaDlg* dlg=new CaDlg();
switch( uMsg )
{
case WM_LBUTTONDOWN:
//((CaDlg* )AfxGetMainWnd())->ProcessLButtonDown( hwnd );
//AfxGetMainWnd()
//((CaDlg* )((CMainDlg*)(::AfxGetApp ()->GetMainWnd ()))->GetMyWnd())->OnInitDialog ();
((CaDlg* )((CMainDlg*)(::AfxGetApp ()->GetMainWnd ()))->GetMyWnd())->ProcessLButtonDown (hwnd);
//dlg->ProcessLButtonDown (hwnd);
//delete dlg;
return 0;
}本来我直接用AfxGetMainWnd() 但想了下这是主窗体句柄
就转了几个弯子取的该子窗体句柄,然后调用成员函数aDlg::ProcessLButtonDown(),这时候发现以前初始化的变量都清空或者由构造函数重新赋值 谢谢 帮忙看看,分还有 :)
解决方案 »
- 关于在com(dll)内部生成一个窗体,调用接口关闭内部窗体时候外部调用程序也关闭的问题!
- 斑竹们结贴,我散分
- vc 一个子对话框调用另一个子对话框的clistctrl
- 请教各位如何将access中符合条件的值查询出来并赋给一个变量l哈
- 图片的保存
- 哪位大侠可以提供/sys/socket.h源文件
- 谁能给我一个HTTP,FTP文件下载类,支持断点续传的。
- 如何快速得到一个网络内的所有活动的主机列表?
- 关于控件的问题
- 请教!!!如何在对话框的标题栏加上小图标!?谢谢!!!
- 高手赐教:支持拖动的ListBox问题
- 紧急求助,用Wise InstallMaster 9.02 这个安装制作程序的烦人的问题
此处的dlg不是原来已经初始化了的对话框了
在oninitdlg赋值
回调后被清空了回调函数在令外一个类
ProcessLButtonDown ()又是怎么写的?
说不定这两个东东有问题
CaDlg* dlg=new CaDlg();
dlg->ProcessLButtonDown ();
delete dlg;
这样取句柄应该行吧但还是不对!!!!555各位大虾帮帮忙 小弟谢过 要分好说 :)
2. 实例化后是在哪里调DoModal()的?
3. WndProc1是谁的WNDPROC,它和CaDlg的实例间是什么关系?楼主应该知道:
1. 只有等DoModal()后,OnInitDialog()才用被调用,你的m_x才会被初始化.
2. 在你"转了几个弯子取的该子窗体句柄"时,你所取得的"子窗体句柄"并不一定是你想像中要用的那个子窗口实例的句柄.
在CFileExplorDlg::OnNMDblclkList1中实例化CaDlg
实例化代码是
CaDlg* playDlg=new CaDlgDlg(this);
playDlg->DoModal();
delete playDlg;CaDlg 的回调函数:
LRESULT CALLBACK WndProc1(
HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );//实例CaDlg的消息重载处理过程徽调类容:
LRESULT CALLBACK WndProc1( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
CaDlg* dlg=new CaDlg();
switch( uMsg )
{
case WM_LBUTTONDOWN:
//((CaDlg* )AfxGetMainWnd())->ProcessLButtonDown( hwnd );
dlg->ProcessLButtonDown (hwnd);
delete dlg;
return 0;
case WM_PAINT:
}
ProcessLButtonDown()函数重新处理左键消息
void CaDlg::ProcessLButtonDown(HWND hwnd)
{
int i =0;
PRECT pRect;
switch(m_x) //m_x 在实例化时OnInitDialog()初始化成功 赋值为16,但回调处理消息进入这个函数后 m_x的值就变成了构造函数中初始的4
{
case 1:
Proc1();
break;
case 4:
Proc2();
break;
case 9:
... ...
}
}
我也觉得子窗体句柄有问题,但我现在这样new 有问题吗?
多谢楼上几位大哥慷慨解疑:)