听我详细道来,首先我创立了一个MDI 多文档 。。里面的继承类是FORMVIEW,这样就可以直接往上放控件了
我放了一个TAB CONTROL控件。。因为TAB CONTROL 控件 不能往上放东西。于是加载了一个DLG在上面。叫IDD_DIALOG1以上都已经完成了
现在我如何在左边的LISTVIEW中获得该DLG的句柄
我使用HWND hwndtmp=GetDlgItem(IDD_DIALOG1)->GetSafeHwnd();
每次的返回数值都是0,没有拿到郁闷了
我放了一个TAB CONTROL控件。。因为TAB CONTROL 控件 不能往上放东西。于是加载了一个DLG在上面。叫IDD_DIALOG1以上都已经完成了
现在我如何在左边的LISTVIEW中获得该DLG的句柄
我使用HWND hwndtmp=GetDlgItem(IDD_DIALOG1)->GetSafeHwnd();
每次的返回数值都是0,没有拿到郁闷了
--------
没见过这样使用。在加载DLG时就能得到这个对话框的指针,存为成员变量,就可以访问了。
2.可以采用LS的方法存储这个对话框的句柄,当用的时候,直接使用。不过还是需要知道是不是LZ需要的。
3.GetSafeHwnd()是可以获得对话框的句柄,m_hWnd也可以存储对话框的句柄,但是GetDlgItem()又不是万能的,它的使用是有限制的,在一些情况下就是等不到该对话框的句柄的。
1)就是父窗口没有创建的时候,调用则得不到该ID。
2)如果不存在父子关系,则也得不到窗口的句柄。
3)GetDlgItem(IDD_DIALOG1)得到的是cwnd类型,需要强制转化为想要的类型,如(CDialog*)GetDlgItem(IDD_DIALOG1)
((CPanelBuilderView*)(((CMainFrame*)(AfxGetApp()->m_pMainWnd))->m_SpliterWnd).GetPane(0,1))这是我的代码,你写应该把CPanelBuilderView转换成LISTVIEW吧,然后再得到对话框即可,当然后你要将FRAME里的spliterwnd改成公有的成员变量
我最后的解决方法是通过全局变量
反正是DWORD类型的。就直接可以拿来用了
谢谢大家!楼上的又让我长了不少知识
结贴!