MFC在自定义的类中如何获取视图窗口的句柄

时间:2022-03-31 20:00:55

         HWND hwnd;
CWnd *pWnd;
pWnd = ((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();
hwnd = pWnd->GetDlgItem(IDD_CURRENT_CALL)->GetSafeHwnd();


我这样写,获得的hwnd是空的,是不是写的有问题!

11 个解决方案

#1


((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();返回的应该是CView*啊,再说了如果想在自己创建的类获取到windows的句柄那可以想要哪个windows的句柄就把哪个windows的句柄传给你的类对象就行了,可以通过函数或消息机制。

#2


补充:如果是你的类对象包含窗口类,那直接在窗口类中把句柄暴露出去;如果是窗口类包含你的类对象,那可以把窗口类的句柄做为构造函数的参数传进你的类对象中,或者通过方法都可以;如果没有两个对象没有什么关系那么就可以使用消息传送。

#3


引用 2 楼 SiGoYi 的回复:
补充:如果是你的类对象包含窗口类,那直接在窗口类中把句柄暴露出去;如果是窗口类包含你的类对象,那可以把窗口类的句柄做为构造函数的参数传进你的类对象中,或者通过方法都可以;如果没有两个对象没有什么关系那么就可以使用消息传送。


两个对象没有关系,现在情况是,我的一个线程收到数据后,进行处理存储,然后获取要更新数据的试图窗口句柄,并PostMessage通知对应的事件去更新窗口数据。

#4


根据线程处理的数据不同,获取不同的视图窗口句柄,通知对应的视图窗口更新数据!这里要获取不同的视图窗口,所以有没有获取任意视图窗口句柄的方法?

#5


顶起,别沉了!!!

#6


构造这个类时可以将视图窗口句柄保存到这个类中

#7


引用 6 楼 tixisong 的回复:
构造这个类时可以将视图窗口句柄保存到这个类中


我这个类是单独的,是由多线程调用的,构造的时候怎么传参?这里只有把每个视图的指针或者视图的句柄先保存起来,然后通过全局APP或者MainFrame去调用?我不知道如何在APP或者MainFrame类中保存每个视图的指针?

#8


引用 6 楼 tixisong 的回复:
构造这个类时可以将视图窗口句柄保存到这个类中


而且我这个是单文档项目。

#9


注意:
GetActiveView()前先SetActiveView 

BOOL CMainFrame::OnCreateClient中
SetActiveView(CXXView);

#10


引用 9 楼 jianghandaxue 的回复:
注意:
GetActiveView()前先SetActiveView 

BOOL CMainFrame::OnCreateClient中
SetActiveView(CXXView);


直接这样写编译不过啊!SetActiveView(CXXView);

#11


谢谢大家的回复,问题已经解决!

#1


((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();返回的应该是CView*啊,再说了如果想在自己创建的类获取到windows的句柄那可以想要哪个windows的句柄就把哪个windows的句柄传给你的类对象就行了,可以通过函数或消息机制。

#2


补充:如果是你的类对象包含窗口类,那直接在窗口类中把句柄暴露出去;如果是窗口类包含你的类对象,那可以把窗口类的句柄做为构造函数的参数传进你的类对象中,或者通过方法都可以;如果没有两个对象没有什么关系那么就可以使用消息传送。

#3


引用 2 楼 SiGoYi 的回复:
补充:如果是你的类对象包含窗口类,那直接在窗口类中把句柄暴露出去;如果是窗口类包含你的类对象,那可以把窗口类的句柄做为构造函数的参数传进你的类对象中,或者通过方法都可以;如果没有两个对象没有什么关系那么就可以使用消息传送。


两个对象没有关系,现在情况是,我的一个线程收到数据后,进行处理存储,然后获取要更新数据的试图窗口句柄,并PostMessage通知对应的事件去更新窗口数据。

#4


根据线程处理的数据不同,获取不同的视图窗口句柄,通知对应的视图窗口更新数据!这里要获取不同的视图窗口,所以有没有获取任意视图窗口句柄的方法?

#5


顶起,别沉了!!!

#6


构造这个类时可以将视图窗口句柄保存到这个类中

#7


引用 6 楼 tixisong 的回复:
构造这个类时可以将视图窗口句柄保存到这个类中


我这个类是单独的,是由多线程调用的,构造的时候怎么传参?这里只有把每个视图的指针或者视图的句柄先保存起来,然后通过全局APP或者MainFrame去调用?我不知道如何在APP或者MainFrame类中保存每个视图的指针?

#8


引用 6 楼 tixisong 的回复:
构造这个类时可以将视图窗口句柄保存到这个类中


而且我这个是单文档项目。

#9


注意:
GetActiveView()前先SetActiveView 

BOOL CMainFrame::OnCreateClient中
SetActiveView(CXXView);

#10


引用 9 楼 jianghandaxue 的回复:
注意:
GetActiveView()前先SetActiveView 

BOOL CMainFrame::OnCreateClient中
SetActiveView(CXXView);


直接这样写编译不过啊!SetActiveView(CXXView);

#11


谢谢大家的回复,问题已经解决!